webdevqa.jp.net

Excelテーブルの複数の列を複数の行に変換します

次の形式のExcelテーブルがあります。

ID Date1 Date2 Date3  
1  1/1   1/2   1/3
2  1/2   1/3   1/1
3  1/3   1/2   1/4

この形式に変更する方法はありますか?

ID Date
1  1/1
1  1/2
1  1/3
2  1/2
2  1/3
2  1/1
3  1/3
3  1/2
3  1/4

私はVBA、PowerQuery、PowerPivot、データモデルなどを使用することにオープンです。この問題の答えを検索するときに使用する必要のある専門用語はありますか(正規化、変換など)。

助けてくれてありがとう。

3
RWL01

次のようなデータを使用:

enter image description here

セルを選択して入力します。

=ROUNDUP(ROWS($1:1)/3,0)

隣接するセルに次のように入力します。

=OFFSET($B$2,ROUNDUP(ROWS($1:1)/3,0)-1,MOD(ROWS($1:1)-1,3))

これらのセルを下向きにコピーし、適切な形式を2番目の列に適用して以下を確認します。

enter image description here

3
Gary's Student

たくさんあり、VBAを使用したい場合は、これでうまくいきます

Option Explicit

Sub unpivot()
Dim lastrow As Integer
lastrow = Cells(Rows.Count, 1).End(xlUp).Row
Dim lastcol As Integer
lastcol = Cells(1, Columns.Count).End(xlToLeft).Column

Dim r As Integer
Dim c As Integer


For r = lastrow To 2 Step -1

    For c = lastcol To 3 Step -1
        If Cells(r, c) <> "" Then
            Rows(r + 1).Insert
            Cells(r + 1, 1) = Cells(r, 1)
            Cells(r + 1, 2) = Cells(r, c)
            Cells(r, c).Clear
        Else: Rows(r).Delete
        End If
    Next

Next

End Sub
1
Raystafarian