①のような表をなんらかの手段で②のような配列に変換したいと考えております。
どのような手段(関数?マクロ?)がありますでしょうか?
参考URLのご連絡でも構いません。
①
A A1 A2 A3 A4 A5
B B1
C C1 C2 C3
D D1 D2
E E1 E2 E3 E4
②
A A1
A A2
A A3
A A4
A A5
B B1
C C1
C C2
C C3
D D1
D D2
E E1
E E2
E E3
E E4
Option Explicit Sub hatena() Dim i As Long Dim r As Long Dim c As Long Dim y As Long Dim wsOUT As Worksheet Dim wsDATA As Worksheet Set wsDATA = Worksheets("Sheet1") Set wsOUT = Worksheets("Sheet2") y = 1 For r = 1 To wsDATA.Cells(Rows.Count, 1).End(xlUp).Row c = 2 Do While wsDATA.Cells(r, c) <> "" wsOUT.Cells(y, 1) = wsDATA.Cells(r, 1) wsOUT.Cells(y, 2) = wsDATA.Cells(r, c) c = c + 1 y = y + 1 Loop Next End Sub
こんな感じでどうでしょう。
①のデータ(Sheet1)を②のようにSheet2に書き出します。
Option Explicit Sub hatena() Dim i As Long Dim r As Long Dim c As Long Dim y As Long Dim wsOUT As Worksheet Dim wsDATA As Worksheet Set wsDATA = Worksheets("Sheet1") Set wsOUT = Worksheets("Sheet2") y = 1 For r = 1 To wsDATA.Cells(Rows.Count, 1).End(xlUp).Row c = 2 Do While wsDATA.Cells(r, c) <> "" wsOUT.Cells(y, 1) = wsDATA.Cells(r, 1) wsOUT.Cells(y, 2) = wsDATA.Cells(r, c) c = c + 1 y = y + 1 Loop Next End Sub
こんな感じでどうでしょう。
①のデータ(Sheet1)を②のようにSheet2に書き出します。
早速、ご回答いただきありがとうございます。目的のセル配列変更ができることを確認しました。
サンプルデータとして、不変の列データ(アルファベット1文字の箇所)は1列のみとしておりましたが、例えばこれが5列の場合は、どの値をどのように変更すれば、よいでしょうか?
> サンプルデータとして、不変の列データ(アルファベット1文字の箇所)は1列のみとしておりましたが、例えばこれが5列の場合は、どの値をどのように変更すれば、よいでしょうか?
次のように変更してもらえばいいと思います。
コメントを記入してある箇所を変更すれば不変の列の数が変わっても対応できます。
Option Explicit Sub hatena() Dim i As Long Dim r As Long Dim c As Long Dim y As Long Dim wsOUT As Worksheet Dim wsDATA As Worksheet Set wsDATA = Worksheets("Sheet1") Set wsOUT = Worksheets("Sheet2") y = 1 For r = 1 To wsDATA.Cells(Rows.Count, 1).End(xlUp).Row ' 固定列数 + 1 c = 6 Do While wsDATA.Cells(r, c) <> "" ' 固定列数 For i = 1 To 5 wsOUT.Cells(y, i) = wsDATA.Cells(r, i) Next wsOUT.Cells(y, 6) = wsDATA.Cells(r, c) c = c + 1 y = y + 1 Loop Next End Sub
列数を変動させても目的の結果を得られることが分かりました。
本当にありがとうございました。
Option Explicit Sub hatena() Dim i As Long Dim r As Long Dim c As Long Dim y As Long Dim wsOUT As Worksheet Dim wsDATA As Worksheet Set wsDATA = Worksheets("Sheet1") Set wsOUT = Worksheets("Sheet2") y = 1 For r = 1 To wsDATA.Cells(Rows.Count, 1).End(xlUp).Row c = 6 Do While wsDATA.Cells(r, c) <> "" wsOUT.Cells(y, 1) = wsDATA.Cells(r, 1) wsOUT.Cells(y, 2) = wsDATA.Cells(r, 2) wsOUT.Cells(y, 3) = wsDATA.Cells(r, 3) wsOUT.Cells(y, 4) = wsDATA.Cells(r, 4) wsOUT.Cells(y, 5) = wsDATA.Cells(r, 5) wsOUT.Cells(y, 6) = wsDATA.Cells(r, c) c = c + 1 y = y + 1 Loop Next End Sub
まず
c = 2
は 固定行数+1なので ここでは 6をセットします。
次に 固定行数の反映箇所
と
変動行数の反映箇所を変更します。
wsOUT.Cells(y, 1) = wsDATA.Cells(r, 1)
wsOUT.Cells(y, 2) = wsDATA.Cells(r, c)
の
wsOUT.Cells(y, 1) = wsDATA.Cells(r, 1)
は 固定の分だけ
5行なら 5行にします。
wsOUT.Cells(y, 2) = wsDATA.Cells(r, c)
のy, 2は、固定+1なので y,6に変えます。
それが 上記のソースになります。
詳細な解説付きでご回答ありがとうございます。
早速、ご回答いただきありがとうございます。目的のセル配列変更ができることを確認しました。
サンプルデータとして、不変の列データ(アルファベット1文字の箇所)は1列のみとしておりましたが、例えばこれが5列の場合は、どの値をどのように変更すれば、よいでしょうか?