VBA-使用If函数连接单元格

时间:2015-04-07 19:41:37

标签: excel-vba if-statement concatenation vba excel

我有一个代码可以从查询中返回我想要的所有数据。问题是csv格式将数据分开,甚至包含逗号的帐户名称。对于每一行,列A是帐户名称,后跟11个整数数据块(每行总共使用12个单元格)。幸运的是,对于具有逗号的帐户,结果只有一个附加单元格(每行总共使用13个单元格)。

我需要一个IF-THEN公式,它将连接A列和A列。如果该行中有13个已使用的单元格,则为B列,否则将单独留下。对VBA连接不熟悉给我带来了很大的问题。

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

嗯,从术语的角度来看,Excel Formulas和Excel VBA并不是一回事。

事实上,这里有很多人是配方专业人士,对VBA一无所知,反之亦然。

话虽如此,你可以使用类似的东西:

=IF(COUNTBLANK(C1:N1)=0,A1&" "&B1,A1)

当然,假设您的数据如下所示:

Image

使用起来会更容易:

=IF(N1="",A1,A1&" "&B1)

Excel公式和VBA的连接非常简单。

只需将要连接的字符串与&号&

分开即可

如果我想连接A1和B1,我可以使用=A1&B1,如公式所示。

如果我想添加空格,甚至是单词,我可以将它们作为字符串添加到它们之间:

=A1&" is way cooler than "&B1

修改

VBA:

Sub ConcatenateCells()
Application.ScreenUpdating = False
Dim FixRange As Range, c As Range
Set FixRange = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count)
For Each c In FixRange
    If InStr(c, ",") > 0 Then c = c & c.Offset(0, 1)
    'You could also add a space between the two using c = c & " " & c.Offset(0, 1)
Next c
Application.ScreenUpdating = True
End Sub

我不知道你是否想在连接值之后搜索数据,但如果你这样做,你可以使用它:

Sub ConcatenateAndScootCells()
Dim FixRange As Range, c As Range
Set FixRange = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count)
For Each c In FixRange
    If InStr(c, ",") > 0 Then
        c = c & c.Offset(0, 1)
        c.Offset(0, 1).Delete xlToLeft
    End If
Next c
End Sub

仍然假设我的数据格式正确,以下是之前和之后的内容:

Before

After

最终修改:

如果您绝对坚持计算已使用的行数而不是简单地在A列中寻找昏迷,那么请使用:

Sub ConcatenateAndScootCells()
Dim FixRange As Range, c As Range
Set FixRange = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count)
For Each c In FixRange
    If Cells(c.row, Columns.Count).End(xlToLeft).Column = 13 Then
        c = c & " " & c.Offset(0, 1)
        c.Offset(0, 1).Delete xlToLeft
    End If
Next c
End Sub