Soru Tüm Satiri Yazdirma

Katılım
6 Ağustos 2022
Mesajlar
21
Excel Vers. ve Dili
2021
Bu Makro'da Sayfa 2 deki A Sütun Sayfa 1 deki A Sütun İle Karşılaşıyor Aynı İse A Sütunları B Sütun İçeriği Sayfa 2 ye Yazılıyor İstenilen Revizyon Sayfa2 A Sayfa1 Aynı İse Sayfa1 B, C, D, E, F, G hepsi Sayfa 2 ye Yazılısılsın Sayfa 2 A Sayfa 1 A da bulunmazsa Bulunamayan Sayfa 3 e yazilsin

Kod:
Sub Fast_Vlookup()
    Dim S1 As Worksheet, S2 As Worksheet, S3 As Worksheet
    Dim Veri As Variant, X As Long
    Dim Zaman As Double, Say1 As Long, Say2 As Long
 
    Zaman = Timer
 
    Set S1 = Sheets("Sayfa1")
    Set S2 = Sheets("Sayfa2")
    Set S3 = Sheets("Sayfa3")
    Veri = S1.Range("A1").CurrentRegion.Value
 
    With VBA.CreateObject("Scripting.Dictionary")
        For X = LBound(Veri, 1) To UBound(Veri, 1)
            .Item(Veri(X, 1)) = Veri(X, 2)
        Next
        Veri = S2.Range("A2:B" & S2.Cells(S2.Rows.Count, 1).End(3).Row).Value
        ReDim Liste1(1 To S2.Rows.Count, 1 To 2)
        ReDim Liste2(1 To S2.Rows.Count, 1 To 2)
        For X = LBound(Veri, 1) To UBound(Veri, 1)
            If .Exists(Veri(X, 1)) Then
                Say1 = Say1 + 1
                Liste1(Say1, 1) = Veri(X, 1)
                Liste1(Say1, 2) = .Item(Veri(X, 1))
            Else
                Say2 = Say2 + 1
                Liste2(Say2, 1) = Veri(X, 1)
                Liste2(Say2, 2) = Veri(X, 2)
            End If
        Next
        S2.Range("A2:B" & Rows.Count).ClearContents
        S3.Range("A2:B" & Rows.Count).ClearContents
        S2.Range("A2").Resize(Say1, 2).Value = Liste1
        S3.Range("A2").Resize(Say2, 2).Value = Liste2
    End With
 
    Set S1 = Nothing: Set S2 = Nothing: Set S3 = Nothing
    Erase Veri: Erase Liste1: Erase Liste2
    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 
Katılım
6 Ağustos 2022
Mesajlar
21
Excel Vers. ve Dili
2021
Bu Makro'da Sayfa 2 deki A Sütun Sayfa 1 deki A Sütun İle Karşılaşıyor Aynı İse A Sütunları B Sütun İçeriği Sayfa 2 ye Yazılıyor İstenilen Revizyon Sayfa2 A Sayfa1 Aynı İse Sayfa1 B, C, D, E, F, G hepsi Sayfa 2 ye Yazılısılsın Sayfa 2 A Sayfa 1 A da bulunmazsa Bulunamayan Sayfa 3 e yazilsin

