运行总和的条件循环正在跳过值

我创build了这个代码的目的是:

第一圈:

  • 循环遍历column O单元格以查找以DAAP开始的任何内容。
  • 如果DAAP左侧的单元格5 DAAP空,则将单元格1列向右(这是一个数字)添加到Total 。 然后将单元格重命名为GAAF
  • 如果单元格5列不是空的,只需将单元格重命名为GAAF

第二圈:

  • findcolumn O所有GAAF单元格,然后将单元格1列右移到Total

这里是我有的代码,它运行没有错误,但什么都不做。 我假设某些东西是错误的,所以它看错了地方,但我找不到它! 任何帮助是极大的赞赏 :)

 Dim rng As Range Dim lstRow As Long Dim AUMCell As Range Dim Total As Long lstRow = Cells(Rows.Count, "O").End(xlUp).Row Set rng = Range("O2", Cells(lstRow, "O")) Total = 0 For Each AUMCell In rng If AUMCell.value = "DAAP" & "*" And AUMCell.Offset(0, -5).value = "" Then Total = Total + AUMCell.Offset(0, 1).Value AUMCell.value = "GAAF" ElseIf AUMCell.value = "DAAP" & "*" And AUMCell.Offset(0, -5).value <> "" Then AUMCell.value = "GAAF" End If Next AUMCell For Each AUMCell In rng If AUMCell.Value = "GAAF" Then AUMCell.Offset(0, 1).Value = Total End If Next AUMCell 

虽然代码更长,但Find的执行速度比通过每个单元的循环要快得多。

  Sub Recut() Dim rng1 As Range Dim rng2 As Range Dim rng3 As Range Dim aCell As Range Dim bCell As Range Dim ws As Worksheet Dim SearchString As String Set ws = ActiveSheet Set rng1 = ws.Range("O:O") SearchString = "DAAP" Set aCell = rng1.Find(SearchString, , xlFormulas, xlPart, xlByRows, xlNext) If Not aCell Is Nothing Then Set bCell = aCell If Left$(aCell.Value, 4) = SearchString Then Set rng2 = aCell Do Set aCell = rng1.FindNext(After:=aCell) If Not aCell Is Nothing Then If aCell.Address = bCell.Address Then Exit Do If Left$(aCell.Value, 4) = SearchString Then If Not rng2 Is Nothing Then Set rng2 = Union(rng2, aCell) Else Set rng2 = aCell End If End If Else Exit Do End If Loop Else MsgBox SearchString & " not Found" Exit Sub End If If rng2 Is Nothing Then Exit Sub For Each rng3 In rng2 If Len(rng3.Offset(0, -5)) = 0 Then Total = Total + rng3.Offset(0, 1).Value rng3.Value = "GAFF" Next MsgBox Total End Sub 

尝试replace此代码

 For Each AUMCell In rng If AUMCell.value = "DAAP" & "*" And AUMCell.Offset(0, -5).value = "" Then Total = Total + AUMCell.Offset(0, 1).Value AUMCell.value = "GAAF" ElseIf AUMCell.value = "DAAP" & "*" And AUMCell.Offset(0, -5).value <> "" Then AUMCell.value = "GAAF" End If Next AUMCell 

通过这个代码

 For Each AUMCell In rng If AUMCell.value like "DAAP*" Then If AUMCell.Offset(0, -5).value = "" Then Total = Total + AUMCell.Offset(0, 1).Value End If AUMCell.value = "GAAF" End If Next AUMCell 

PS:对不起,我的英语