Hücredeki kelimenin eldeki kelime listesinde karşılığı var mı diye kontrol etme

Katılım
22 Ağustos 2011
Mesajlar
6
Excel Vers. ve Dili
Excel 2007- 2010, Türkçe
elimde sağında solunda (ortasında değil) harfler olabilecek kirli diyebileceğim data var, bir de bu kirli datada yer alan kelimelerin temiz halleri var, liste şeklinde. amacım bu datayı temizlemek.

misal:
|kirli|
adfahmetasd
yhmehmetadsah
ayşekrk

temiz halleri dediğim ise;
|temiz|
mahmut
fethi
ahmet
mehmet
ayşe

vs gibi.

bunu mümkünse fonksiyonla, olmadı makroyla nasıl yaparım?

bul veya mbul'da aranacak değer tek hücre olduğu için yapamıyorum, yoksa aranacak değer olarak elimdeki temiz datayı, sonra da aranacağı kirli data hücresini çekip yapabilirdim ama dediğim gibi olmuyor, bir çeşit loop'a vs ihtiyacım var.

teşekkürler.
 
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Sayfa1 A ya temiz, Sayfa2 A ya kirli datayı aşağı doğru yazın.

MENU makrosunu çalıştırın.

Kirli datanın içinden temiz olanı çıkaracaktır.


Kod:
Sub MENU()
  Call kontrol
End Sub

Public Function buyukharf(cumle)
gecici = ""
For i = 1 To Len(cumle)
          h = Mid(cumle, i, 1)
          Select Case h
            Case "ğ": gecici = gecici + "Ğ"
            Case "ü": gecici = gecici + "Ü"
            Case "ş": gecici = gecici + "Ş"
            Case "ç": gecici = gecici + "Ç"
            Case "ö": gecici = gecici + "Ö"
            Case "ı": gecici = gecici + "I"
            Case "i": gecici = gecici + "İ"
            Case Else: gecici = gecici + UCase(h)
            End Select
Next i
buyukharf = gecici
End Function

Sub kontrol()
  Application.ScreenUpdating = False
  Sheets("Sayfa2").Select
  sonsatirkirli = Cells(Rows.Count, "A").End(3).Row
  
  Columns("B:B").Select
  Selection.ClearContents
  Range("B1").Select
  
  Sheets("Sayfa1").Select
  sonsatirtemiz = Cells(Rows.Count, "A").End(3).Row
  
  For i = 1 To sonsatirtemiz
    Sheets("Sayfa1").Select
    temiz = buyukharf(Cells(i, 1).Value)
    
    For j = 1 To sonsatirkirli
      Sheets("Sayfa2").Select
      kirli = buyukharf(Cells(j, 1).Value)
      kirliorg = Cells(j, 1).Value
      If InStr(kirli, temiz) > 0 Then
         basla = InStr(kirli, temiz)
         Cells(j, 2).Value = Mid(kirli, basla, Len(temiz))
         'Bu bölüm adresten şehir i çıkarır.
          Cells(j, 1).Value = Left(kirliorg, basla - 1) & Mid(kirliorg, basla + Len(temiz), Len(kirliorg))
      End If
    Next j
    
  Next i
  
  Application.ScreenUpdating = False

  
End Sub
 
Son düzenleme:
Katılım
22 Ağustos 2011
Mesajlar
6
Excel Vers. ve Dili
Excel 2007- 2010, Türkçe
Sayfa1 A ya temiz, Sayfa2 A ya kirli datayı aşağı doğru yazın.

MENU makrosunu çalıştırın.

Kirli datanın içinden temiz olanı çıkaracaktır.


Kod:
Sub MENU()
  Call kontrol
End Sub

Public Function buyukharf(cumle)
gecici = ""
For i = 1 To Len(cumle)
          h = Mid(cumle, i, 1)
          Select Case h
            Case "ğ": gecici = gecici + "Ğ"
            Case "ü": gecici = gecici + "Ü"
            Case "ş": gecici = gecici + "Ş"
            Case "ç": gecici = gecici + "Ç"
            Case "ö": gecici = gecici + "Ö"
            Case "ı": gecici = gecici + "I"
            Case "i": gecici = gecici + "İ"
            Case Else: gecici = gecici + UCase(h)
            End Select
Next i
buyukharf = gecici
End Function

