1

我正在尝试修改我的代码以允许在运行循环时考虑更多因素。这是我到目前为止所拥有的,它是一个循环运行 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(可能是马卡蒂市,可能是 blabla 市,无论如何),就循环
如果我提到马卡蒂市,它将循环 i = 2 到 605,如果是 blabla City,则循环 i = 606 到 900,依此类推。

您是否知道如何以不会太消耗资源的方式执行此操作,因为我的文件最终可能会很长?

提前非常感谢!

4

2 回答 2

1

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

将所有代码放在标准模块中,然后修改setColumnKValues中的代码以在 G 列中搜索不同的 cioy 名称。

假设:

  • 不同的城市将被组合在一起
  • 您可以使用几个额外的列(在本例中为 L 和 N)作为中间体
  • 您将按照工作表上城市的顺序调用 setFormulasColumnK
  • 也就是说,根据您问题中的代码,如果满足条件,您希望在 K 列中添加一个数字。

它是如何工作的: 首先,在 N 列中我们放置标记值,显示城市变化的位置,然后在 L 列中输入公式,如果它与传入的城市匹配,则 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
于 2013-04-25T13:23:26.297 回答
1

用一段时间?这是一些想法....

    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
于 2013-04-25T07:32:45.063 回答