我想基于查找,将数据从一张工作表sheet1的多行获取到另一张工作表sheet2的单个单元格中。
例如,一张纸上有数据:
我想基于id查找数据,并将所有相关行返回到一个像这样的单元格中:
使用Excel公式可以解决吗,还是只能使用VBA解决?
谢谢您的帮助。
我找到了一个接近解决方案但无法正常工作的vba。我看过“索引,匹配”功能和“小”功能,但是可以找到一种将数据放入单个单元格的解决方案...
这是我发现的接近解决方案的vba代码:
'Function SingleCellExtract(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)
Dim i As Long
Dim Result As String
For i = 1 To LookupRange.Columns(1).Cells.Count
If LookupRange.Cells(i, 1) = Lookupvalue Then
Result = Result & " " & LookupRange.Cells(i, ColumnNumber) & ","
End If
Next i
SingleCellExtract = Left(Result, Len(Result) – 1)
End Function'
vba抛出了值或编译错误。看起来好像它只从一个垂直列返回值
答案 0 :(得分:2)
“ excel公式可能可行吗,还是只能用VBA解决?”
通过公式当然可以实现,但是您必须有权使用TEXTJOIN
函数:
H2
中的公式:
=TEXTJOIN(CHAR(10),TRUE,IF($A$2:$A$11=G2,$B$2:$B$11&", "&$C$2:$C$11&", "&$D$2:$D$11&", "&$E$2:$E$11,""))
注意: 这是一个数组公式,需要通过 Ctrl Shift 输入
向下拖动公式,并确保在H列上选择了自动换行。
无法访问TEXTJOIN
?您始终可以创建自己的示例,例如:
Function TEXTJOIN(rng As Range, id As Long) As String
For Each cl In rng
If cl.Value = id Then
If TEXTJOIN = "" Then
TEXTJOIN = cl.Offset(0, 1) & ", " & cl.Offset(0, 2) & ", " & cl.Offset(0, 3) & ", " & cl.Offset(0, 4)
Else
TEXTJOIN = TEXTJOIN & Chr(10) & cl.Offset(0, 1) & ", " & cl.Offset(0, 2) & ", " & cl.Offset(0, 3) & ", " & cl.Offset(0, 4)
End If
End If
Next cl
End Function
在单元格H2
中,您可以通过=TEXTJOINS($A$2:$A$11,G2)
调用UDF并向下拖动。再次,确保选中了textwrapping列。
编辑:
根据OP的评论,这就是我如何正确显示数据的方式:
H
,然后单击textwrap +顶部对齐,如以下屏幕截图所示: