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

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

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

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

Q&A

解決済

1回答

937閲覧

Excelの表形式のデータをVBAで整列したい

tanakahanako

総合スコア11

VBA

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

0グッド

2クリップ

投稿2020/03/25 00:44

表形式のデータをVBAで整列したい

イメージ説明

画像の左側のような表を右側のように整列したいです。
VBAの「配列」を使えばできるのではないかと考えているのですが、
どこを配列して、どこをループすればいいのかの考え方から分からずつまづいています。。。

VBA初心者で不躾な質問かと思いますが、
ご教授いただければ嬉しいです!!!

宜しくお願いいたします。

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

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

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

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

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

guest

回答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
mattuwan

総合スコア2136

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

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

tanakahanako

2020/03/25 01:35

回答くださってありがとうございます!! 継続的に使いまわしたいです。 科目(列)や氏名が増えることはないと思いますので、そこは対応なくて構いません。 各表の間に空白行を挿入することは可能です! 列の整列の処理の後は、表の部分は削除する処理を入れようと考えておりました。 A2~は空欄です。整列後の1行目には「日付」「科目」‥‥自動で入るようにしたいと思っています。
Y.H.

2020/03/25 01:40

mattuwanさん。 記載の内容は回答じゃないので「追記・修正依頼」に記載いただけたらと思います。
mattuwan

2020/03/25 19:54

んー。なんだろ。。。。いろいろ思うところはあるけど、 とりあえず、了解です。>Y.H.さん
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問