• ベストアンサー

マクロで連続結合

横に並ぶ3つ以上のセルを 縦に続けて結合したいのですが、 Sub Macro1() Selection.MergeCells = True Selection.Offset(1).Select End Sub これだと、最初に結合し、下にずらした時に 選択するセルが1つになってしまいます。 横に並ぶセルの数は一定なので、 最初に選択していた数だけ、 下にずらした時も 選択しているようにしたいです。 お願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんな感じでも良いかも。 Sub Macro1()   Selection.Offset(1).Select   Selection.Offset(-1).MergeCells = True End Sub

fa46
質問者

補足

ありがとうございます。出来ました。 でもなぜ、 Selection.Offset(1).Select が先なんですか? Selection. と .MergeCells = True の間に Offset(-1) を入れる意味は?

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

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

> の間に Offset(-1) を入れる意味は? Merge メソッド、MergeCells プロパティーのあとで、Selection.Offset の Select が上手くいかないのは VBA の仕様だと思います。うまく説明 できませんが、結合セル絡みではこのような事例が多いです。 ひょっとしたらバグなのかもしれません。 しかし、ユーザーとしては何とかそれを回避するためのコードを書かざる を得ないわけで... うまくいかないなら、失敗の原因となるセル結合を後回しにする。先に OFFSET 後のセルを SELECT し、結合すべき元のセルを更新された Selection の OFFSET で参照して Merge する... とまあ、非常にややこしいことをしてます。 参考までに SELECT を使わないで、 Sub Macro2()   R = Selection.Row   C = Selection.Column   X = 3   For i = R To R + 10     Range(Cells(i, C), Cells(i, C + X)).Merge   Next i End Sub と書いた方が分かり易いかもしれません。

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 こんな感じで Set ステートメントでオブジェクト変数に元のセル領域を 退避しておき、先に Select してから、セルを連結するとか。 Sub Macro1()   Dim rngC As Range   Set rngC = Selection   Selection.Offset(1).Select   rngC.MergeCells = True   Set rngC = Nothing End Sub

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

関連するQ&A

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

    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 などを使って一括で行う方法はありませんでしょうか? お願いします。

  • 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 ---------------------------------------------------------------------- 何卒宜しくお願い致します。

  • 任意の複数セルをマクロで選択し、コピーする方法

    またお世話になります。 エクセルで選択された項目だけを抜き出して、新たに並べ替え、印刷するマクロを作っていますが、任意のセルからその横のセル3つを選択することが出来ません。表のイメージとしては、   A   B   C 1 氏名 獲得 点数 2 田中  3  30点 3 中村  5  50点 4 高橋 5 近藤  1  10点 6 南   ・   ・   ・ の中からB列に数値が入っている行だけを別のところへコピペするというものです。 現在まで作ったマクロは、 Sub Macro01() Range("B1").Select Selection.End(xlDown).Offset(0, -3).Select ここに「田中 3 30点」の3つのセルを選択する方法 Selection.Copy  ’印刷用の一番下から入力されているセルのひとつ下を選択する Range("N22").Select Selection.End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,   SkipBlanks:= _ False, Transpose:=False この作業を繰り返しして、一定のところで止まるようにしたい。 End Sub です。 お返事よろしくお願いいたします。

  • excel マクロ

    Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.Offset(-1, 0).Range("A1:G1").Select Selection.Copy 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 長すぎるとエラーになってしまいますし、何回繰り返すかもランダムなので、↑の処理を、 結合されたセルがなくなるまで繰り返すという設定にしたいのですが、可能でしょうか? よろしくおねがいします。

  • エクセルで選択してるセルに決まった動作をマクロに

    いつもお世話になっております。 手動で選択したセルに対して決まった動作をさせたいのですが、マクロの記録では最初に選択したセル番地で動くことになるので困っています。 やりたいことは、例えばA列の5~6行目を選択して、そのセルの内容を文字区切りで横に展開したいのです。 これをマクロの記録では Sub Macro1() Range("A5:A7").Select Selection.TextToColumns Destination:=Range("A5"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _ :="\", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _ 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1)), TrailingMinusNumbers:=True End Sub となるのですが、この最初の行のRange("A5:A7”)Selectをその時に選んだセルで下のコードが実行されるようにしたいのですが。

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

    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がありません』と言われてしまいます。どうすれば思い通りにできるでしょうか? 極めて初心者で、伝わりにくい点があるかもしれません。よろしくお願いします。

  • セル結合と列挿入

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

  • アクティブセルの結合解除および再結合

    よろしくお願いします  任意のセルとその下のセルを結合しています。  R1C1形式でデーターを入れるときに、一旦結合を解いてデーター 入力後に再度結合させる。 ActiveCell.MergeCells = False ActiveCell.MergeCells = True で、実行したのですが、結合が解除されたままで再度結合することが できません。 再度結合する方法をお教えください。

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

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

専門家に質問してみよう