excel中的数据:
1 Mary
1 John
1 Sam
2 Alaina
2 Edward
我预期的结果是:
1 Mary, John, Sam
2 Alaina, Edward
答案 0 :(得分:0)
用户 allquixotic 回答了一个非常相似的问题。来源here
这是他的VBA方法:
Option Explicit
Function allquixotic(param As Variant, search As Range, values As Range, Optional absolute As Boolean = False) As String
Dim sep As String, retval As String
Dim i As Integer, rownum As Integer
Dim look As Range, j As Range
sep = ", "
retval = ""
For i = 1 To search.Rows.Count
Set look = search.Cells(i, 1)
If absolute Then
rownum = look.Row
Else
rownum = i
End If
If look.Value = param Then
If absolute Then
Set j = values.Worksheet.Cells(rownum, values.Column)
Else
Set j = values.Cells(i, 1)
End If
retval = IIf(retval = "", retval & j.Value, retval & sep & j.Value)
End If
Next
allquixotic = retval
End Function
Use the worksheet function (feel free to rename it) by using a formula like
=allquixotic(A1,$A$1:$A$15,$B$1:$B$15,true)
Use the fill handle to put the formula in all the cells
参数如下:
=allquixotic(look_cell, key_range, value_range, absolute)
look_cell:
第一个参数应该是单个单元格或值文字。有效输入包括3,$ 6.25,“Hello”等内容。这是您尝试在key_range中找到的值。
key_range:
这应该是范围的单元格(多个单元格);如果absolute
为真,那么除非这是连续的范围(所有值都在连续的行中),否则会得到非常奇怪的结果。
value_range:
这应该是范围的单元格(多个单元格);如果absolute
为真,那么除非这是连续的范围(所有值都在连续的行中),否则会得到非常奇怪的结果。
absolute:
如果为true,那么我们将使用{{1}中每个“找到”行的绝对行数(相对于整个电子表格中的行数)确定从key_range
开始提取值的行。如果为假,我们将使用相对数字;例如,如果我们在value_range
的第三行行中找到匹配项,那么我们将从key_range
的第三行行中提取值。建议值为FALSE,或者您可以将其省略为默认值。
注意:此功能不支持键和值范围在列中的情况,但应该很容易使其适应。
此外,如果您在value_range
或key_range
中指定了多个列,则只会使用最左侧的列。
同样,所有功劳归于 allquixotic 。