VBA 循环数组并重置
VBA Loop an array and reset
我想检查我的数据是否在一个数组中,如果是,它应该将它写入一个新的单元格。
我的问题:
如果两个条目相同并且相互跟随,我的 if 语句将不会在 for 循环中找到它,因为我的循环没有重置。
我该如何解决这个问题?
Sub Tester()
Dim ArtikelZgm As Variant
ArtikelZgm = Worksheets("Artikel").Range("A1").CurrentRegion
Dim a As Long
For a = LBound(ArtikelZgm, 1) To UBound(ArtikelZgm, 1)
For b = 2 To 100
If ArtikelZgm(a, 3) = Worksheets("Bestellung Lidl").Cells(b, "F").Value Then
Worksheets("Bestellung Lidl").Cells(b, "H").Value = ArtikelZgm(a, 1)
Worksheets("Bestellung Lidl").Cells(b, "I").Value = ArtikelZgm(a, 5)
b = b + 1
End If
Next b
Next a
End Sub
我会使用 Match 而不是嵌套循环:
Sub Tester()
Dim ArtikelZgm As Variant, m
Dim b As Long, wsBL As Worksheet, wsA As Worksheet
Set wsA = Worksheets("Artikel")
Set wsBL = Worksheets("Bestellung Lidl")
ArtikelZgm = wsA.Range("A1").CurrentRegion.Value
For b = 2 To 100
'using Match is faster than a nested loop
m = Application.Match(wsBL.Cells(b, "F").Value, wsA.Columns("C"), 0)
If Not IsError(m) Then 'got a match if `m` is not an error value
wsBL.Cells(b, "H").Value = ArtikelZgm(m, 1)
wsBL.Cells(b, "I").Value = ArtikelZgm(m, 5)
End If
Next b
End Sub
我想检查我的数据是否在一个数组中,如果是,它应该将它写入一个新的单元格。
我的问题:
如果两个条目相同并且相互跟随,我的 if 语句将不会在 for 循环中找到它,因为我的循环没有重置。
我该如何解决这个问题?
Sub Tester()
Dim ArtikelZgm As Variant
ArtikelZgm = Worksheets("Artikel").Range("A1").CurrentRegion
Dim a As Long
For a = LBound(ArtikelZgm, 1) To UBound(ArtikelZgm, 1)
For b = 2 To 100
If ArtikelZgm(a, 3) = Worksheets("Bestellung Lidl").Cells(b, "F").Value Then
Worksheets("Bestellung Lidl").Cells(b, "H").Value = ArtikelZgm(a, 1)
Worksheets("Bestellung Lidl").Cells(b, "I").Value = ArtikelZgm(a, 5)
b = b + 1
End If
Next b
Next a
End Sub
我会使用 Match 而不是嵌套循环:
Sub Tester()
Dim ArtikelZgm As Variant, m
Dim b As Long, wsBL As Worksheet, wsA As Worksheet
Set wsA = Worksheets("Artikel")
Set wsBL = Worksheets("Bestellung Lidl")
ArtikelZgm = wsA.Range("A1").CurrentRegion.Value
For b = 2 To 100
'using Match is faster than a nested loop
m = Application.Match(wsBL.Cells(b, "F").Value, wsA.Columns("C"), 0)
If Not IsError(m) Then 'got a match if `m` is not an error value
wsBL.Cells(b, "H").Value = ArtikelZgm(m, 1)
wsBL.Cells(b, "I").Value = ArtikelZgm(m, 5)
End If
Next b
End Sub