如何使用Excel VBA输出特定数据并将其连接到新列中?

如何使用Excel VBA输出特定数据并将其连接到新列中?,excel,vba,Excel,Vba,这是我的初始excel表: 我希望的输出是a列和B列的串联,如F列所示: 注意:我将手动添加标题“我的项目”。 代码: 执行代码后的输出: 我尝试使用If Range(“A”&ActiveCell.row)”“跳过空行,但没有成功。此代码将循环遍历A列中包含内容的单元格,并将A列和B列的值连接到G列中 Option Explicit Sub Test() Dim xlCellA As Range Dim LstR As Long Set xlCellA =

这是我的初始excel表:

我希望的输出是a列和B列的串联,如F列所示: 注意:我将手动添加标题“我的项目”。

代码:

执行代码后的输出:
我尝试使用
If Range(“A”&ActiveCell.row)”“
跳过空行,但没有成功。

此代码将循环遍历A列中包含内容的单元格,并将A列和B列的值连接到G列中

Option Explicit

Sub Test()
    Dim xlCellA As Range
    Dim LstR As Long
        Set xlCellA = Range("A2")
        LstR = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
        Do Until xlCellA.Row > LstR
            If xlCellA.Value = "" Then
                xlCellA.Offset(0, 6).Value = xlCellA.Value & ": " & xlCellA.Offset(0, 1).Value
            End If
            Set xlCellA = xlCellA.Offset(1, 0)
        Loop
        Set xlCellA = Nothing
End Sub

此代码将循环遍历A列中包含某些内容的单元格,并将A列和B列的值连接到G列中

Option Explicit

Sub Test()
    Dim xlCellA As Range
    Dim LstR As Long
        Set xlCellA = Range("A2")
        LstR = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
        Do Until xlCellA.Row > LstR
            If xlCellA.Value = "" Then
                xlCellA.Offset(0, 6).Value = xlCellA.Value & ": " & xlCellA.Offset(0, 1).Value
            End If
            Set xlCellA = xlCellA.Offset(1, 0)
        Loop
        Set xlCellA = Nothing
End Sub

我个人认为最好将结果输出为字符串而不是公式。在循环中执行此操作(并添加
列a
不为空的条件)将导致宏lke:

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update
Dim lr As Long, i As Long

lr = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

Application.ScreenUpdating = False
For i = 2 To lr
    If ws.Range("A" & i) <> "" Then
        ws.Range("F" & i) = ws.Range("A" & i) & ": " & ws.Range("B" & i)
    End If
Next i
Application.ScreenUpdating = True

End Sub
子测试()

将ws设置为工作表:设置ws=ThisWorkbook.Sheets(“Sheet1”)”我个人认为最好将结果输出为字符串而不是公式。在循环中执行此操作(并添加
列a
不为空的条件)将导致宏lke:

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update
Dim lr As Long, i As Long

lr = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

Application.ScreenUpdating = False
For i = 2 To lr
    If ws.Range("A" & i) <> "" Then
        ws.Range("F" & i) = ws.Range("A" & i) & ": " & ws.Range("B" & i)
    End If
Next i
Application.ScreenUpdating = True

End Sub
子测试()

将ws设置为工作表:设置ws=ThisWorkbook.Sheets(“Sheet1”)'无需在末尾设置xlCellA=Nothing。对象引用将随宏一起消失不幸的是,此方法没有生成我想要的输出。但我可以看出,这种方法很快就会对我有用。谢谢你抽出时间@Urderboy是正确的,但是,确保不再引用引用时删除引用是一种良好的编码实践needed@GlennG-我听到了,但我相信这是VBA与其他人不同的地方。并非所有的最佳实践都适用于所有地方。中的解决方案值得一读:)无需在结尾处
设置xlCellA=Nothing
。对象引用将随宏一起消失不幸的是,此方法没有生成我想要的输出。但我可以看出,这种方法很快就会对我有用。谢谢你抽出时间@Urderboy是正确的,但是,确保不再引用引用时删除引用是一种良好的编码实践needed@GlennG-我听到了,但我相信这是VBA与其他人不同的地方。并非所有的最佳实践都适用于所有地方。中的解决方案值得一读:)