質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1487閲覧

VBAで入力されている列の分、行をコピーする

beginner_t

総合スコア716

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2018/03/12 06:43

編集2018/03/12 10:23

いつも勉強させて頂いております。
表題の詳細ですが、
イメージ説明
上記画像のような表があり、品番より右の列には不規則にデータが入力されています。
また、連続して入力されています。

この表を
イメージ説明
この画像のように、2列に加工したいのですが、
うまくいきません。

作成しているコードは

vba

1max_row = Sheets("シート1").Cells(Rows.Count, "A").End(xlUp).Row 2For row_next = 1 To max_row 3 max_column = Sheets("シート1").Cells(row_next, Columns.Count).End(xlToLeft).Column 4 For c_num = 2 To max_column 5 copy_num = (max_column-1) - 1 6 7 Next c_num 8 9 Next row_next

max_rowにAの最終行、max_columnでデータが入力されている最終列を取得し、
copy_numでコピーする回数を割り出しました。
1列分しか入力されていない行はコピーする必要がないので-1としました。

挿入する行数を取得することはできたのですが、
この後の処理が思いつきません。

【追記】わからないことまとめ
・行を挿入する際、行を個別に挿入数を変える方法がわからない。
行を挿入するときは

vba

1'Rows(1).Insertで挿入できる 2For i = max_row To 2 Step -1 3    Rows(i).Insert 4Next i 5

上記のコードで間に1行づつあけることができるが、
行によって挿入する行数が違う場合どうすればいいのかがわからない。

ご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C列以降を行追加してセットしていく、でどうでしょう。
A列のデータ数は行追加するのであまり意味合いを持ちませんので、空白になったら終わり、というロジックでいいかと思います。

ExcelVBA

1' データ行(1行目は見だしなので飛ばす) 2data_row = 2 3 4' A列が空白になるまで回す 5While Sheets("シート1").Cells(data_row, 1) <> "" 6 7 max_column = Sheets("シート1").Cells(data_row, Columns.Count).End(xlToLeft).Column 8 9 ' B列はそのままでいいので、C以右を追加して値をセットする 10 For c_num = 3 To max_column 11 12 ' 行を追加して、品番と数を入れ、元のデータを消す 13 Rows(data_row + c_num - 2).Insert 14 Sheets("シート1").Cells(data_row + c_num - 2, 1) = Sheets("シート1").Cells(data_row, 1) 15 Sheets("シート1").Cells(data_row + c_num - 2, 2) = Sheets("シート1").Cells(data_row, c_num) 16 Sheets("シート1").Cells(data_row, c_num) = "" 17 18 Next c_num 19 20 ' データ行を次の行に移動 21 data_row = data_row + max_column - 1 22 23Wend

投稿2018/03/12 12:11

編集2018/03/12 12:13
crowmt

総合スコア402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner_t

2018/03/12 12:45

思い通りの動作になりました。 初めの動作を考える部分をもっとシンプルに的確に考えないといけないなと感じました。 大変勉強になりました。 ありがとうございます。
crowmt

2018/03/12 14:10

無事に解決できたようでなによりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問