Excelmacros:如果列的每一行中的最后一个字符是“东西”,那么

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

具体来说:如果列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 

任何帮助是极大的赞赏。

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

 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 

在一个空单元格上运行string操作是不必要的,可以想象会抛出一个错误。 试图在出现错误的单元格上运行相同的操作将始终引发Run-time error '13': Type mismatch 。 你可能有其他特殊的条件需要适应,但这应该让你开始。

最后,VBA中的直接string比较通常是区分大小写的; 从而将两者转换为小写字母以消除大小写敏感性。

 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