Kod:
Sub Fast_Vlookup()
    Dim S1 As Worksheet, S2 As Worksheet, S3 As Worksheet
    Dim Veri As Variant, X As Long
    Dim Zaman As Double, Say1 As Long, Say2 As Long

    Zaman = Timer

    Set S1 = Sheets("Sayfa1")
    Set S2 = Sheets("Sayfa2")
    Set S3 = Sheets("Sayfa3")
    Veri = S1.Range("A1").CurrentRegion.Value

    With VBA.CreateObject("Scripting.Dictionary")
        For X = LBound(Veri, 1) To UBound(Veri, 1)
            .Item(Veri(X, 1)) = Veri(X, 2)
        Next
        Veri = S2.Range("A2:B" & S2.Cells(S2.Rows.Count, 1).End(3).Row).Value
        ReDim Liste1(1 To S2.Rows.Count, 1 To 2)
        ReDim Liste2(1 To S2.Rows.Count, 1 To 2)
        For X = LBound(Veri, 1) To UBound(Veri, 1)
            If .Exists(Veri(X, 1)) Then
                Say1 = Say1 + 1
                Liste1(Say1, 1) = Veri(X, 1)
                Liste1(Say1, 2) = .Item(Veri(X, 1))
            Else
                Say2 = Say2 + 1
                Liste2(Say2, 1) = Veri(X, 1)
                Liste2(Say2, 2) = Veri(X, 2)
            End If
        Next
        S2.Range("A2:B" & Rows.Count).ClearContents
        S3.Range("A2:B" & Rows.Count).ClearContents
        S2.Range("A2").Resize(Say1, 2).Value = Liste1
        S3.Range("A2").Resize(Say2, 2).Value = Liste2
    End With

    Set S1 = Nothing: Set S2 = Nothing: Set S3 = Nothing
    Erase Veri: Erase Liste1: Erase Liste2
    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
Yardımınızı Bekliyorum
 

Korhan Ayhan

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

C++:
Option Explicit

Sub Fast_Vlookup()
    Dim S1 As Worksheet, S2 As Worksheet, S3 As Worksheet
    Dim Veri As Variant, X As Long
    Dim Zaman As Double, Say1 As Long, Say2 As Long

    Zaman = Timer

    Set S1 = Sheets("Sayfa1")
    Set S2 = Sheets("Sayfa2")
    Set S3 = Sheets("Sayfa3")
    Veri = S1.Range("A1:G" & S1.Cells(S1.Rows.Count, 1).End(3).Row).Value

    With VBA.CreateObject("Scripting.Dictionary")
        For X = LBound(Veri, 1) To UBound(Veri, 1)
            .Item(Veri(X, 1)) = Array(Veri(X, 2), Veri(X, 3), Veri(X, 4), Veri(X, 5), Veri(X, 6), Veri(X, 7))
        Next
       
        Veri = S2.Range("A2:G" & S2.Cells(S2.Rows.Count, 1).End(3).Row).Value
       
        ReDim Liste1(1 To S2.Rows.Count, 1 To 7)
        ReDim Liste2(1 To S2.Rows.Count, 1 To 7)
       
        For X = LBound(Veri, 1) To UBound(Veri, 1)
            If .Exists(Veri(X, 1)) Then
                Say1 = Say1 + 1
                Liste1(Say1, 1) = Veri(X, 1)
                Liste1(Say1, 2) = .Item(Veri(X, 1))(0)
                Liste1(Say1, 3) = .Item(Veri(X, 1))(1)
                Liste1(Say1, 4) = .Item(Veri(X, 1))(2)
                Liste1(Say1, 5) = .Item(Veri(X, 1))(3)
                Liste1(Say1, 6) = .Item(Veri(X, 1))(4)
                Liste1(Say1, 7) = .Item(Veri(X, 1))(5)
            Else
                Say2 = Say2 + 1
                Liste2(Say2, 1) = Veri(X, 1)
                Liste2(Say2, 2) = Veri(X, 2)
                Liste2(Say2, 3) = Veri(X, 3)
                Liste2(Say2, 4) = Veri(X, 4)
                Liste2(Say2, 5) = Veri(X, 5)
                Liste2(Say2, 6) = Veri(X, 6)
                Liste2(Say2, 7) = Veri(X, 7)
            End If
        Next
        S2.Range("A2:G" & Rows.Count).ClearContents
        S3.Range("A2:G" & Rows.Count).ClearContents
        If Say1 > 0 Then S2.Range("A2").Resize(Say1, 7).Value = Liste1
        If Say2 > 0 Then S3.Range("A2").Resize(Say2, 7).Value = Liste2
    End With

    Set S1 = Nothing: Set S2 = Nothing: Set S3 = Nothing
    Erase Veri: Erase Liste1: Erase Liste2
   
    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 
