mysql - 如何使用 VBA 来展平 Excel 中数据在行之间拆分的表格?

标签 mysql vba excel datatables

我目前在 Excel 中有一个原始数据表,它总结了给定参与的阶段 A、B 和 C 的状态。一些参与可能没有所有 3 个阶段的数据。

Row| EngagementID | A_date | A_status | B_date | B_status | C_date | C_status
1  |      201     |   2/2  | Approved |        |          |        |          
2  |      201     |        |          |  3/5   | Approved |        |          
3  |      201     |        |          |        |          |  4/1   |  Pending  
4  |      203     |   2/12 | Submitted|        |          |        |          
5  |      203     |        |          |  2/20  | Approved |        |          
6  |      207     |   2/5  | Approved |        |          |        |          

我正在尝试将表格展平成如下所示:

Row| EngagementID | A_date | A_status | B_date | B_status | C_date | C_status
1  |      201     |   2/2  | Approved |  3/5   | Approved |  4/1   |  Pending 
2  |      203     |   2/12 | Submitted|  2/20  | Approved |        |         
3  |      207     |   2/5  | Approved |        |          |        |          

问题:多个实例

但是,在某些情况下,同一个 EngagementID 有多个实例。例如,它可能具有以下内容:

    Row| EngagementID | A_date | A_status | B_date | B_status | C_date | C_status
    1  |      201     |   2/2  | Approved |        |          |        |          
    2  |      201     |        |          |  3/5   | Approved |        |          
    3  |      201     |        |          |  3/18  | Pending  |        |           
    4  |      201     |        |          |        |          |  5/20  |  Pending  
    5  |      201     |        |          |        |          |  5/15  |  Submitted

我试图使 VBA 足够灵活,以便在这些情况下,表格将转换为

Row| EngagementID | A_date | A_status | B_date | B_status | C_date | C_status
1  |      201     |   2/2  | Approved |  3/5   | Approved |  5/20  |  Pending 
2  |      201     |   2/2  | Approved |  3/18  | Pending  |  5/15  |  Submitted

我能够使用以下 VBA 代码解决单实例方面的问题:

Private Sub test()
Dim R As Long
Dim i As Integer
i = 1
R = 2
Count = 0
Do While Not IsEmpty(Range("A" & R))
    If Cells(R, 1).Value = Cells(R + 1, 1).Value Then
        Count = Count + 1
    Else
        i = 1
        Do While i <= Count
            Cells(R - Count, 2 + (2 * i)).Value = Cells(R - Count + i, 2 + (2 * i))
            Cells(R - Count, 3 + (2 * i)).Value = Cells(R - Count + i, 3 + (2 * i))
            i = i + 1
        Loop
            i = 1
            Do While i <= Count
                Rows(R - Count + i).Delete
                i = i + 1
                R = R - 1
            Loop
        Count = 0
    End If
R = R + 1
Loop

End Sub

但是,这并不能说明多个实例。 任何关于我可以在何处调整 VBA 以适应这种“多实例”场景的想法都将不胜感激。谢谢!

最佳答案

您可以使用 Power Query 轻松处理此问题。这是一个插件,您可以免费获得并在 Excel 2010+ 中激活(默认情况下在 Excel 2016 中称为获取和转换)。您可以在那里直接连接您的源并根据需要编辑您的数据。对于您的特定情况,请按照以下步骤操作:

关于mysql - 如何使用 VBA 来展平 Excel 中数据在行之间拆分的表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49018165/

相关文章:

mysql - 使用 mysql 或 cakephp 以月为单位搜索结果

Excel VBA粘贴到事件单元格的偏移量

vba - 在powerpoint VBA中,如何更改文本框中字体的间距?

python - 使用带有多个映射函数的 pandas applymap()

mysql - 如何删除mysql中列的键约束?

mysql - 获取全名查询

Mysql "select * from"没有返回所有行

vba - 特定工作表中的 Excel 2010 VBA 数据透视表创建不起作用

excel - 简化 if 语句

arrays - 将范围传递给 Excel 用户定义函数并将其分配给数组