Sub kontrol()
  Application.ScreenUpdating = False
  Sheets("Sayfa2").Select
  sonsatirkirli = Cells(Rows.Count, "A").End(3).Row
  
  Columns("B:B").Select
  Selection.ClearContents
  Range("B1").Select
  
  Sheets("Sayfa1").Select
  sonsatirtemiz = Cells(Rows.Count, "A").End(3).Row
  
  For i = 1 To sonsatirtemiz
    Sheets("Sayfa1").Select
    temiz = buyukharf(Cells(i, 1).Value)
    
    For j = 1 To sonsatirkirli
      Sheets("Sayfa2").Select
      kirli = buyukharf(Cells(j, 1).Value)
      kirliorg = Cells(j, 1).Value
      If InStr(kirli, temiz) > 0 Then
         basla = InStr(kirli, temiz)
         Cells(j, 2).Value = Mid(kirli, basla, Len(temiz))
         'Bu bölüm adresten şehir i çıkarır.
          Cells(j, 1).Value = Left(kirliorg, basla - 1) & Mid(kirliorg, basla + Len(temiz), Len(kirliorg))
      End If
    Next j
    
  Next i
  
  Application.ScreenUpdating = False

  
End Sub
hocam çok teşekkür ederim.

büyük küçük harf ve karakter düzeltme gibi bir mevzuyu karıştırmadan, harf değil kelime bazlı çalışacak şekilde,

kirli
asdsahmetjhjsdhssoylu
fdhjsfsmehmetadsahogorgulukjdsk

isim (temiz)
ahmet
mehmet

soyisim (temiz)
soylu
gorgulu

gibi bir datayı kirli datanın yanına isim ve soyisim sütunları olarak ekletecek şekilde makroyu düzenleyebilir misiniz?

ikinci kere teşekkür ediyorum, anlamaya çalışıyorum, o sebepten büyük küçük harf ve düzeltme gibi şeyler hariç rica ettim.
 
Son düzenleme:
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Büyük küçük harf i düşünmeyin. Programın sağlıklı çalışması için gerekli, en azından benim içim rahat ediyor : )

Sizin içiniz rahat etsin diye kodlara açıklamaları ekledim.

Kod, adı ve soyadını ayırıyor. Sayfa2 ye A1 e kirli datayı, Sayfa1 A1 e temiz datayı sıralayın.

Kontrol ediniz.


Kod:
Sub MENU()
  Call kontrol
End Sub

Public Function buyukharf(cumle)
gecici = ""
For i = 1 To Len(cumle)
          h = Mid(cumle, i, 1)
          Select Case h
            Case "ğ": gecici = gecici + "Ğ"
            Case "ü": gecici = gecici + "Ü"
            Case "ş": gecici = gecici + "Ş"
            Case "ç": gecici = gecici + "Ç"
            Case "ö": gecici = gecici + "Ö"
            Case "ı": gecici = gecici + "I"
            Case "i": gecici = gecici + "İ"
            Case Else: gecici = gecici + UCase(h)
            End Select
Next i
buyukharf = gecici
End Function

Sub kontrol()
  Application.ScreenUpdating = False
  'Kirli data satır sayısı alınıyor.
  Sheets("Sayfa2").Select
  sonsatirkirli = Cells(Rows.Count, "A").End(3).Row
  
  'Kirli datadaki B ve C sütunu temizleniyor.
  Columns("B:C").Select
  Selection.ClearContents
  Range("B1").Select
  
  'Temiz data satır sayısı alınıyor.
  Sheets("Sayfa1").Select
  sonsatirtemiz = Cells(Rows.Count, "A").End(3).Row
  
  'Kirli data sıra ile değişkenlere aktarılıyor
  For j = 1 To sonsatirkirli
    Sheets("Sayfa2").Select
    'Sıradaki kirli data büyük harf e çevrilerek kirli değişkenine aktarılıyor.
    kirli = buyukharf(Cells(j, 1).Value)
   
    'Sıradaki kirli data orjinal hali ile kirliorg değişkenine aktarılıyor.
    kirliorg = Cells(j, 1).Value
    
    ' Her kirli data değişimi olduğunda. Sutun değişkeni, adı b ye yazdırmak için 1 yapılıyor.
    sutun = 1
    
    'Temiz data sıra ile değişkenlere aktarılıyor
    For i = 1 To sonsatirtemiz
       Sheets("Sayfa1").Select
       temiz = buyukharf(Cells(i, 1).Value)
       
       'Kirli data içinde temiz data var mı yok mu bakılıyor.
       If InStr(kirli, temiz) > 0 Then
          Sheets("Sayfa2").Select
          'Adını aldığında sutun 2 olur yani B, soyadını aldığında sutun 3 olur yani C
          sutun = sutun + 1
          'Temiz datanın, kirli data içindeki konumu alınıyor.
          basla = InStr(kirli, temiz)
          'Kirli datanın içinden temiz data alnıyor.
          Cells(j, sutun).Value = Mid(kirliorg, basla, Len(temiz))
          'Kirli datanın içinden temiz data çıkarılıyor.
          Cells(j, 1).Value = Left(kirliorg, basla - 1) & Mid(kirliorg, basla + Len(temiz), Len(kirliorg))
          'Yeni kirli data değişkenlere aktarılıyor. İlk işlem ise adını almıştır. Soyadını almak için hücreye yeni hali yazılıyor.
          kirli = buyukharf(Cells(j, 1).Value)
          kirliorg = Cells(j, 1).Value
       End If
    Next i
  Next j
  Application.ScreenUpdating = False
