• ベストアンサー

マクロで連続結合

横に並ぶ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