首页 > 解决方案 > VBA Excel 反透视表/提取特定数据

问题描述

我一直在尝试使用 VBA 从 MS Excel 中的透视数据表中提取特定数据点。

数据如下所示:

ID     dimension     value
0001   Name          Max
0001   Adress        Octavia St
0002   Postal Code   94100
0001   City          San Antonio
0005   Name          Sylvia
0018   Postal Code   33741

我想将特定数据点提取到一个更大的表中,其中包含来自其他来源的信息,基于所需的“维度”作为列标题,ID 作为行标题:

ID     otherInfo1    Name    otherInfo2    City
0001   chef          Max     married       San Antonio
0005   bank teller   Sylvia  single        ...

不幸的是,我无法在网上找到这个问题的任何答案,而且我对 VBA 还比较陌生。

有人知道如何在不使用中间工作表的情况下将数据直接粘贴到另一个电子表格中吗?

我一直在尝试使用 for 循环,但没有成功:

For i = 12 To nRowsB
    For j = 2 To nRowsB
        If wks_source.Cells(j, 1).Value = wkstarget.Cells(i, 1).Value Then
        wkstarget.Cells(i, 1).Value = wks_source.Cells(j, 1).Value
        Debug.Print "Success1"
        Else
        j = j + 1
        End If
    Next j
Next i

nRowsB -- 源文件中的行数

非常感谢您的帮助!!

标签: excelvba

解决方案


昨晚完成了这段代码,找到附件供您参考:

 Sub get_unpivoted_data(nRowsID, source_wks, target_wks, ID_column_source, ID_column_target, search_term_2nd_level, target_write_column, source_column, source_search_term_2nd_level_column)

    For i = 12 To nRowsID
        For j = 2 To nRowsID
            If source_wks.Cells(j, ID_column_source).Value = target_wks.Cells(i, ID_column_target).Value Then
                Debug.Print "Success1"
                If source_wks.Cells(j, source_search_term_2nd_level_column).Value = search_term_2nd_level Then
                    target_wks.Cells(i, target_write_column).Value = source_wks.Cells(j, source_column).Value
                    Else
                    Debug.Print "x"
                    End If
            Else
            j = j + 1
            End If
        Next j
    Next i

    End Sub

推荐阅读