• ベストアンサー

For文によるセル結合について

A1:C1~G1:I1をFor文を使ってセル結合したいのですが 何故かうまく動きません。 For x = 1 to 9 step 3 Range("Cells(x,1):Cells(x+2,1)").Merge Next で試したのですがデバックエラーになり。 For x = 1 to 9 step 3 Range("x&1":"x+2&1").Merge Next でもエラーでした。 本にもCellを両方動かすサンプルが無くて困ってます。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

> With ActiveSheetは必須なのでしょうか。 動かない訳ではないのですが、明示的に指定する事を私は推奨します。 Cellsの前のピリオドが、ActiveSheetのCellsプロパティである事を表します。 With を使わないならこうなります。 Activesheet.Range(Activesheet.Cells(1, x), Activesheet.Cells(1, x + 2)).Merge ちなみに With で括っておいて Worksheet(S2).Range(.Cells(x, 1), .Cells(x + 2, 1)).Merge ではダメです。 アクティブシートの事なので単純に実行前にアクティブにする S2 = "Sheet2" Worksheets(S2).Activate With Activesheet  For x = 1 To 9 Step 3    .Range(.Cells(1, x), .Cells(1, x + 2)).Merge  Next End With 又は直接 With で指定する S2 = "Sheet2" With Worksheets(S2)  For x = 1 To 9 Step 3    .Range(.Cells(1, x), .Cells(1, x + 2)).Merge  Next End With

newone
質問者

お礼

ありがとうございます。 なんか解決できそうです。かなり助かりました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

"Cells(x,1):Cells(x+2,1)" が引数としておかしいのです。 With ActiveSheet  For x = 1 To 9 Step 3    .Range(.Cells(x, 1), .Cells(x + 2, 1)).Merge  Next End With Cellsの行列指定が違うので、そのまま直すと A1:A3、A4:A6、A7:A9を結合するけど。

newone
質問者

補足

