人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelの表の配列変更に関する質問です。

?のような表をなんらかの手段で?のような配列に変換したいと考えております。
どのような手段(関数?マクロ?)がありますでしょうか?
参考URLのご連絡でも構いません。

?
AA1A2A3A4A5
BB1
CC1C2C3
DD1D2
EE1E2E3E4

?
AA1
AA2
AA3
AA4
AA5
BB1
CC1
CC2
CC3
DD1
DD2
EE1
EE2
EE3
EE4

●質問者: hiromiti
●カテゴリ:コンピュータ
✍キーワード:A1 A3 C3 D1 D2
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ootatmt
●30ポイント ベストアンサー
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に書き出します。

http://dummy/

◎質問者からの返答

早速、ご回答いただきありがとうございます。目的のセル配列変更ができることを確認しました。

サンプルデータとして、不変の列データ(アルファベット1文字の箇所)は1列のみとしておりましたが、例えばこれが5列の場合は、どの値をどのように変更すれば、よいでしょうか?


2 ● ootatmt
●25ポイント

> サンプルデータとして、不変の列データ(アルファベット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

http://dummy/

◎質問者からの返答

列数を変動させても目的の結果を得られることが分かりました。

本当にありがとうございました。


3 ● きゃづみぃ
●25ポイント
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に変えます。

それが 上記のソースになります。

http://q.hatena.ne.jp/1280991348

◎質問者からの返答

詳細な解説付きでご回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