VBA中连接字符串时出现问题

4

我正在尝试将你在ws4中看到的E列和F列的每个ID进行分配...

enter image description here

...分别对应于我的wsOutput中的K列和L列中的相应ID。

enter image description here

我的代码没有报错,但是没有任何反应。这是我做的第一个项目,如果问题比较简单,请见谅。

我也在网上查找了一些资料,发现:

然而,我无法使他们的方法起作用。 非常感谢任何帮助!
'Previous Code
'wsOutput -> Filter Sheet - Worksheet (TARGET) ; ws4 = Search Skills - Worksheet (SOURCE)
Dim separator As String, PreviousResultCG As String, NewResultCG As String, PreviousResultCategory As String, NewResultCategory As String

If separator = "" Then separator = " , "

'lRowInput = ws4.Range("A" & Rows.Count).End(xlUp).row - from above
lRowOutput = wsOutput.Range("A4:A" & Rows.Count).End(xlDown).row


With ws4

    'For each ID on the Source-Worksheet
    For Each ID In .Range("A2:A" & lRowInput)

        'Find the respective ID on Target-Worksheet
        Set FindID = wsOutput.Range("A4:A" & lRowOutput).Find(what:=ID, LookIn:=xlValues, lookat:=xlWhole)

        'Get all CG ID's for the supplier and add them to previously found ID's of that supplier
        If FindID = ID Then

            PreviousResultCG = wsOutput.Range("K" & FindID.row).value

            NewResultCG = PreviousResultCG & separator & .Range("E" & ID.row)

            wsOutput.Range("K" & ID.row).value = NewResultCG


            PreviousResultCategory = wsOutput.Range("L" & FindID.row).value

            NewResultCategory = PreviousResultCategory & separator & .Range("F" & ID.row)

            wsOutput.Range("L" & FindID.row).value = NewResultCategory

        End If

    Next ID

End With

我打赌这是XL吧?为什么不直接使用VLOOKUP呢? - L42
你所说的“其他要求”是什么意思?我的唯一问题是输入工作表不是固定的,而是在点击按钮时重新填充。此外:条目数量每次都会有所变化。这就是为什么我试图自动化它的原因。 - InternInNeed
你要把数值写在输出表的行号对应源表的行号上(使用 ID.Row 而不是 FindID.Row)。也许它们已经被添加了,但你看不见? - arcadeprecinct
@arcadeprecinct 谢谢您指出这个问题。我已经进行了更正,但是仍然没有错误,也没有任何反应。虽然示例数据不够大,但这并不会导致我看不到这个问题。我现在重新检查了一遍。 - InternInNeed
不,VLOOKUP不能做到那样。你说你需要结果在K和L中对吧? - L42
显示剩余10条评论
1个回答

1
将源数据放置在名为“source”的工作表中,并创建另一个工作表,您希望从源数据中查找值,命名为“target”。保持列与您在图像中显示的列相同。 将下面提到的代码粘贴到模块中。
Sub look_values()

Dim id, source_id As Range
Dim data_row_num, id_row_num As Long
Dim source_sheet, target_sheet As Worksheet
Dim cg, cat As String

Set source_sheet = ThisWorkbook.Sheets("source")
Set target_sheet = ThisWorkbook.Sheets("target")
Set id = target_sheet.Range("A2")

Do Until id.Value = ""

    source_sheet.Activate
    Range("A1").Activate
    Set source_id = Range("A:A").Find(what:=id.Value, LookIn:=xlValues, lookat:=xlWhole)
    On Error Resume Next
    cg = Cells(source_id.Row, 5).Value
    On Error Resume Next
    cat = Cells(source_id.Row, 6).Value
    target_sheet.Activate
    Cells(id.Row, 11).Value = cg
    Cells(id.Row, 12).Value = cat
    Set id = id.Offset(1, 0)
Loop

End Sub

在运行宏之前,请确保两个工作表上的ID列格式相同。建议您首先清理和修剪ID列。因为从图像中可以看出,目标工作表中的ID列具有无法识别的字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接