如何在VBA中展平数据

时间:2016-06-01 13:43:32

标签: excel vba xls xlsx

我是VBA的新手并试图在Google上找不到帮助,但是,我不知道如何搜索以下问题。

以下是我的工作表示例,该工作表需要取消展平并且包含超过2500行

//Deletes ninja AND all connected equipments
    public static void DeleteNinja(int id)
    {
        using (var db = new NinjaDbContext())
        {
            var ninja = db.Ninjas.Where(n => n.Id == id).Single();

            db.Entry(ninja).State = EntityState.Deleted;

            foreach (var eq in ninja.EquipmentOwned)
            {
                db.Entry(eq).State = EntityState.Deleted;
            }

            db.SaveChanges();
        }
    }

我在VBA中寻找解决方案以获得以下格式的结果

  A   |   B    | C |   D
Text1 | Dummy1 | 1 | Power1
Text1 | Dummy1 | 1 | Power2
Text1 | Dummy2 | 1 | Power1
Text3 | Dummy3 | 1 | Power1
Text3 | Dummy3 | 1 | Power2

如果(A1,B1)等于(A2,B2),则计数1 + 1并用D1 + D2替换D1单元的内容(POWER1和POWER2(同一单元中的新行))

我想知道是否有人知道该怎么做或者它叫什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

你很幸运,因为我很无聊......这样我就会抛出一些能满足你想要的代码。但作为一个缺点(就像没有显示代码的小惩罚),我让它变得缓慢而难以阅读:P

Sub test()
  Dim a(2) As Range
  Set a(0) = ActiveSheet.Range("A2:D2")
  While a(0)(1).Value <> ""
    Set a(1) = a(0).Offset(1)
    Set a(2) = Nothing
    While a(1)(1).Value <> ""
      If a(0)(1).Value = a(1)(1).Value And a(0)(2).Value = a(1)(2).Value Then
        a(0)(3).Value = a(0)(3).Value + a(1)(3).Value
        a(0)(4).Value = a(0)(4).Value & " " & a(1)(4).Value
        If a(2) Is Nothing Then
          Set a(2) = a(1)
        Else
          Set a(2) = Union(a(2), a(1))
        End If
      End If
      Set a(1) = a(1).Offset(1)
    Wend
    If Not a(2) Is Nothing Then a(2).EntireRow.Delete xlUp
    Set a(0) = a(0).Offset(1)
  Wend
End Sub

不过,请随时询问是否有任何问题;)