Excel:データレイアウト間の変換


1

私は以下のような状況にあります。行のグループがあります。各グループの上には、グループ内のすべての行に共通のデータフィールドを表す小さな「ヘッダー」があります。 すべてのピボットテーブルを作成し、そのフィールド(GroupID)を含めたいので、テーブルの2番目のバージョンが必要です。 このような短いマクロの記録方法はありますか。 それとも、ピボットテーブルを直接作成する方法はありますか。

私は持っています:

GroupID
4

Name      Email       Likes   Dislikes
herpina   something   Cake    Excel
derpina   something   Cake    Excel

GroupID
5

Name      Email       Likes   Dislikes
roflmao   something   Cake    Hmm
roflomg   something   Baking  test
testtttt  something   Sleep   22

GroupID
1

Name      Email       Likes   Dislikes
OAG       something   OAB     N/A
OAB       something   N/A     N/A

希望:

Name      Email       Likes   Dislikes  GroupID
herpina   something   Cake    Excel     4
derpina   something   Cake    Excel     4
roflmao   something   Cake    Hmm       5
roflomg   something   Baking  test      5
testtttt  something   Sleep   22        5
OAG       something   OAB     N/A       1
OAB       something   N/A     N/A       1

このサンプル入力は、次の場所にもあります。 https://dl.dropbox.com/u/736090/Book1.xlsx

回答:


2

これはできるだけ短いマクロです。

  • Excelを開いて押す ALT + F11
  • 以下のコードを シート1 あるいはあなたのデータがどこにあるのか
  • VBAエディタを閉じてを押します ALT + F8 そしてマクロを実行する

    Sub deletelines()    
      Range("A4:D4").Copy
      Range("A1").Insert Shift:=xlToRight
      For i = 2 To Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        c = Cells(i - counter, 1)
        if IsNumeric(c) And c <> "" Then groupID = c
        If c = "" Or c = "Name" Or c = "GroupID" Or IsNumeric(c) Then
          Rows(i - counter).Delete
          counter = counter + 1
        Else
          Cells(i - counter, 5) = groupID
        End If
      Next i   
    End Sub
    

これはQ&Aサイトなので、コードについて説明します。そうすれば、コードを簡単に変更したりカスタマイズしたりできる他の人にとって役立つことがあります。

  • 行1 + 14:マクロの開始と終了(サブルーチン)
  • 2 + 3行目:[A4:D4]の範囲をコピーして[A1]の前に挿入します。これでヘッダ行が形成されます
  • Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 最後に使用されたセルを決定します。あなたの例ではその22
  • 4行目:2から始まり22で終わるループです。 i 行インデックスとして使用されます
  • 5行目:現在の行の最初のセルを保存します。一般的な構文は cells(rownumber,columnnumber)
    注意:行を削除するので、すでに削除した行数を差し引く必要があります。
  • 6行目:見て c 番号であり、別の番号が見つかるまでそれを現在のgroupIDとして保存します。
  • 7行目:現在のセル値が "Name"、 "GroupID"、空白、またはNumberのいずれであるかを確認する条件です。
  • 8行目:条件が真の場合、これは行全体を削除します
  • 9行目:条件が真であれば、これは私たちのカウントアップ howmanydeletedlines カウンタ
  • 10〜12行目:条件が偽の場合、これは保持したい適切なデータ行である必要があります。
  • 行13:次へループ i これは私たちの現在の行を表します

それは始まりですが、それだけではありません。サンプル入力を見てください。 dl.dropbox.com/u/736090/Book1.xlsx - そして、あなたが他のフォーマットでそれを必要とするならば私に知らせてください。
Christian Neverdal

私は自分の答えを編集しました。私はあなたのbook1.xlsxでそれをテストしました、そしてそれは私のために働きました。
nixda
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.