如何在Excel中的单个单元格中显示多个值

时间:2011-05-27 18:54:43

标签: excel vba

我对Excel及其功能相对比较熟悉,但对VBA来说却是一个新手(但我确实有MATLAB和C的背景)。基本上我所拥有的是一张工作表,其中包含填充每个列标题的不同机器以及填充第一列的员工姓名。该表包含“Train”的文本值,表示该行中的人员在指定列中的设备上进行了训练,或“No”,表示他们不是。我想要做的是制作一个单独的工作表,其中第一列中的设备和一列被列为“训练”。理论上,每个单元格将填充在该行的设备上训练的人员的姓名。我在VBA中有一个for循环代码,可以将名称成功输出到即时窗口

Function Train(Data As Range, Name As Range)

    For Counter = 1 To Data.Rows.Count

        If Data(Counter, 1).Value = "Train" Then
            'Debug.Print Name(Counter, 1)
        End If

    Next Counter

End Function

但我在几个小时内无法找到如何在单个单元格中显示这些值。这可能吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您必须先选择“为每个人,为每台机器”或“为每台机器,为每个人”做什么。假设你想要使用第二个想法,你可以使用这个伪代码:

set wsEmployee = Worksheets("EmployeeSheet")
set wsEmployee = Worksheets("MachineSheet")
'Clear MachineSheet and add headers here

xEmployee = 2
yMachine = 2

do while (wsEmployee.Cells(1, xEmployee).Value <> "") 'or your loop way here
    yEmployee = 2
    trained = ""
    do while (wsEmployee.Cells(yEmployee, 1).Value <> "") 'or your loop way here
        if (wsEmployee.Cells(yEmployee, xEmployee).Value = "Trained") then
            trained = trained & wsEmployee.Cells(yEmployee, 1).Value & ", "
        end if
        yEmployee = yEmployee + 1
    loop
    'remove the last , in the trained string
    wsMachine.Cells(yMachine, 1).Value = wsEmployee.Cells(1, xEmployee).Value
    wsMachine.Cells(yMachine, 2).Value = trained
    yMachine = yMachine + 1
    xEmployee = xEmployee + 1
loop

这是基本的想法。为了获得更好的性能,我会在一些数组中执行所有这些操作,并将它们粘贴到一个操作中。

答案 1 :(得分:0)

使用连接运算符(&)将值组合成字符串:

Dim names as String
names = ""
For Counter = 1 To Data.Rows.Count

    If Data(Counter, 1).Value = "Train" Then
       If counter = 1 Then
           names = names & Name(counter, 1)
       Else
           names = names & "," & Name(counter, 1)
       End If
    End If

Next Counter

然后只需将名字放在你想要的任何单元格中。