- ベストアンサー
結合されたセルの移動 VBA
「結合されたセルの一部を変更することはできません」と言うメッセージイベントでVBAを実行するにはどうしたらよいでしょうか? 結合されたセルあるいは複数の結合されたセルを選んで移動する場合、移動先が自分のセルに重なると、「結合されたセルの一部を変更することはできません」と言うメッセージが現れます。 これを回避するには一旦何も無い離れたところに移動し、それから再び目的の場所に移動します。 私の技能では以下のようなマクロになると思います。 最初に元の結合セルを選び、場所を覚えるマクロを実行しする。 次に移動先を指定し、「一旦何も無い離れたところに移動し、それから再び目的の場所に移動」するマクロを実行します。 これをワン・アクションで、「結合されたセルの一部を変更することはできません」と言うメッセージが出るタイミングで実行するにはどうしたらよいでしょうか。 よろしくお願い申し上げます。
- みんなの回答 (6)
- 専門家の回答
お礼
回答ありがとうございます。 通常のカット&ペーストの動作に準じた動きを想定して いましたが、割り切って考えると、この簡単なマクロで十分ですね。
補足
最初に選択してから、実行しない場合もあり得るので「Selection.Cut Destination:=Range("A50000")」は二つ目のマクロに入れました。 移動先が元のセルの底辺より低い位置の場合、移動先の左上ではなく左したとすることで、どこへでも移動できるようにしました。 皆様のおかげでなんとか実用的なマクロを作ることができました。 ありがとうございました。 Option Explicit Public Pr1 As Long Public Pr2 As Long Public Pr3 As Long Public Pc1 As Long Public Pc2 As Long Public Pc3 As Long Sub 場所の記憶() Pr1 = Selection.Row Pr2 = Selection.Rows.Count Pc1 = Selection.Column Pc2 = Selection.Columns.Count Pr3 = Pr1 + Pr2 - 1 Pc3 = Pc1 + Pc2 - 1 Selection.Copy 'ここではコピーしないが、選択範囲を表示する為に行う End Sub Sub 特殊貼り付け() Dim r1 As Long Dim r2 As Long Dim r3 As Long Dim c1 As Long Dim c2 As Long Dim c3 As Long If (Pr1 = 0) Or (Pr2 = 0) Or (Pc1 = 0) Or (Pc2 = 0) Then MsgBox "先に位置の指定を行ってください" Exit Sub End If r1 = Selection.Row c1 = Selection.Column If r1 > Pr3 Then r3 = r1 r1 = r3 - Pr2 + 1 Else r3 = r1 + Pr2 - 1 End If c3 = c1 + Pc2 - 1 Range(Cells(Pr1, Pc1), Cells(Pr3, Pc3)).Select Selection.Cut Destination:=Range("A50000") Range(Cells(r1, c1), Cells(r3, c3)).Select Range("A50000").CurrentRegion.Cut Destination:=ActiveCell Application.CutCopyMode = False End Sub