- ベストアンサー
マクロで連続結合
横に並ぶ3つ以上のセルを 縦に続けて結合したいのですが、 Sub Macro1() Selection.MergeCells = True Selection.Offset(1).Select End Sub これだと、最初に結合し、下にずらした時に 選択するセルが1つになってしまいます。 横に並ぶセルの数は一定なので、 最初に選択していた数だけ、 下にずらした時も 選択しているようにしたいです。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでも良いかも。 Sub Macro1() Selection.Offset(1).Select Selection.Offset(-1).MergeCells = True End Sub
その他の回答 (2)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> の間に 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)
こんにちは。 こんな感じで Set ステートメントでオブジェクト変数に元のセル領域を 退避しておき、先に Select してから、セルを連結するとか。 Sub Macro1() Dim rngC As Range Set rngC = Selection Selection.Offset(1).Select rngC.MergeCells = True Set rngC = Nothing End Sub
補足
ありがとうございます。出来ました。 でもなぜ、 Selection.Offset(1).Select が先なんですか? Selection. と .MergeCells = True の間に Offset(-1) を入れる意味は?