• 締切済み

VBAでセルの結合と分割(解除)をお願いします

宜しくお願いいたします。 H5とH6のどちらかに数字か記号が入っています以下30個のセルも同様です、H6にデータを入れH5とH6を結合するとセルの認識はH5を認識するのでH6のデータは他へコピー出来ないので結合したセルを再度分割して一行に並び変えているのに下記の構文で実行しているのですが結合にかなりの時間がかかっています。分割は瞬時にできています。 お願いしたい件は即時もしくはなるべく早い方法がありましたらお願いいたします。 こんな感じで作りました Sub 結合() For a = 8 To 38 Range(Cells(5, a), Cells(6, a)).Select Selection.Merge Range(Cells(7, a), Cells(8, a)).Select Selection.MergeSub 以降29個    ・    ・    ・ Next a End Sub 分割() Dim range1 As Range Set range1 = Range("H5:AL5") range1.MergeCells = False Set range1 = Range("H7:AL7") range1.MergeCells = False 以降29個   ・   ・    ・ End Sub 良い方法をご伝授宜しくお願いいたします

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

二重ループじゃダメですか? For nRow = 8 To 38  for nCol = 5 to 47 step 2 '47が間違ってたら置き換えてください   Range(Cells(nol, a), Cells(nCol+1, nRow)).Merge  next nCol next nRow

vanpire99
質問者

お礼

有難うございます。 このままではエラーで実行出来ません。 A1とA2、B1とB2、C1とC2のセルの結合方法が知りたいのです。

関連するQ&A

  • VBAショートカットキー セルの結合・解除

    VBAでエクセルで使用するショートカットキーを作成しております。 エクセルは2007を使用しています。 Ctrl+Shift+F で 選択したセルが、結合していたら解除、解除されていたら結合  という命令を作成しました。(ネットから拝借ですが、、、) 選択した範囲のセルに何も書かれていないときは良いのですが、何かが入力された範囲を 選択して、実行するとエクセル上で 【選択範囲には複数のデータ値があります。1つのセルとして結合すると、選択したセル範囲になるもっとも左上端になるデータのみが保持されます(空白セルは無視されます)】 という警告(?)ウインドウが表示されます。 その後「 OK 」 を押すと問題ないのですが「 キャンセル 」を選択すると VBAで ”実行時エラー’1004” RangeクラスのMergeCells プロパティを設定できません。 と エラーになってしまいます。 「キャンセル」を選択した際に、エラーにならないようにするには、どのように修正すれば良いか 教えて頂きたいです。 以下、作成したマクロです。 デバッグを確認すると[ .MergeCells = True ]の部分が黄色くなります。 ---------------------------------------------------------------------- Sub auto_open() Application.OnKey "+^F", "セルの結合解除" End Sub ’------------------------------ Sub セルの結合解除() With Selection If .MergeCells = False Then .MergeCells = True .HorizontalAlignment = xlCenter Else .MergeCells = False End If End With End Sub ---------------------------------------------------------------------- 何卒宜しくお願い致します。

  • セル解除後、各行に値をコピーし結合するマクロ

    A1からC3のセルが結合しており、 そのセル結合を解除すると、A列のみ値がコピーされる。 コピーした後、各行ごとにセルを結合していく…… という処理をしたいと思い、 調べて下記のマクロまでなんとかこぎつけました。 Sub セル結合() Dim date1 As Variant Dim range1 As Range Application.DisplayAlerts = False For Each range1 In Selection.Rows If range1(1).MergeCells = False Then range1(1).Merge Else date1 = Selection.Rows(1).Value With range1 .UnMerge .WrapText = False .ShrinkToFit = False Selection.Value = date1 End With End If Next range1 End Sub ※実行範囲に関しては、  任意選択をした範囲にしたいため、  range(1)にて処理を行いました。 困っているのは、上記のマクロを実行すると、 最初の行のみ結合できないということ。 もうひとつが、 セル結合をしない時に値を左端にコピーすると、 文字が自動縮小されてしまいます。 縮小しないようにするには、 どのような処理を入れたら良いでしょうか? お力添え頂けますと幸いです。 よろしくおねがいします。

  • セル結合と列挿入

    マクロの記録を使い書いて見ましたが、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

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

    セル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を作成、というわけにもいきません。 動作時間が早くなる組み方ありましたら、よろしくお願いします。

  • エクセルのマクロ:結合をずらして行う

    Sub abc() Range("F7:F8").MergeCells = True Range("G7:G8").MergeCells = True Range("H7:H8").MergeCells = True Range("F15:F16").MergeCells = True Range("G15:G16").MergeCells = True Range("H15:H16").MergeCells = True Range("F23:F24").MergeCells = True Range("G23:G24").MergeCells = True Range("H23:H24").MergeCells = True End Sub エクセルのマクロで、 こんな感じで8ずつ下にセルの結合を していきたいのですが、 ループもしくは Selection.Offset(8,0).Select などを使って一括で行う方法はありませんでしょうか? お願いします。

  • マクロ 結合セルへ値のみ貼り付けるにはどうしたらよいでしょうか。

    マクロは初心者で、まだまだ勉強しているところです。 シート名「入出金履歴」のデータを顧客コードごとに分かれている別シートへデータを振り分けて貼り付ける、もしくは反映させたいのですが、貼り付け先のセルがシートの都合上、結合セルになっており、下記のマクロだと当然ながらエラーになってしまいます。結合セルをまず、解除してから貼り付けようと思ったのですが、うまくいかず、困っています。 コピー先の結合状態は、7行目から、列A:C、列D:E、列F:H と、3列になるように結合されています。結合されている行の終わりは、A:C(結合されている)列に「合計」の値が入っているセルの行、H列まで、3列になるよう結合されています。 解除する以外に、良い方法があれば是非教えていただきたいです。 よろしくお願いします。 Sub samplea() r1 = ActiveCell.Row r2 = r1 + Selection.Rows.Count - 1 Dim myRange As Range Dim s_no As String For i = r1 To r2 s_no = Cells(i, 2) Range(Cells(i, 4), Cells(i, 9)).Select Selection.Copy Sheets(Format(s_no)).Select Set myRange = Columns("a:c").Find(what:="合計") If myRange Is Nothing Then Debug.Print "Not Fount" Else myRange.Select Selection.End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False Sheets("入出金履歴").Select End If Next End Sub

  • VBA - セル解除

    コピーA列結合セルを解除して、解除した行にすべてに「OK」と入れたいのですがうまくいきません。 アドバイスをお願い致します。 Dim i, Addr Worksheets("Sheet1").Range("A:A").Copy With Worksheets("Sheet2") .Range("A1").PasteSpecial . . If .Cells(i, 1).MergeCells Then Addr = .Cells(i, 1).MergeArea.Address .Cells(i, 1).UnMerge .Cells(i, 1)(Addr) = "OK" '←ここがダメです。 End If . .

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

    マクロの記憶でのプロシージャを 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

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

    教えて下さい。 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

  • マクロでセルの結合の方法をお願いいたします

    沢山の方にお世話になり有難うございます 今回はセルの結合なのですが、一か所は出来るのですが、連続して出来ません 例えば A1とA2を結合次にB1とB2、C1とC2を結合出来るように同じ式の中で作りたいと思っています。( )の中の番地を変えて複数作るしか無いのでしょうか Sub テスト() Dim range1 As Range Set range1 = Range("A1:A2")  (この後ろにB1:B2を追加したいのですが、方法をお願いします) range1.MergeCells = True End Sub XPでの方法もお願いいたします 以上宜しくお願いいたします

専門家に質問してみよう