Excel VBA sütun içi arama yapmak

Katılım
12 Eylül 2020
Mesajlar
174
Excel Vers. ve Dili
365 ev
Kod:
Dim listesutun()
    ReDim listesutun(sutun * sutun)
    Dim b As Integer
    b = Sheets("sayfa1").Cells(satir, sutun - 1)
    For i = 1 To Sheets("sayfa3").UsedRange.Rows.Count
         listesatir(i) = Sheets("sayfa3").Cells(i, 1)
         listesutun(i) = Sheets("sayfa3").Cells(i, 2)
    Next i
While b > 0

            For j = 1 To (satir - 1)
             i = Sheets("sayfa3").Cells(1, 3)
              Set xrange2 = Sheets("sayfa4").Rows(i)
     
                If Sheets("sayfa4").Cells(i, j) > 0 And Sheets("sayfa4").Cells(i, j) = Application.WorksheetFunction.Min(xrange2) Then
                    If (i = listesatir(i) And j = listesutun(i)) Or (i = listesutun(i) And j = listesatir(i)) Then
                        a = a + 1
                        Sheets("sayfa5").Cells(a, 1) = i
                        Sheets("sayfa5").Cells(a, 2) = j
                        tpu = tpu + Sheets("sayfa4").Cells(i, j)
                        Sheets("sayfa4").Cells(i, j).ClearContents
                     
                        b = b - 1
                       
                   
                    Else
                       
                        a = a + 1
                        Sheets("sayfa5").Cells(a, 1) = i
                        Sheets("sayfa5").Cells(a, 2) = j
                        tpu = tpu + Sheets("sayfa4").Cells(i, j)
                        Sheets("sayfa4").Cells(i, j).ClearContents
                        Sheets("sayfa4").Cells(j, i).ClearContents
                        b = b - 2
                       
                   
                    End If
               
                      Sheets("sayfa3").Cells(1, 3) = j
                End If
               
               
               
            Next j
       Wend
Arkadaşlar kolay gelsin yukarda görünen kod , bir arama algoritması , en kısa yol problemlerini bulmak için kullanılan çinli postası probleminin uyarlanmış bir versiyonudur kodumda bir hata yok fakat takıldığım bir yer var , çpp de eşleştirme yaparken eşleştirilen hücreyi ve onun simetriğini siliyorum ki tekrardan probleme dahil olmasın ama bazı hücrelerin 2 şer kez çözümün içinde yer alması gerekiyor onları daha öncesinde belirleyip bir sayfaya yazdırıyorum daha sonrasında da bunu bir listeye atıyorum
şimdi burdaki temel sorun şu listeye atarken i ve j listesi şeklinde oluşturuyorum dikkat ederseniz yani satır ve sütun olarak 2 ayrı liste var
bu listeyi arama algoritmasında ayrı bi değişkenle aramıyorum sadece yine i ile arıyorum 2 sinde de i ile aramamın sebebi 2 listenin de i. elemanları bir eşleşmeyi temsil ediyor ve bu eşleşme denk geldiğinde çalışsın istiyorum ama gel gelelim benim listem bazı durumlarda i den kısa oluyor ve bu durumda if şartları false olarak gösteriyor ve yanlış çalışıyor
benim bu durumdan kurtulmam için ne yapmam lazım nasıl bir liste tutabilirim
yine benzer bir liste tutup listesatir ve listesutun un elamanlarını denk getirmem mümkün mü
eğer içinde var mı diye bakarsam doğru olmaz çünkü özel durum söz konusu x,y denk geldiğinde ya da y,x denk geldiğinde çalışmalı
istediğim
 

Korhan Ayhan

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

Bahsettiniz verileri "Scripting.Dictionary" ile bir diziye yükleyebilirsiniz. Sonra bu diziden varlığını sorgulayabilirsiniz. Gerekirse listeden "Remove" edebilirsiniz.

Forumda bahsettiğim nesne ile ilgili bolca örnek var. Arama yaparsanız ulaşabilirsiniz.

Kolay gelsin..
 
Üst