ありがとうございます。 Range(.Cells(x, 1), .Cells(x + 2, 1)).Merge だとA1:A3、A4;A6になっちゃうのですか(゜o゜) 横方向に結合したいのですが、 Range(.Cells(1, x), .Cells(1, x+2)).Merge でいいですかね。 あと、With ActiveSheetは必須なのでしょうか。 実は違うシート(sheet2)の行を結合させたいと考えてます。 With ActiveSheet  For x = 1 To 9 Step 3    Worksheet(S2).Range(.Cells(x, 1), .Cells(x + 2, 1)).Merge  Next End With てな感じでよろしですかね

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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 良い方法をご伝授宜しくお願いいたします

  • 行方向の同じ値のセルを結合するマクロ

    ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。 どうぞよろしくお願いいたします。 Sub セル結合() Dim r As Integer '行数 Dim i As Integer 'カウンタ r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1 Application.DisplayAlerts = False For i = 1 To r Cells(i, 1).Activate '項目の一つ下のセルをアクティブに If ActiveCell.Value = ActiveCell.Offset(1).Value Then Range(ActiveCell, ActiveCell.Offset(1)).Merge End If Next Application.DisplayAlerts = True 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を作成、というわけにもいきません。 動作時間が早くなる組み方ありましたら、よろしくお願いします。

  • 結合セルのデータ消去でエラーになります。どのようにすればいいでしょうか?

    Range(”A1:A6”)にデータが入っていますが、そのうちA3、A4、A5セルは 結合されています。Range(”A1:A6”)のデータをクリアするために以下 コーディングをしましたが、結合セルの先頭でエラー(実行時エラー 1004)に なってしまいます。 結合セルのデータクリアはどのようにすればいいのでしょうか。 お分かりの方よろしくご教示ください。 Sub Sample() Dim i As Long For i = 1 To 6 Cells(i, 1).ClearContents Next i End Sub

  • for文の使い方

    for文の中にif文を入れて使いたいのですが「Nextに対するforがありません」となりエラーが出てしまいます。どうしたらよいのでしょうか? If Option1.Value = True Then For i = 2 To 10  If xlSheet.Cells(i, 2).Value > 10 Then Form2.List1.AddItem xlSheet.Cells(i, 1) Next i End If End If

  • [VBA] for文の3次元ループ

    for文の3次元ループがうまく働いてくれません。 8通り(2x2x2)の組み合わせ表示を期待しましたが2通り(y1のみ)のみでループが終わってしまいます。エラーなどはでません。何が原因なのか分かりません。ご指導お願いします。 Public x1 As Single, y1 As Single, z1 As Single Sub Start1() i=1 For x1 = 0.3 To 0.4 Step 0.1 For y1 = 0.5 To 0.6 Step 0.1 For z1 = 0.4 To 0.5 Step 0.1 Cells(i, 1) = x1 Cells(i, 2) = y1 Cells(i, 3) = z1 i=i+1 Next z1 Next y1 Next x1 End Sub

  • セルを結合するマクロ

    マクロ初心者です。 Aセルをブランク領域で選択してマクロを実行しますとセルが結合します。 最後の空白がどこまでかは、何か指定がないといけないので、仮にエンドと名付けます。 このコードはA列のみです。A列からM列またはL列までと指定するにはどうすれば良いですか? ご教鞭をお願いします。 Sub test() Set Rng = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)) Set blanks = Rng.SpecialCells(xlCellTypeBlanks) For Each ar In blanks.Areas Union(ar(1).Offset(-1), ar).Merge Next Cells(Rows.Count, 1).End(xlUp).ClearContents End Sub

  • 【vba】複数のセルをfor文で選択したい

    vbaを独学で学んでおります。 質問内容は、 for文で条件に合ったセルを複数選択するにはどうすればいいのかというものです。 下のプログラムを作ってみたんですが、ループする回数がある一定の数を超えるとエラーが起こります。rangeオブジェクトにつかえる文字列の長さは、255文字までだとかなんとかだそうです。 Public Sub test() Dim str As String Dim i As Integer str = Cells(1, 1).Address For i = 2 To 50 str = str & "," & Cells(i, i).Address Next Range(str).Select End Sub さらに、次のプログラム使っても、256個ぐらいしかセルが選択できません。(これも何かの上限?) Public Sub test2() On Error GoTo エラー Dim r As Range Dim i As Integer Set r = Cells(1, 1) For i = 2 To 300 Set r = Union(r, Cells(i, i)) Next r.Select エラー: r.Select MsgBox ("256個しか選べませんでした") End Sub もっと、無制限に、たくさんのセルを選択できるようにしたいのですが、何か手はないでしょうか? ご教授お願いします。

  • 結合セル解除

    補足情報の追加書き込みがわかりませんので何度もトビを起こしいます。 申し訳ございません。 ↓例で、 G列結合セルを解除して、解除した行にすべてに"●"と入れたいのですがコピーできません。。 ご意見をいただけませんか? ------------ Option Explicit Sub Sample() Dim nRow, i, Addr, tmp Worksheets("Sheet1").Range("D:E,K:K,V:Y,AF:AM").Copy With Worksheets("sheet2") 'Y列も"sheet2"にコピー(G列) .Range("A1").PasteSpecial Paste:=xlPasteValues nRow = .Cells(Rows.Count, 1).End(xlUp).Row 'データのある最終行 For i = 5 To nRow If .Cells(i, 2) = "" Then .Cells(i, 2) = .Cells(i - 1, 2) 'B列 If .Cells(i, 4) = "" Then .Cells(i, 4) = .Cells(i - 1, 4) 'D列 Next i 'Y列("sheet2"のG列)のデータ分行を追加 For i = nRow To 4 Step -1 'Y列("sheet2"のG列)にデータがあるか If .Cells(i, 7) <> "" Then tmp = .Cells(i, 7) '-------------ここがうまくいきません。 'G列結合セルを解除して対象行にすべて「OK」と入れる。 If .Cells(i, 7).MergeCells Then Addr = .Cells(i, 7).MergeArea.Address .Cells(i, 7).UnMerge .Range(Addr) = "●" End If '------------ここがうまくいきません。 .Rows(i).Copy .Rows(i).Insert .Cells(i + 1, 3) = "-" .Cells(i + 1, 6) = tmp '.Cells(i, 7) = "●" .Cells(i + 1, 7) = "★" End If Next i 'Y列("sheet2"のG列)の最後尾列(Q列)への移動 .Columns(7).Cut .Columns(17).Insert End With End Sub

  • このマクロ、どこがおかしいですか?

    i5とj5のセルの文字が同じ場合はセル同士を結合して一つ下の行へ行き、i5とj5のセルに何も書かれていないときはそのまま一つ下の列へ行き、行った先のセルでも同じように処理(i6とj6のセルの文字が同じ場合はセル同士を結合して一つ下の行へ行き、i6とj6のセルに何も書かれていないときはそのまま一つ下の列へ行き)を繰り返し、と言うことをi33とj33のセルまで続けたいと思っています。 Sub よろしくお願いします() Dim i As Integer For i = 5 To 33 Cells(i, 9).Select If Cells(i, 9).Value = Cells(i, 10).Value Then Range(Cells(i, 9), Cells(i, 10)).Merge Selection.Offset(i + 1).Select ElseIf Cells(i, 9).Value = "" Then Selection.Offset(i + 1).Select Next i End If End Sub と書いたのですが、『Nextに対応するForがありません』と言われてしまいます。どうすれば思い通りにできるでしょうか? 極めて初心者で、伝わりにくい点があるかもしれません。よろしくお願いします。