- 締切済み
[エクセル・VBA]縦列のユニークな情報を取り出し、横行に配置
毎度お世話になります。エクセルのVBAの質問でございますが、文章で説明しづらいのでまず下記をご覧ください。 A列 B列 C列 D列 E列 F列 Month 業者名 摘要 記1 記2 金額 Nov-07 青森KK 011 BAK 304 386 Jan-08 岩手(株) 705 CHC 318 313 Feb-08 (有)埼玉 568 JJG 121 9,480 Feb-08 (株)東京 40 KKI 183 216 Mar-08 (株)東京 103 AOX 248 1,490 Mar-08 北海道 921 FGJ 319 2,730 Apr-08 関西KK 103 NNB 842 1,050 Apr-08 沖縄(有) 406 JJG 831 315 上記のようなA列の情報を下記のように表示させたいのです。金額の大きい順に並び替え、各行のデータが該当するMMM-YYのセルに印(今回は*ですが何でも可)をつけたいと思っております。[Month]はA3に設定されております。 F列 G列 H列 I列 J列 K列 ←列省略 金額 Nov-07 Jan-08 Feb-08 Mar-08 Apr-08 9,480 * 2,730 * 1,490 * 1,050 * 386 * ↓行省略 *のつけ方はLOOPを2つ作れば出来そうな気がしているのですが、その前段階のMMM-YYの配置の仕方が全くわかりません。[Month]はA3より始まっております。 なにとぞよろしくお願い申し上げます。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mitarashi
- ベストアンサー率59% (574/965)
単純に金額と、それに対応する日付が分かれば良いのでしょうか? ピボットテーブルは如何。変則的ですが、金額を列見出しにして、降順に設定すれば下記のようなものができます。外していたらすみません。 データの個数 : 記1 Month 金額 8-Jan 8-Feb 8-Mar 8-Apr 7-Nov 総計 9480 ...... ....1 ...... ...... ...... ....1 2730 ...... ...... ....1 ...... ...... ....1 1490 ...... ...... ....1 ...... ...... ....1 1050 ...... ...... ...... ....1 ...... ....1 ....386 ...... ...... ...... ...... ....1 ....1 ....315 ...... ...... ...... ....1 ...... ....1 ....313 ....1 ...... ...... ...... ...... ....1 ...216 ...... ....1 ...... ...... ...... ....1 総計 ....1 ....2 ....2 ....2 ....1 ....8
- Yosha
- ベストアンサー率59% (172/287)
コードの全部を記すのは、マナー違反になりそうですので、ヒントだけ書いてみます。 >前段階のMMM-YYの配置の仕方が全くわかりません。 一気に全てをしようとすると難しくなりますので、2回に分けて処理します。 まず、全体を選択して、金額の列で降順にソートします。 次に、A列の日付の欄をコピーして、適当な場所、例えばG列のG3~に貼り付けます。 貼り付けたデータ全体を昇順にソートします。 そのデータを行列を入れ替えてG3~に貼り付けます。 各コードは、「マクロの記録」を使って、実際にやってみるのが一番です。 記録された、コードを見て、不要なところを削ればよいわけです。分からなければ、そのまま使っても結構です。 参考までにコードの一部を記します。 コピー : Range("○○:△△").Copy Range("●●:▲▲").Select ActiveSheet.Paste または Range("○○:△△").Copy Destination:=Range("●●") カットアンドコピー : Range("○○:△△").Cut Destination:=Range("●●") ソート : A列~F列の全データ部分を選択する。F列は降順、A列、B列共に昇順とする。 Selection.Sort Key1:=Range("F4"), Order1:=xlDescending, _ Key2:=Range("A4"), Order2:=xlAscending, _ Key3:=Range("B4"), Order3:=xlAscending 行列を入れ替えて貼り付け 必要データを選択し、 : Selection.PasteSpecial Paste:=xlAll, Transpose:=True *のつけ方は、考えてください。 何かありましたら、作ったコードを、お礼の欄か補足欄に書いてコメントしてください。
お礼
たびたび申し訳ございません。 上記の問題は自己解決いたしました。 しかし新たな問題が浮上いたしまして、それついてはこちらで質問をさせていただきますより、新たに建て直しをしたほうがよさそうですので、今回はこれにて閉めさせていただきます。 遅い時間にもかかわらずお返事をいただけましたことに感謝いたします。 ありがとうございました。
補足
お返事ありがとうございます。 >コードの全部を記すのは、マナー違反 そんなルールがあるのですか?知りませんでした。 上記のマクロを試してみたのですが、ちょっと思うように動きませんでした。で、 >前段階のMMM-YYの配置の仕方が全くわかりません。 の部分だけ自分で考えてみたのですが↓ Sub test() Dim i As Integer Dim n As Integer Dim mnt0 As String Dim mnt1 As String i = 4 n = 7 Do Until Cells(i, 1).Value = "" mnt0 = Cells(i - 1, 1).Value mnt1 = Cells(i, 1).Value If mnt1 <> mnt0 Then Cells(3, n).Value = mnt1 i = i + 1 n = n + 1 End If Loop End Sub と記述すると、 F列 金額...Nov-07...Jan-08...Feb-08 386 313 9,480 216 で止まってしまいます。何かバックでLoopはしているのですがその先のMar-08がいつまでたっても出てこないのです。どこがいけないのでしょうか?(F列金額については後ほどソートかけます。) お分かりでしたらよろしくご指南くださいませ。
お礼
早速のお返事ありがとうございました。 ピボットテーブルですと今後手直しや他のマクロを追加しようとするときにどうしたらよいか分からないので。。。すみませんVBAは多少勉強しているのですがピボットテーブル全く分からないのです。。。 [Month]も左から重複なしに古い年順に並び替えることが出来なくて、また表示も日本語になってしまったり(とほほ。)。 今後の勉強の参考にさせていただきます。ありがとうございました。