
「結合されたセルの一部を変更することはできません」と言うメッセージイベントでVBAを実行するにはどうしたらよいでしょうか?
結合されたセルあるいは複数の結合されたセルを選んで移動する場合、移動先が自分のセルに重なると、「結合されたセルの一部を変更することはできません」と言うメッセージが現れます。
これを回避するには一旦何も無い離れたところに移動し、それから再び目的の場所に移動します。
私の技能では以下のようなマクロになると思います。
最初に元の結合セルを選び、場所を覚えるマクロを実行しする。
次に移動先を指定し、「一旦何も無い離れたところに移動し、それから再び目的の場所に移動」するマクロを実行します。
これをワン・アクションで、「結合されたセルの一部を変更することはできません」と言うメッセージが出るタイミングで実行するにはどうしたらよいでしょうか。
よろしくお願い申し上げます。
No.6ベストアンサー
- 回答日時:
未使用のセルに移して処理するのならエラー云々は関係ないのでは?
で、簡単なサンプルを。
一時的に利用する未使用セルを質問と同じ A50000以降とする。
-------------------------------------------------
'(Ctrl+a)
Sub 場所の記憶()
Selection.Cut Destination:=Range("A50000")
End Sub
---------------------------------------------------------
'(Ctrl+b)
Sub 特殊貼り付け()
Range("A50000").CurrentRegion.Cut Destination:=ActiveCell
End Sub
-------------------------------------------------
(1)場所の記憶「Ctl+a」で無条件に選択範囲を使われていないA50000からに移動
(2)次に移動先のセルを選択
(3)特殊貼り付け「Ctl+b」でActiveCellに貼り付け
以上。
この回答への補足
最初に選択してから、実行しない場合もあり得るので「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
回答ありがとうございます。
通常のカット&ペーストの動作に準じた動きを想定して
いましたが、割り切って考えると、この簡単なマクロで十分ですね。
No.5
- 回答日時:
#3です。
ご質問の趣旨を私が誤解ー>使えない ということのようですが、
あるセルを選択、または注目したとき、被結合セルの判別ができれば
、その際あるモジュールを実行するなり何なりできると思って、
コードの有効性をテストしてコードまで挙げました。
そのアイデアは(1)MergeCellsプロパティがTrueでかつ
(2)基準セルが自分の番地と違うという判定です。
これでは、質問のケースでは使えないの課も知れませんが、セルの
選択をする場合(SelectionChange)などなら
選択した瞬間に上記判別に入れば、役立つような気がしてました。
役立たないのなら、残念ですが、#3は無視してください。
>最初に元の結合セルを選び、場所を覚えるマクロを実行しする。
こういう「覚えておく」式のロジックは一般に避けたほうが良いと思う。
>次に移動先を指定し、「一旦何も無い離れたところに移動し、それから再び目的の場所に移動」するマクロを実行します。
これをワン・アクションで、「結合されたセルの一部を変更することはできません」と言うメッセージが出るタイミングで実行するにはどうしたらよいでしょうか
この意味は、被結合セルを指定されたら、結合セルを強制的に選択してしまうということですか?表現がわかりにくい。もう一歩自分のプログラムロジックは置いておいて、したいケースを文章に表現したらどうですか。
この回答への補足
どうもマウスだけのワン・アクションでは無理なような気がして、以下のVBAを作ってみました。
Sub 場所の記憶()にCtr-aを、Sub 特殊貼り付け()にはCtr-bを割付けました。
元の場所を選んでCtr-aで記憶させ、移動先を選らんでCtr-bを押して貼り付けることができました。
但し上方方向だけで、下方方向は選択した場所が結合セルの右上になっているので重ねることはできません。左下のセルが先頭になるような貼り付けマクロをもう一つ作ればできると思います。
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
r1 = Selection.Row
c1 = Selection.Column
r3 = r1 + Pr2 - 1
c3 = c1 + Pc2 - 1
Range(Cells(Pr1, Pc1), Cells(Pr3, Pc3)).Select
Selection.Cut
Cells(50000, 1).Select '多分ここら辺は使われていないだろう
ActiveSheet.Paste
If Cells(r1, c1).MergeCells Then
Cells(r1, c1).UnMerge
End If
If Cells(r1, c3).MergeCells Then
Cells(r1, c3).UnMerge
End If
If Cells(r3, c1).MergeCells Then
Cells(r3, c1).UnMerge
End If
If Cells(r3, c3).MergeCells Then
Cells(r3, c3).UnMerge
End If
Cells(50000, 1).Select
Selection.Cut
Range(Cells(r1, c1), Cells(r3, c3)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
No.4
- 回答日時:
No2です
そうですか
>メッセージが出るタイミングで実行するにはどう…
プログラムを同時に実行することは出来ないものと考えております。
エラーメッセージ「結合されたセルの一部を変更することはできません」は、
コピーを試みた。
が、出来なかった。
メッセージでお知らせ。
の順を踏んでいると考えております。
おやりになりたい作業マクロはメッセージの出る前でしょうか、あとでしょうか?
前者の場合でしたら、セルのプロパティがどうなっているのかを調べてから、作業することになると思われます。
私は後者の場合で考えました。もっとも、私が添えたMsgboxは、マクロ実行で何も結果が確認できないのはどうかと考えて付けたものでございますが、見方を変えればMsgboxがエラーメッセージの表示と変わらないと考えます。その場合、Callの行は削除になり、MsgboxにSetステートメントを用いて次のマクロをご用意されるといいかと存じます。
No.3
- 回答日時:
A1:A10でA3:A5とA8:A9をセル結合して、下記を実行すると、被併合セルである、4,5および9が表示された。
これを生かせないでしょうか。Sub merg1()
For i = 1 To 10
Cells(i, "A").Activate
If Cells(i, "A").MergeCells = True And ActiveCell.Address <> Cells(i, "A").Address Then
MsgBox i
End If
Next i
End Sub
がエラーなく動きました。
被結合セルのプロパテイと結合セル(基準セル)プロパテイがVBAにないみたいなので、苦肉のアイデアです。
ーーー
既出回答のエラートラップも良いと思います。
回答ありがとうございます。
ちょっと質問が言葉足らずだったようです。
「結合されたセルの一部を変更することはできません」のエラーを回避することではなく、このエラーが出るべきタイミングで特定のマクロのを自動実行させる方法をお聞きしたいのです。
具体的には、エクセルシートで結合されているセルをマウスで選択し、ドラッグし、ドラッグ先が自分自身(又は他の結合セルでもいいんですが)に被っていて、通常は「結合されたセルの一部を変更することはできません」とメッセージが出るところで、自動的に任意のマクロを実行する、と言うことです。
No.2
- 回答日時:
こんばんわ
エラー番号で処理しようにも、1007が出る前に
マクロの実行エラー1004が出ますね。それでもいいんですけどね。
そこで、エラーメッセージで条件分けしてみました。カッコ悪いですけれど。
私のPCでは動きます。
以下コードです。
例では、セルA6:C6を結合して、試しました。
Sub 私の過ち()
On Error Resume Next
'ココにお好みのコピーのコードを書いてください
ActiveSheetRange("A1:B1").Copy Destination:=Range("A6")
If Err.Description = _
"結合されたセルの一部を変更することはできません。" Then
'Call 次にやりたいサブルーチン
MsgBox "迎春"
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Excel(エクセル) 指定値をマクロで検索&シート移動 2 2022/04/27 23:29
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 14:27
- Excel(エクセル) エクセルVBA 任意のセルの選択時、指定のセルの値を表示 1 2023/04/21 08:13
- Excel(エクセル) Excelのマクロについて:コピー→セル移動→貼り付け 3 2022/04/17 20:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 12:05
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbaで指定したセルより下の行を...
-
結合セル内の値を、結合解除後...
-
excel マクロでの特殊文字入力方法
-
VBAでの SendKeysの変数指定方法
-
Excelマクロ セルを行頭に移動
-
選択されたセルが赤くなる方法...
-
セルをクリックしたら色を変え...
-
マクロのデータ削除
-
エクセルでセルをクリックする...
-
Excel VBA:フォーム←→セルのア...
-
【マクロ】1つのセルから結合...
-
【マクロ】実行時エラー '424':...
-
「段」と「行」の違いがよくわ...
-
【VBA】2つのシートの値を比較...
-
VBA シートをコピーする際に Co...
-
エクセルで離れた列を選択して...
-
Excel UserForm の表示位置
-
特定の文字がある行以外を削除...
-
マクロの「SaveAs」でエラーが...
-
Excelで、あるセルの値に応じて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaで指定したセルより下の行を...
-
エクセルでセルをクリックする...
-
VBAでの SendKeysの変数指定方法
-
Excel VBA:フォーム←→セルのア...
-
エクセルマクロで「セルのサイ...
-
Excelマクロ セルを行頭に移動
-
マクロのデータ削除
-
セルをクリックしたら色を変え...
-
IF関数で違う値もTRUEになる
-
Excel VBA で色付きのセルの値...
-
excel マクロでの特殊文字入力方法
-
【EXCEL-VBA】特定の値の入った...
-
(エクセルVBA)セルを左クリッ...
-
ロックされていないセル内をクリア
-
ダブルクリックでセルに色をつ...
-
ファイルサーバー上のexcelファ...
-
Excelでプルダウンからフィルタ...
-
VBA Rangeの足し算
-
【VBA】アクティブセルだけ背景...
-
ExcelVBA コンボボックスに入力...
おすすめ情報