Excel VBA列B到单个单元格(以逗号分隔),基于A列

时间:2016-03-31 12:47:01

标签: excel vba excel-vba range

excel中的数据:

1               Mary
1               John
1               Sam
2               Alaina
2               Edward

我预期的结果是:

1               Mary, John, Sam
2               Alaina, Edward

1 个答案:

答案 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_rangekey_range中指定了多个列,则只会使用最左侧的列。

  

同样,所有功劳归于 allquixotic