Excel IF语句的第一部分被忽略

Excel IF语句的第一部分被忽略,excel,loops,if-statement,vba,Excel,Loops,If Statement,Vba,我在VBA中有以下IF语句,但该语句的delete部分或ElseIf之前的位被完全忽略: For i = 3 To (customerNum + 3) If Sheets("Reports").Range("L" & i).Value = "A" Then Sheets("Reports").Range("G" & i & ":M" & i).Select Selection.Delete Shift:=xlUp

我在VBA中有以下IF语句,但该语句的delete部分或ElseIf之前的位被完全忽略:

    For i = 3 To (customerNum + 3)
    If Sheets("Reports").Range("L" & i).Value = "A" Then
        Sheets("Reports").Range("G" & i & ":M" & i).Select
        Selection.Delete Shift:=xlUp
    ElseIf Sheets("Reports").Range("L" & i).Value <> "A" Then
        Sheets("Reports").Range("J" & i).Value = form1_1 & i & form1_2
        Sheets("Reports").Range("J" & i).NumberFormat = "d-mmm-yy"
        Sheets("Reports").Range("M" & i).Value = form2_1 & i & form2_2 & i
        Sheets("Reports").Range("M" & i).NumberFormat = "_-[$£-809]* #,##0.00_-;-[$£-809]* #,##0.00_-;_-[$£-809]* ""-""??_-;_-@_-"
    End If
Next i
其余的运行平稳。没有崩溃或错误


有什么想法吗?

也许你需要从底部开始,然后再向上

Sub Button1_Click()
    Dim sh As Worksheet
    Dim Rws As Long, rng As Range, nwrw As Long

    Set sh = Sheets("Reports")

    With sh

        Rws = .Cells(.Rows.Count, "L").End(xlUp).Row

        For i = Rws To 3 Step -1

            If .Cells(i, "L") = "A" Then .Range(.Cells(i, "G"), .Cells(i, "M")).Delete Shift:=xlUp

            If .Cells(i, "L") <> "A" Then

                .Cells(i, "J") = "something" & i & "something else"
                .Cells(i, "M") = "something" & i & "something else"

            End If

        Next i

    End With

End Sub

这不是!应该是一个额外的答案。然而,我想补充这个答案,因为我偶尔会在一张Excel表格中遇到各种不同的As或Cs等问题。在大公司工作时,我的同事一次处理多个不同的字符集,他们的母语字符集和英语字符集。请注意,西里尔字母A看起来像拉丁字母A。然而,即使使用Option Compare文本,两者也是不同的。以下代码将显示字符的unicode,可能是检查是否已将a输入特定单元格的更好方法:

Public Sub CheckUnicode()
Dim lngRowNumber As Long

Debug.Print AscW("A")
With Sheets("Reports")
    For lngRowNumber = 1 To 100000
        If Trim(.Range("L" & lngRowNumber).Value2) = vbNullString Then Exit For
        Debug.Print AscW(Left(.Range("L" & lngRowNumber).Value2, 1))
    Next lngRowNumber
    ' The following will append a cyrillic a to the bottom of the sheet in Column "A"
    .Range("A" & lngRowNumber + 1).Value2 = ChrW(1072)
End With

End Sub

我只是为可能遇到类似问题的其他人添加此解决方案。如前所述,有几个字符看起来很像,但不是。还要注意,这只是西里尔字母表。可能还有其他看起来相似的角色集。

完全忽略意味着什么?您能看到在Select+Delete处于调试模式时输入If块的代码吗?请注意,您的是一个非常基本的If块,如果单元格L&i的值等于a,您可以输入删除部分,或者输入其他部分。因此,您的语句删除部分被完全忽略,其余部分运行平稳,这让我觉得单元格L&i永远不等于A。可能行SheetsReports.RangeG&i&:M&i.Select没有选择任何内容。@MatteoNNZ感谢您的输入,但这是我检查的第一件事。这不是问题,因为A确实出现在目标块中。完成了!我可以问一下我的陈述不起作用和你的with方法背后的逻辑是什么吗?with sh只是让你指明你所指的是哪张表,而不是在每一行上写SheetsReports。我认为主要的问题是,如果你在L4和L5上找到A,首先你在L4中删除A并向上移动,L5现在已经向上移动并成为L4,因此当你循环到L5时,你错过了A,因为它现在在L4中。删除和移动单元格时,最好从底部开始,这样就不会错过任何向上移动的单元格。我还经常使用过滤器一次删除单元格,而不是一次删除一个。这听起来是一种更好的方法。我可以问一下它是如何完成的吗?Rws=.Cells.Rows.Count,L.EndxlUp.Row然后对于I=Rws到3,步骤-1计算行数,然后开始从Rws到3的循环,步骤-1告诉代码向后走,在这种情况下它向上走一行。如果有100行,循环中的下一行将是99行。