セル結合と列挿入の方法について

このQ&Aのポイント
  • 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列を挿入します。これにより、簡単に大量のセルの操作が行えます。
回答を見る
  • ベストアンサー

セル結合と列挿入

マクロの記録を使い書いて見ましたが、1行置きに3行挿入し 、A2:A5 , B2:B5 ,C2:C5 ,D2,D5 言う感じでセル結合を5000行まで行い、最後にD、E列、列の挿入したいのですが、どのように書けば宜しいでしょうか? すでに、データが入っています。 Sub Macro1() Rows("3:5").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Rows("7:9").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A2:A5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("B2:B5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("C2:C5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("A6:A9").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("B6:B9").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("C6:C9").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Columns("D:E").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Selection.ColumnWidth = 18.88 Range("A2:A5").Select End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.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

okamoto6855
質問者

お礼

はい、お手数お掛けしましたありがとうございました

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

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

okamoto6855
質問者

補足

ご投稿いただきありがとございます、私の説明不足も重なりごめんなさい データは、すでにA列:Z列まで入ってる為、行挿入時は、行1の部分にはタイトルが入ってる為、行2の下に新しく3行挿入(A列:Z列まで)、同じく行6下に新しく3行挿入(A列:Z列まで)・・・・・と言った感じにしたいです、 ごめんなさい

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! コードを詳しく見ていませんが・・・ 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

okamoto6855
質問者

補足

こんばんは、早速試してみました、データの無いシートでは旨く動作しますが、データがすでに入ってるシートでは??

関連するQ&A

  • 【自作マクロ】いらない部分を削除していただきたい。

    自分で行ってみたマクロですが、長く、見づらいです。 いらない部分を削除していただける方がいましたら、お願いいたします。 作業としては、 /////////////////////////////////// あああ いいい ううう えええ おおお かかか      あかさたなはまやらわん の、「あかさたなはまやらわん」を削除し、セルの結合を解除し、 あああ、いいい など文字のあるセルと下のセルを結合して格子をつける。 /////////////////////////////////// Sub 項目を1行にして摘要を削除する() ' ' 項目を1行にして摘要を削除する Macro ' ' Range("C7:H7").Select ActiveCell.FormulaR1C1 = "" Range("C7:H7").Select With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With Selection.UnMerge Range("C6:C7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("D6:D7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("E6:E7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("F6:F7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("G6:G7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("H6:H7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("C6:H7").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub

  • エクセルのセルの結合範囲を可変にする場合

    教えて下さい。 VBAでセルの結合範囲を可変にする場合、行を可変にするのはわかるのですが、列を可変にするにはどのように記述すればよいのでしょうか?よろしくお願い致します。 以下の場合の「A」や「E」を可変にしたいのですが??? Range("A1:E5").Select With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With

  • エクセルのマクロ セルの結合プロシージャを教えてください。

    マクロの記憶でのプロシージャを Rangeを変数型にしたいのです。 行も列も定めまずに、範囲はA1:BX45です。 Offsetを使うのか、もう何がなんだかわからないので 教えてください!! マクロの記憶でのプロシージャです。 ↓ Keyboard Shortcut: Ctrl+d ' End Sub Range("R26:T27").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = True .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge End Sub

  • エクセル2010のマクロについて、セル結合の解除

    全てのセルを選択して、結合されているセルがあったら全て解除したいのですが、 マクロの記録で作成すると、↓を何百回も繰り返すソースになってしまいます With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With 長すぎるとエラーになってしまいますし、何回繰り返すかもランダムなので、↑の処理を、 結合されたセルがなくなるまで繰り返すという設定にしたいのですが、可能でしょうか? よろしくおねがいします。

  • マクロで隣接する上下のセルを比較後、処理をするには

    よろしくお願いします。 Excel2007です。 A1からA5000までデータが入っています。 データは文字列です。 その文字列を上から順に比較していき、 隣接する上下のデータが一致した場合、 さらにその下が一致しているかを調べ、 その作業を一致しなくなるまで続けます。 最後に、一致した部分すべてを選択し、 セルをまとめて結合し、左寄せしたいのです。 まとめて結合し、左寄せ、という部分は、 マクロを記録し、以下のようにするのはわかったのですが、 Range("a4123:a4131").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With そして、これをa5000(データが格納されている最後のセル)まで 続けたいのです。 例えば、 A1とA2を比較し、一致しないなら、A2とA3を比較。 一致したら、さらにA2とA4が一緒かどうか比較。 一致が無くなるまで続けて、最後に処理。 という感じです。 前半の部分が全くわかりません。 ご教示願えませんでしょうか。よろしくお願いします。

  • エクセルマクロで教えてください

    エクセル2003です。 自動マクロで下記のようなマクロを造ったんですが Selection.End(xlDown).Select   Range("A29:D29").Select  ■A29を止まったセルの番号にしたいのです。(A**からD**まで)     With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("A30").Select ■A30を止まったセルの番号にしたいのです 以上2箇所の指定を教えていただけますでしょうか。 よろしくお願いいたします。

  • Excelのセルにインデントを設定するVBAはありますか

    Excel2003のセルに文字列を入力し、ボタンをクリックするとインデントが設定され1文字分ずつ右へずれるようにしたいのです。 マクロで、書式→セル→配置タブ→インデント設定を記録してボタンを作成しました。 VBAでは以下の記録になりました。 With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 1 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With これだとボタンをクリックすると確かに1文字分ずれるのですが、「IndentLevel = 1」と固定されてしまいます。 2文字や3文字ずらすセルがあるため、ボタンをクリックするたびに1文字分ずつ続けてずれるようにする必要があります。 構文を変更すればこのようなことは可能なのでしょうか。 どうかお知恵をお貸しください。よろしくお願いします。

  • 多数のセルを結合するマクロ

    セルA1とA2を結合、セルB1とB2を結合、 という風に1行目と2行目のセルを列単位で結合させたいです。 「セルA1とA2を結合」という操作を記録してもらい、それをFor文で回した以下のコードを作りました。 For a = 1 To 250 Range(Cells(1, a), Cells(2, a)).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Next 動作としては問題無いのですが、実行完了までにかなり時間がかかります。 1つのシートなら気にならないレベルですが、 ちと複数のシートに対して実行したい経緯があります。 その複数のシートの各セルに入っている内容も異なるため、 シート1をコピーしてシート2を作成、というわけにもいきません。 動作時間が早くなる組み方ありましたら、よろしくお願いします。

  • Excelでインデント設定のVBAがうまく動かず困っています

    Excel2003でデータ入力用シートを作りました。 セルの入力時に、ボタンをクリックしてインデントを自由に増減できるように下記のVBAをボタンに設定しました。 With Selection .HorizontalAlignment = xlLef .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = .IndentLevel + 1 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End with 通常はうまく動作するのですが、対象セル以外の操作禁止のため「シート保護」を設定したところ、入力セルでこのボタンをクリックしてもエラーが表示され動作しません。 入力セルは、ロックを解除しており入力や編集はできます。 シート保護したシートでも、インデントのボタンがうまく動くようにするには、何か手立てはありますでしょうか。 どうぞお知恵をお貸し願います。

  • 任意のセルでマクロを実行させたい

    アクティブセルにマクロを実行させたいのですがうまくいきません。 2007のエクセルを使用しています。 (1)命令文で指定しているセル(G9:G11)をJ9:J11やR14:R16等でも使用したい。 (2)また作成したマクロを同シート内オートシェイプに登録したい。 よろしくお願いいたします。 Sub Macro2() ' ' Macro2 Macro ' ' Range("G9:G11").Select Selection.ClearContents With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlTop .Orientation = xlVertical .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With With Selection.Font .Name = "MS P明朝" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 16777164 .TintAndShade = 0 .PatternTintAndShade = 0 End With ActiveCell.FormulaR1C1 = "搬入" With ActiveCell.Characters(Start:=1, Length:=2).Font .Name = "MS P明朝" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With ActiveCell.Characters(1, 2).PhoneticCharacters = "ハンニュウ" Range("G12").Select End Sub

専門家に質問してみよう