Excel宏:如果列的每一行中的最后一个字符是“某事”,那么

时间:2015-02-23 21:16:27

标签: excel vba if-statement for-loop

如果在其中一个单元格中满足某些条件,我试图连接两个单元格。

具体来说:如果D列的单元格中的最后一个字符=" XX"然后连接。我已经做了类似于下面的事情并且每次都会出错。

Sub concatenate()
Last = Cells(Rows.Count, 4).End(xlUp).Row

  For i = Last To 1 Step -1

    If Right(Cells(i, 4), 4) = " XX " Then
    'do some stuff to concatenate'

    End If

  Next i

End Sub

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

这是你的反向循环,添加了一些错误控制。

Sub concat()
    Dim i As Long, l As Long
    l = Cells(Rows.Count, 4).End(xlUp).Row
    For i = l To 1 Step -1
        If Not IsEmpty(Cells(i, 4)) Then
            If Not IsError(Cells(i, 4)) Then
                If LCase(Right(Cells(i, 4).Value, 4)) = LCase(" XX ") Then

                    'do some stuff to concatenate'
                    'maybe...
                    Cells(i, 4) = Cells(i, 4).Value & " - " & Cells(i, 5).value
                    Cells(i, 5).clearcontents 'clears value; use Cells(i, 5).clear to clear everything

                End If
            End If
        End If
    Next i
End Sub

对空单元格运行字符串操作是不必要的,可能会产生错误。尝试在有错误的单元格上运行相同的操作将始终抛出Run-time error '13': Type mismatch。您可能还有其他需要适应的特殊条件,但这应该可以帮助您入门。

最后,VBA中的直接字符串比较通常是区分大小写的;因此将两者转换为小写以消除区分大小写。

答案 1 :(得分:1)

Sub concatenate()

Dim myCell As String
Dim i As Integer

lastRow = Worksheets("yourSheet").Cells(Rows.Count, 4).End(xlUp).Row

For i = lastRow To 1 Step -1

    myCell = Worksheets("yourSheet").Cells(i, 4).Value

    If Right(myCell, 4) = " XX " Then
    'do some stuff to concatenate'

    End If

Next i

End Sub