Koşullu Biçimlendirme

Katılım
7 Mayıs 2017
Mesajlar
58
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
07/07/2018
Merhaba,

A2 ile H43 aralığındaki hücrelerde veriler var. Bunlar hem yazı hem de metrekare şeklinde. Örnek:

Deneme Verisi-Kişi A-15.25 M2-Eryaman

Bu aralıktaki M2 değerlerini kalın yapma şansımız var mı? M2 dedim çünkü bu sayı değişken. Kimi zaman 15.25 kimi zaman 2.65 kimi zaman da 165.42

Çok teşekkür ederim.
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Merhaba,

Makro ile yapabilirsiniz.

Kod:
Sub Duzenle()

    Dim a As Range, b As Byte
    
    For Each a In Range("A2:H43")
        If a <> "" Then
            a.Font.Bold = False
            b = InStr(1, a, "M2")
            If b > 0 Then
                a.Characters(b, 2).Font.Bold = True
            End If
        End If
    Next a
  
End Sub
.
 
Katılım
7 Mayıs 2017
Mesajlar
58
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
07/07/2018
Ömer Bey, teşekkürler hızlı dönüş için. Kodu çalıştırdım fakat M2 kısmını kalın yaptı. Ben ise M2'nin önündeki sayı ile beraber yapmasını istiyordum. Bu mümkün mü?
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Veri yapınızı görmem için, 5-6 farklı veri girişi yaparak küçük bir örnek dosya eklemenizi rica ederim.

.
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Detaylı deneme yapmadım.

Kod:
Sub Duzenle()

    Dim a As Range, b As Byte, c As String, d, e
    
    For Each a In Range("A2:H43")
        If a <> "" Then
            a.Font.Bold = False
            b = InStr(1, a, "M2")
            c = Left(a, b)
            d = Split(c, " ")
            e = d(UBound(d) - 1)
            If b > 0 Then
                a.Characters(b - Len(e) - 1, Len(e) + 3).Font.Bold = True
            End If
        End If
    Next a
  
End Sub
.
 
Katılım
7 Mayıs 2017
Mesajlar
58
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
07/07/2018
Harika oldu. :) Gene süpersiniz Ömer bey. Eline sağlık.
 
Katılım
7 Mayıs 2017
Mesajlar
58
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
07/07/2018
Ömer Bey, gene ben. :))

Bu test dosyasında hep M2 vardı. Eğer ki hücrenin içinde M2 yoksa
Kod:
e = d(UBound(d) - 1)
satırında hata veriyor. M2 olmayan hücrelerde bu kodu çalıştırmama gibi bir seçenek olabilir mi?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,199
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

Kod:
Sub TEST()
    Dim Veri As Range, Bul As Integer, X As Integer, Karakter As String
    
    For Each Veri In Range("A2:H43")
        If Veri.Value <> "" Then
            Veri.Font.Bold = False
            Bul = InStr(1, Veri.Value, " M2")
            If Bul > 0 Then
                For X = Bul To 1 Step -1
                    Karakter = Mid(Veri.Value, X, 1)
                    Select Case Karakter
                        Case " ", 0 To 9, ".", ","
                        Case Else
                            Exit For
                    End Select
                Next
                Veri.Characters(X + 1, Bul - X + 2).Font.Bold = True
            End If
        End If
    Next
End Sub
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Ömer Bey, gene ben. :))

Bu test dosyasında hep M2 vardı. Eğer ki hücrenin içinde M2 yoksa
Kod:
e = d(UBound(d) - 1)
satırında hata veriyor. M2 olmayan hücrelerde bu kodu çalıştırmama gibi bir seçenek olabilir mi?
Korhan Bey'in yanıtını da kullanabilirsiniz.

Aynı düzende kodlardaki,

If b > 0 Then satırını eski yerinden silip;

b = InStr(1, a, "M2") satırından sonra yazarsanız da istediğiniz olur.

Kod:
Sub Duzenle()

    Dim a As Range, b As Byte, c As String, d, e
    
    For Each a In Range("A2:H43")
        If a <> "" Then
            a.Font.Bold = False
            b = InStr(1, a, "M2")
            [COLOR="Blue"]If b > 0 Then[/COLOR]
                c = Left(a, b)
                d = Split(c, " ")
                e = d(UBound(d) - 1)
                 a.Characters(b - Len(e) - 1, Len(e) + 3).Font.Bold = True
            End If
        End If
    Next a
  
End Sub
Gibi.

.
 
Katılım
7 Mayıs 2017
Mesajlar
58
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
07/07/2018
Korhan Bey ve Ömer Bey,

Teşekkür ediyorum ikinize de. Ömer Bey, sizin cevaptan önce Korhan Bey'in yazmış olduğu kod ile işimi hallettim. Çıkan ihtiyaçlar doğrultusunda da kodu kendime göre uyarladım ve ektsra satır ekledim End Sub'dan önce.

Kod:
For Each Koyu In Range("C2:H2")
    Koyu.Font.Bold = True
    Next
    For Each Koyu2 In Range("C9:H9")
    Koyu2.Font.Bold = True
    Next
Anlaşılacağı üzere C2:H2 ve C9:H9 satırlarındaki bold özelliğini kaybetmek istemediğim için bunu yaptım. Bunu bir döngüye koyup her 6 satırda bir bu kodu çalıştırma şansım var mı?
 
Son düzenleme:

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Aşağıdaki kod yeterli olur.

Kod:
Sub Bold()
    
    Dim i As Byte
    
    For i = 2 To 43 '2 ile 43.satır arası işlem yapar
        If (i - 2) Mod 6 = 0 Then
        'Mod 6 değeri 6 satırda bir işlemi ifade eder.
            Cells(i, "C").Resize(1, 6).Font.Bold = True
            'Resize(1, 6) değeri C ile H arasındaki sütun sayısını ifade eder.
        End If
    Next i
    
End Sub
.
 
Katılım
7 Mayıs 2017
Mesajlar
58
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
07/07/2018
Ömer Bey, teşekkür ediyorum. Güzel bir takvim oldu sayenizde. İkinizin de emeğine sağlık.
 
Üst