如何在VBA中遍历多个单元格值 合并多个重复循环为单个循环
问题原因
你尝试的写法不生效,是因为VBA不支持直接将单个单元格的值和多单元格区域做等值对比,你可以通过以下两种方案实现单循环的需求:
方案1:调用工作表函数(代码简洁易维护)
适合AA列匹配项不多的场景,代码逻辑简单:
Dim VARIANTE As Long Dim targetRng As Range ' 定义Libro1中需要匹配的AA列区域 Set targetRng = Sheets("Libro1").Range("AA1:AA50") For Each cell In Sheets("Libro2").Range("C1:C30000") ' CountIf返回大于0则代表当前值存在于匹配区域中 If WorksheetFunction.CountIf(targetRng, cell.Value) > 0 Then VARIANTE = cell.Row Sheets("Libro2").Range("Z" & VARIANTE) = 1 End If Next
方案2:数组匹配(运行效率更高)
如果后续匹配项、C列行数还会增加,推荐用数组加载的方式减少工作表读写次数,运行速度更快:
Dim VARIANTE As Long Dim targetArr As Variant Dim cellVal As Variant Dim i As Long, matchFlag As Boolean ' 一次性将所有匹配值加载到数组中,避免循环中反复读取工作表 targetArr = Sheets("Libro1").Range("AA1:AA50").Value For Each cell In Sheets("Libro2").Range("C1:C30000") cellVal = cell.Value matchFlag = False ' 遍历数组判断是否存在匹配项 For i = LBound(targetArr, 1) To UBound(targetArr, 1) If cellVal = targetArr(i, 1) Then matchFlag = True Exit For End If Next If matchFlag Then VARIANTE = cell.Row Sheets("Libro2").Range("Z" & VARIANTE) = 1 End If Next
内容的提问来源于stack exchange,提问作者Santos Lee
相关产品推荐
相关产品推荐

