- ベストアンサー
VBAが苦手でいまいちわかりません・・・
みなさんはじめまして 現在、Excel2007にてマクロを作っているのですが、うまく動かず 2日過ぎてしまいました・・・ エクセル上でA列でソートしてセルの値が変化したらその前に空白行を追加したいのですが、いまいち上手くできません。 【処理前】 みかん 5 愛知 とまと 5 富山 みかん 2 東京 すいか 8 奈良 みかん 3 島根 とまと 3 山梨 とまと 2 青森 すいか 5 京都 とまと 8 大阪 マクロを叩いて 【処理後】 みかん 5 愛知 みかん 2 東京 みかん 3 島根 すいか 5 京都 すいか 8 奈良 とまと 3 山梨 とまと 2 青森 とまと 8 大阪 とまと 5 富山 と言う具合にデータを生成したいのですが、どのようなコーディングを すればよろしいでしょうか? ご教授のほどよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 大きな間違いをしていました。 >A列を下から順に見て行って、その行と、1つ上の行が同じ値だったら と書きましたが、 A列を下から順に見て行って、その行と、1つ上の行が違う値だったら が正解です。 肝心のコードですが、 Dim r For r = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Cells(r, 1).Value <> Cells(r - 1, 1).Value Then Rows(r).Insert End If Next r こんな感じです。
その他の回答 (3)
- fujillin
- ベストアンサー率61% (1594/2576)
回答というより、マクロの作成手順のヒントですが… No1様の回答内容の手順を手動でやってみて、それをマクロの記録で記録してみると、とりあえず原型ができます。 (無駄なコードを記録されないためにも、不要な操作は入れないようにしましょう。) 次に、これを基にして、やりたいことに合わせて修正してゆきます。 特に、 >A列を下から順に見て行って、その行と、1つ上の行が同じ値だったら~ という条件を判定する部分は記録にはないので、そこだけは作成しないとなりません。 残りの部分は、原型があるので、いらないところを省いたり、セルの指定を一般化したりすることで、なんとかなりそうな気がします。 (No2様の方法は、なかなかマクロの記録には取りにくいので、とりあえずパスさせていただきました)
- n-jun
- ベストアンサー率33% (959/2873)
ソートもVBAでやるのであれば、”みかん”、”すいか”、”とまと”の順に 別シートへデータを書き出していって、次の項目に移る際に1行あけてあげるとか。
- nattocurry
- ベストアンサー率31% (587/1853)
コードは書かずに、やり方だけ。 まずはソート。 その後、A列を下から順に見て行って、その行と、1つ上の行が同じ値だったら、その行に空行を挿入。 これだけで大丈夫です。
補足
ご返答ありがとうございます。 マクロの記録は何とか解決いたしまして、ソートはできたのですが、 >A列を下から順に見て行って、その行と、1つ上の行が同じ値だったら~ という条件を判定する部分は記録にはないので、そこだけは作成しないとなりません。 子の部分の、forの様な全レコードを見る構文と行を追加する構文が どうしてもわかりません。 具体的コードで教えていただけると大変助かるのですが・・・ よろしくお願いいたします。