解析列并将多列分解为一个长列

解析列并将多列分解为一个长列

抱歉,我的标题是“我找不到一个好方法来表达我需要做什么”。图片可能最简单。左边是我拥有的,右边是我需要的: 在此处输入图片描述

我需要将所有这些名称添加到数据库中,并且一个人属于多个 ID#,那么他们必须为每个 ID 输入一次。

因此,我认为我需要执行的步骤是搜索每一行,如果该行有多个 ID#,则复制该行并复制除最后一个 ID 号之外的所有 ID 号。这应该能够通过循环进行迭代。然后,一旦完成,我可以轻松地将所有空单元格合并到单个列中?我对 VBA 还很陌生,所以任何帮助都将不胜感激!

答案1

Public Function GatherData(src As Range) As Variant
Dim tmp()
Dim temp()
ReDim temp(1 To 2, 1 To 1)
tmp = src.Value
Dim i As Integer
Dim j As Integer
For i = LBound(tmp, 1) + 1 To UBound(tmp, 1)
    For j = LBound(tmp, 2) + 1 To UBound(tmp, 2)
        If tmp(i, j) > "" Then
            temp(1, UBound(temp, 2)) = tmp(i, 1)
            temp(2, UBound(temp, 2)) = tmp(i, j)
            ReDim Preserve temp(1 To 2, 1 To (UBound(temp, 2) + 1))
        End If
    Next j
Next i
ReDim Preserve temp(1 To 2, 1 To (UBound(temp, 2) - 1))
GatherData = WorksheetFunction.Transpose(temp)
End Function

在此处输入图片描述

该公式以数组公式的形式插入(Ctrl-Shift-Enter)。

如果目标范围比结果所需的范围长,则其余部分将填充 N/A。如果目标范围比结果所需的范围短,则其余值将丢失,且不会有任何通知。

答案2

如果您不使用 VBA,您可以尝试使用 Power Query 来获取结果:

  1. 选择范围- 去数据-来自表/范围- 打开Power Query 编辑器在此处输入图片描述

  2. 选择ID1、ID2、ID3、ID4列-转到转换tab-选择逆透视列- 消除属性柱子-关闭并加载

在此处输入图片描述

相关内容