Excel – VBA:循环,只要一个单元格的内容等于特定的值

我正在尝试修改我的代码,以便在运行循环时考虑更多的因素。 这是我到目前为止,这是一个循环运行i = 2到605(因为在2和605之间,我的G列的值总是相同的“马卡蒂市”)。
在这里输入图像说明
对于这个循环,我定义了一些动作并且运行良好。 这里是相关的代码显示我的循环正在做什么:

For i = 2 To lRowBldg Range("B" & i).Activate 'try to find a match btwn active cell and one of the elements from parsed address For Each cell In elementsListRange.Cells If Match(ActiveCell.Value, cell.Value) Then Range("K" & i).Value = Range("K" & i).Value + 13 Else Range("K" & i).Value = Range("K" & i).Value + 0 End If If Match(ActiveCell.Offset(0, 4).Value, cell.Value) Then Range("K" & i).Value = Range("K" & i).Value + 8 Else Range("K" & i).Value = Range("K" & i).Value + 0 End If Next Next i 

但是,因为我打算对这个文件做一些修改,所以我需要重新思考我的代码。 到目前为止,我只有一个城市的这个文件,所以基本上我可以循环从第一个值到最后一个值,这是可以的。 现在,我计划增加更多的城市,例如从2到605(马卡蒂市),从606到900(布拉巴拉市),从901到…等等。

我试图做的是这样的:
只要G列的单元格的值等于XXXXX(可能是Makati City,可能是Blabla City,不pipe)循环
如果我提到马卡蒂市,它会循环i = 2到605,如果是blabla City,那么它会循环i = 606到900,依此类推。

你有没有关于如何做到这一点,不会太耗费资源,因为我的文件可能会很长?

非常感谢!

用一会儿? 这是一些想法….

  Sub Test() dim rng as range rng = worksheet.find While rng.Value2 LIKE "Makhati City" 'your logic here rng.offset(row+1,col+0 or like this) Wend End Sub 

你可以试试这个,使用列L&N,并完全避免一个循环

把所有的代码放在一个标准模块中,然后修改setColumnKValues中的代码来在G列中search不同的cioy名字。

假设:

  • 差异城市将被分组在一起
  • 您可以使用一些额外的列(在这种情况下L&N)作为中间体
  • 您将按照工作表中城市的顺序调用setFormulasColumnK
  • 根据你的问题中的代码,如果条件满足,你想要添加一个数字到K列。

它是如何工作的:首先,在N列中,我们把标记值显示出城市在哪里变化,然后在列L中join一个公式,如果它匹配通过的城市,那么L = K + 13最后,我们复制粘贴列K中的新值和清晰的列L&N

 Private oLastRange As Range Private iFirstCell As Integer Private iLastCell As Integer Private lLastRow As Long Sub setFormulasColumnK(ByVal sCity As String) Dim sFormula As String Dim oRange As Range lLastRow = Cells(Rows.Count, Range("G1").Column).End(xlUp).Row Range("N4:N" & lLastRow).Formula = "=IF(G4<>G5,NA(),"""")" If Not Range("G:G").Find(sCity) Is Nothing Then iFirstCell = Range("G:G").Find(sCity).Row Else Exit Sub End If Set oRange = Range("N" & iFirstCell) iLastCell = Range("N" & iFirstCell & ":N" & lLastRow).Find("#N/A", oRange).Row Range("L" & iFirstCell & ":L" & iLastCell).Formula = "=IF(TRIM(G:G)=""" & sCity & """,K:K+13,0)" Set oLastRange = Range("L" & iLastCell) End Sub Sub setColumnKValues() Set oLastRange = Nothing Call setFormulasColumnK("Makati City") 'MsgBox oLastRange.Address Call setFormulasColumnK("London") 'MsgBox oLastRange.Address Call setFormulasColumnK("Birmingham") 'MsgBox oLastRange.Address Call setFormulasColumnK("Moscow") 'MsgBox oLastRange.Address Call setFormulasColumnK("Luxembourg") 'MsgBox oLastRange.Address Call setFormulasColumnK("Paris") 'MsgBox oLastRange.Address Range("L4" & ":L" & lLastRow).Copy Range("K4" & ":K" & lLastRow).PasteSpecial xlPasteValues Range("N4:N" & lLastRow).Clear Range("L4" & ":L" & lLastRow).Clear End Sub