End Sub
 
Son düzenleme:
Katılım
22 Ağustos 2011
Mesajlar
6
Excel Vers. ve Dili
Excel 2007- 2010, Türkçe
Büyük küçük harf i düşünmeyin. Programın sağlıklı çalışması için gerekli, en azından benim içim rahat ediyor : )

Sizin içiniz rahat etsin diye kodlara açıklamaları ekledim.

Kod, adı ve soyadını ayırıyor. Sayfa2 ye A1 e kirli datayı, Sayfa1 A1 e temiz datayı sıralayın.

Kontrol ediniz.


Kod:
Sub MENU()
  Call kontrol
End Sub

Public Function buyukharf(cumle)
gecici = ""
For i = 1 To Len(cumle)
          h = Mid(cumle, i, 1)
          Select Case h
            Case "ğ": gecici = gecici + "Ğ"
            Case "ü": gecici = gecici + "Ü"
            Case "ş": gecici = gecici + "Ş"
            Case "ç": gecici = gecici + "Ç"
            Case "ö": gecici = gecici + "Ö"
            Case "ı": gecici = gecici + "I"
            Case "i": gecici = gecici + "İ"
            Case Else: gecici = gecici + UCase(h)
            End Select
Next i
buyukharf = gecici
End Function

Sub kontrol()
  Application.ScreenUpdating = False
  'Kirli data satır sayısı alınıyor.
  Sheets("Sayfa2").Select
  sonsatirkirli = Cells(Rows.Count, "A").End(3).Row
  
  'Kirli datadaki B ve C sütunu temizleniyor.
  Columns("B:C").Select
  Selection.ClearContents
  Range("B1").Select
  
  'Temiz data satır sayısı alınıyor.
  Sheets("Sayfa1").Select
  sonsatirtemiz = Cells(Rows.Count, "A").End(3).Row
  
  'Kirli data sıra ile değişkenlere aktarılıyor
  For j = 1 To sonsatirkirli
    Sheets("Sayfa2").Select
    'Sıradaki kirli data büyük harf e çevrilerek kirli değişkenine aktarılıyor.
    kirli = buyukharf(Cells(j, 1).Value)
   
    'Sıradaki kirli data orjinal hali ile kirliorg değişkenine aktarılıyor.
    kirliorg = Cells(j, 1).Value
    
    ' Her kirli data değişimi olduğunda. Sutun değişkeni, adı b ye yazdırmak için 1 yapılıyor.
    sutun = 1
    
    'Temiz data sıra ile değişkenlere aktarılıyor
    For i = 1 To sonsatirtemiz
       Sheets("Sayfa1").Select
       temiz = buyukharf(Cells(i, 1).Value)
       
       'Kirli data içinde temiz data var mı yok mu bakılıyor.
       If InStr(kirli, temiz) > 0 Then
          Sheets("Sayfa2").Select
          'Adını aldığında sutun 2 olur yani B, soyadını aldığında sutun 3 olur yani C
          sutun = sutun + 1
          'Temiz datanın, kirli data içindeki konumu alınıyor.
          basla = InStr(kirli, temiz)
          'Kirli datanın içinden temiz data alnıyor.
          Cells(j, sutun).Value = Mid(kirliorg, basla, Len(temiz))
          'Kirli datanın içinden temiz data çıkarılıyor.
          Cells(j, 1).Value = Left(kirliorg, basla - 1) & Mid(kirliorg, basla + Len(temiz), Len(kirliorg))
          'Yeni kirli data değişkenlere aktarılıyor. İlk işlem ise adını almıştır. Soyadını almak için hücreye yeni hali yazılıyor.
          kirli = buyukharf(Cells(j, 1).Value)
          kirliorg = Cells(j, 1).Value
       End If
    Next i
  Next j
  Application.ScreenUpdating = False
End Sub

Tamamdir tesekkur ediyorum.
 
Üst