- ベストアンサー
セル結合と列挿入の方法について
- Excelのマクロを使用して、特定の範囲のセルを結合しています。また、列の挿入も行っています。具体的には、マクロを使って1行おきに3行ずつ挿入し、A2:A5、B2:B5、C2:C5のセルを結合しています。さらに、D列とE列を挿入しています。
- すでにデータが入力されている状態で、特定の範囲のセルを結合したり、列を挿入したりしたい場合、Excelのマクロを使用することができます。マクロを使って1行おきに3行ずつ挿入し、A2:A5、B2:B5、C2:C5のセルを結合し、最後にD列とE列を挿入することができます。
- Excelのマクロを使用すると、すでにデータが入力されている状態で特定の範囲のセルを結合したり、列を挿入したりすることができます。具体的には、マクロを使って1行おきに3行ずつ挿入し、A2:A5、B2:B5、C2:C5のセルを結合し、最後にD列とE列を挿入します。これにより、簡単に大量のセルの操作が行えます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.1・2です。 ご希望ウ通りの動きでないようで、ごめんなさい。 とりあえずマクロを二つにしてみました。 Sub 行挿入() Dim i As Long For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 Rows(i + 1 & ":" & i + 3).Insert Next i End Sub Sub セル結合() Dim i, j As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To 26 If Cells(i, j) <> "" Then With Range(Cells(i, j), Cells(i + 3, j)) .Merge .HorizontalAlignment = xlCenter End With End If Next j Next i End Sub 今回はセル範囲の挿入ではなく、行挿入にしています。 ※ 今回も 画面更新は敢えてやっていません。 こんなんで良いのでしょうかね?m(_ _)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! たびたびごめんなさい。 質問内の >1行置きに3行挿入し・・・ の部分を見逃していました。 前回のコードは無視してください。 Sub test() Dim i, j As Long For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 Range(Cells(i + 1, 1), Cells(i + 3, 4)).Insert (xlDown) Next i For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 For j = 1 To 4 If Cells(i, j) <> "" Then With Range(Cells(i, j), Cells(i + 3, j)) .Merge .HorizontalAlignment = xlCenter End With End If Next j Next i Range(Columns("D"), Columns("E")).Insert End Sub 今回のコードはA~D列と決めつけてやっています。 各列毎に行挿入してしまうともっと時間がかかってしまうため 敢えて、4列まとめて行挿入しています。 それでも結構時間がかかってしまうと思いますので、 敢えて画面更新を表示するようにしています。 (Application Screenupdating=FALSE・TRUEをコードに入れていません) 画面更新をしないようにすると画面はずっと砂時計のままになります。 少しは画面が変化していた方がマクロが走っている感じがすると思いますので・・・ 時間短縮できる方法があればごめんなさいね。m(_ _)m
補足
ご投稿いただきありがとございます、私の説明不足も重なりごめんなさい データは、すでにA列:Z列まで入ってる為、行挿入時は、行1の部分にはタイトルが入ってる為、行2の下に新しく3行挿入(A列:Z列まで)、同じく行6下に新しく3行挿入(A列:Z列まで)・・・・・と言った感じにしたいです、 ごめんなさい
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! コードを詳しく見ていませんが・・・ A~D列の2行目以降を 4行ずつ「結合・中央揃え」としています。 Sub test() Dim i, j As Long Application.ScreenUpdating = False For j = 1 To 4 '←A列~D列までとしています。 For i = 2 To 5000 Step 4 With Range(Cells(i, j), Cells(i + 3, j)) .Merge .HorizontalAlignment = xlCenter End With Next i Next j Application.ScreenUpdating = True Range(Columns("D"), Columns("E")).Insert End Sub ※ 若干時間がかかると思います。 こんな感じでよろしいのでしょうか?m(_ _)m
補足
こんばんは、早速試してみました、データの無いシートでは旨く動作しますが、データがすでに入ってるシートでは??
お礼
はい、お手数お掛けしましたありがとうございました