我对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
但我在几个小时内无法找到如何在单个单元格中显示这些值。这可能吗?
提前致谢!
答案 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
然后只需将名字放在你想要的任何单元格中。