表形式のデータをVBAで整列したい
画像の左側のような表を右側のように整列したいです。
VBAの「配列」を使えばできるのではないかと考えているのですが、
どこを配列して、どこをループすればいいのかの考え方から分からずつまづいています。。。
VBA初心者で不躾な質問かと思いますが、
ご教授いただければ嬉しいです!!!
宜しくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
えっと、とりあえず、マクロで処理するのは1回限りですか?
それとも、継続的に使い回したいですか?
その時氏名の増減や、科目の増減にも対応したいですか?
科目が増えたとき、同じ形の表を増やしますか?(列の増減はある?)
各表の間に、空白行を挿入することは可能ですか?(これからずっと運用するにあたって)
表の中でA2、A10、A18は、結合されて無くて、空欄ですか?
継続的に使いまわしたいです。
科目(列)や氏名が増えることはないと思いますので、そこは対応なくて構いません。
各表の間に空白行を挿入することは可能です!
列の整列の処理の後は、表の部分は削除する処理を入れようと考えておりました。A2~は空欄です。整列後の1行目には「日付」「科目」‥‥自動で入るようにしたいと思っています。
遅くなりました。
表の間に1行空白行が入っているものとします。
ExcelVBA
1Sub test() 2 Dim rngTarget As Range 3 Dim rngData As Range 4 Dim rngResults As Range 5 Dim a As Range 6 Dim c As Range 7 Dim ixRow As Long 8 Dim rngItemV As Range 9 Dim rngItemH As Range 10 11 Set rngTarget = ActiveSheet.Range("A:F").SpecialCells(xlCellTypeConstants) 12 Set rngResults = ActiveSheet.Range("I1") 13 ixRow = 1 14 15 rngResults(ixRow, 1).Resize(, 5).Value = Split("日付,科目,点数,氏名,備考", ",") 16 17 For Each a In rngTarget.Areas 18 With a 19 Set rngData = .Resize(.Rows.Count - 3, .Columns.Count - 1).Offset(2, 1) 20 End With 21 22 For Each c In rngData.Cells 23 Set rngItemH = Intersect(rngData, c.EntireRow) 24 Set rngItemV = Intersect(rngData, c.EntireColumn) 25 26 ixRow = ixRow + 1 27 rngResults(ixRow, 1).Value = rngItemV(-1, 1).Value 28 rngResults(ixRow, 2).Value = rngItemV(0, 1).Value 29 rngResults(ixRow, 3).Value = c.Value 30 rngResults(ixRow, 4).Value = rngItemH(1, 0).Value 31 rngResults(ixRow, 5).Value = rngItemV(6, 1).Value 32 Next 33 Next 34End Sub 35
ごめんなさい。
動作確認してません。
こんな感じとかで出来ると思いますが、
分かりますでしょうか?
解らないところは聞いて下さい。
(あまり時間が取れないので返事が遅くなります。)
他の方の回答が付きませんね。
質問が丸投げになっているので、敬遠されているかもです。
(僕が変な回答をしたせいかも?)
いずれにしても、わからないなりに、どんなことをしてみたけど、
上手く行かなかったということを説明して、
やりとりしながら、解決の方向を目指してください。
いまから勉強していくのですから、一朝一夕で解決するとは思わない方がよいです。
投稿2020/03/25 01:28
編集2020/03/25 19:53総合スコア2163
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/25 01:35
2020/03/25 01:40
2020/03/25 19:54