- ベストアンサー
VBAを使ってセルの結合を行いたい初心者の質問
- VBAを使って、A列とB列のデータを結合する方法を教えてください。
- A列のセルにデータが入っている場合、その下に空白の三行があります。それらのセルをB列と結合したいです。
- 今後データが増えるため、手作業ではなくVBAを使ってセルの結合を行いたいです。誰か教えていただけませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>それをA1からB4、A5からB8・・・A25からB29までのセルを、手作業で結合をしている 簡単な手動手順: A1:B4をセル結合する A1:B4をコピーする リスト下端まで選択する 形式を選んで貼り付けで「書式」を貼り付ける >マクロ マクロは自由度が乏しくてお薦めではありませんが,どうしてもならご参考に。 sub macro1() dim i as long application.displayalerts = false range("A:B").unmerge for i = 1 to range("A65536").end(xlup).row step 4 cells(i, "A").resize(4, 2).merge next i application.displayalerts = true end sub
その他の回答 (2)
- tsubuyuki
- ベストアンサー率45% (699/1545)
ちょっと根本を付く質問を投げかけます。 > 今後データが増えていくのでどうしてもVBAで行いたい とのことですが、 ・データが1件増えるごとに、その1件分に対して手作業で結合する (マウスで範囲選択→リボンのホームタブ(初期位置)から「セル結合」のボタン) ・データが1件増えるごとに、全体に対してマクロを走らせる (リボンのユーザー定義タブからマクロ起動 またはCtrl+F8からマクロ起動 もしくは開発タブからマクロ起動 いずれにせよ、タブは初期位置以外) どちらが簡単ですか? 仮に「その1件分に対して結合を行うマクロ」だとすると、 さらに無駄だと思うので、選択肢から外しています。 例えば、 「A列にデータが入力されたら、入力するための行範囲(書式設定など)を作成」 と言うマクロなら、価値はあるかもしれません。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Target.Resize(4, 2).Merge ' その他、罫線や書式設定の処理など Cells(Target.Row, 3).Select End If End Sub などなどです。 ただし正直なところ、前のデータをコピー→該当列に書式を貼り付け の方が 確実に早い場合も大いにありますので、そこは考えどころです。 単純な処理ならマクロより手作業の方が早い場合もありますよ。
お礼
返事が遅くなりました。 今後、数百件のデータになっていくので、どうしてもマクロで実行したかったのです。 結局keithinさんの回答でできました。 VBAの勉強を始めたばかりなので、今後機会があればお世話になります。 ありがとうございました。
- FEX2053
- ベストアンサー率37% (7991/21371)
VBAの書き方の基本などはご存知、という前提で いきなりコードを Sub macro1() Do Until Selection.Offset(, 1) = "stop" Selection.Resize(4, 2).Select Selection.MergeCells = True Selection.Resize(1, 1).Offset(1).Select Loop End Sub これで、「A列最後の枠の右側(例えばB9)に"stop"と あるまで、4×2ずつセルを結合」して行きますよ。 Do~Untilなので、終了条件をミスすると止まらなくなり ますから、F8を押すテストで動作を確認してから実際に 動かしてみて下さい。
お礼
返事が遅くなりました。 結果的にはkeithinさんの記述でできました。 回答があるかどうか心配だったのですが、FEX2053さんの回答が一番早かったのでうれしかったですね。 今後の参考にさせて頂きます。 ありがとうございました。
お礼
返事が遅くなりました。 マクロで成功しました。 1週間ほど悩んでいたのですっきりしました。 VBA勉強を続けていくので、機会があれば今後も宜しくお願いします。 ありがとうございました。