我正在编写一个 Excel VBA 程序来生成文本。 我正在使用 IF 语句来确定某个特定文本是否在单元格中,并基于该文本连接一个字符串。
我对组合单元格有问题:
IF Cells(1,1) Like "A" and Cells(1,2) Like "---" Then
concatenate something
end if
以上作品
IF Cells(2,1) Like "B" and Cells(2,2) Like "---" Then
concatenate something
end if
这不起作用,因为 Cell(2,2) 根据 MsgBox (Cells(2, 2).Value) 而不是“---”。
是否可以在不再次拆分单元格的情况下使代码正常工作?
我想逐行连接文本,VBA 代码应该将“B”右边的单元格值识别为“---”。
答案 0 :(得分:2)
Cells(1,1).Value
是“A”。 Cells(1,2).Value
是“---”。
Cells(2,1).Value
为空。 Cells(3,2).Value
为空。
Cells(3,1).Value
是“B”。 Cells(3,2).Value
为空。
仅仅因为您合并了上面的单元格,并不会改变该单元格在第 3 行中。只有合并范围中的左上角单元格有值。 (虽然,有 ways around that。)
您可以检查单元格是否合并 using Range.MergeCells
。您可以获取合并单元格的值 using Range.MergeArea
例如:
Cells(1,1).MergeArea.Cells(1,1)
是“A”。 Cells(2,2).MergeArea.Cells(1,1)
是“---”。 Cells(1,1).MergeCells
是 True
。
Cells(2,1).MergeArea.Cells(1,1)
是“A”。 Cells(2,2).MergeArea.Cells(1,1)
是“---”。 Cells(2,1).MergeCells
是 True
。
Cells(3,1).MergeArea.Cells(1,1)
是“B”。 Cells(3,2).MergeArea.Cells(1,1)
是“---”。 Cells(3,1).MergeCells
是 False
。
如果您使用循环来遍历单元格,请考虑使用 While
或 Do
而不是 For
,因为您可以为每次迭代增加不同的数字:< /p>
Dim rowCurrent AS Long
rowCurrent = 1
While Cells(rowCurrent,1).Value <> ""
If Cells(rowCurrent,2).MergeArea.Cells(1,1).Value = "---" Then
Select Case Cells(rowCurrent,1).MergeArea.Cells(1,1).Value
Case "A"
'concatenate something
Case "B"
'concatenate something else
Case "C"
'concatenate a third thing
Case Else
'throw an error?
End Select
End If
'Skip the rest of the merged cell
rowCurrent = rowCurrent + Cells(rowCurrent,1).MergeArea.Rows.Count
Wend