Katılım
6 Ağustos 2022
Mesajlar
21
Excel Vers. ve Dili
2021
Deneyiniz.

C++:
Option Explicit

Sub Fast_Vlookup()
    Dim S1 As Worksheet, S2 As Worksheet, S3 As Worksheet
    Dim Veri As Variant, X As Long
    Dim Zaman As Double, Say1 As Long, Say2 As Long

    Zaman = Timer

    Set S1 = Sheets("Sayfa1")
    Set S2 = Sheets("Sayfa2")
    Set S3 = Sheets("Sayfa3")
    Veri = S1.Range("A1").CurrentRegion.Value

    With VBA.CreateObject("Scripting.Dictionary")
        For X = LBound(Veri, 1) To UBound(Veri, 1)
            .Item(Veri(X, 1)) = Array(Veri(X, 2), Veri(X, 3), Veri(X, 4), Veri(X, 5), Veri(X, 6), Veri(X, 7))
        Next
       
        Veri = S2.Range("A2:G" & S2.Cells(S2.Rows.Count, 1).End(3).Row).Value
       
        ReDim Liste1(1 To S2.Rows.Count, 1 To 7)
        ReDim Liste2(1 To S2.Rows.Count, 1 To 7)
       
        For X = LBound(Veri, 1) To UBound(Veri, 1)
            If .Exists(Veri(X, 1)) Then
                Say1 = Say1 + 1
                Liste1(Say1, 1) = Veri(X, 1)
                Liste1(Say1, 2) = .Item(Veri(X, 1))(0)
                Liste1(Say1, 3) = .Item(Veri(X, 1))(1)
                Liste1(Say1, 4) = .Item(Veri(X, 1))(2)
                Liste1(Say1, 5) = .Item(Veri(X, 1))(3)
                Liste1(Say1, 6) = .Item(Veri(X, 1))(4)
                Liste1(Say1, 7) = .Item(Veri(X, 1))(5)
            Else
                Say2 = Say2 + 1
                Liste2(Say2, 1) = Veri(X, 1)
                Liste2(Say2, 2) = Veri(X, 2)
                Liste2(Say2, 3) = Veri(X, 3)
                Liste2(Say2, 4) = Veri(X, 4)
                Liste2(Say2, 5) = Veri(X, 5)
                Liste2(Say2, 6) = Veri(X, 6)
                Liste2(Say2, 7) = Veri(X, 7)
            End If
        Next
        S2.Range("A2:G" & Rows.Count).ClearContents
        S3.Range("A2:G" & Rows.Count).ClearContents
        If Say1 > 0 Then S2.Range("A2").Resize(Say1, 7).Value = Liste1
        If Say2 > 0 Then S3.Range("A2").Resize(Say2, 7).Value = Liste2
    End With

    Set S1 = Nothing: Set S2 = Nothing: Set S3 = Nothing
    Erase Veri: Erase Liste1: Erase Liste2
   
    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub


Şu Kısımı Gösteriyor

With VBA.CreateObject("Scripting.Dictionary")
For X = LBound(Veri, 1) To UBound(Veri, 1)
.Item(Veri(X, 1)) = Array(Veri(X, 2), Veri(X, 3), Veri(X, 4), Veri(X, 5), Veri(X, 6), Veri(X, 7))
Next
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,250
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Hata veren örnek dosya paylaşırsanız inceleme fırsatımız olur.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,250
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Paylaştığınız dosyada 2 sütun var?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,250
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ben ilk mesajinizda bahsettiğiniz duruma göre kodları düzenledim. Dosyada A:G arasında veri yoksa hata vermesi normaldir.
 

Korhan Ayhan

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