「結合されたセルの一部を変更することはできません」と言うメッセージイベントで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
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.4
- 回答日時:
No2です
そうですか
>メッセージが出るタイミングで実行するにはどう…
プログラムを同時に実行することは出来ないものと考えております。
エラーメッセージ「結合されたセルの一部を変更することはできません」は、
コピーを試みた。
が、出来なかった。
メッセージでお知らせ。
の順を踏んでいると考えております。
おやりになりたい作業マクロはメッセージの出る前でしょうか、あとでしょうか?
前者の場合でしたら、セルのプロパティがどうなっているのかを調べてから、作業することになると思われます。
私は後者の場合で考えました。もっとも、私が添えたMsgboxは、マクロ実行で何も結果が確認できないのはどうかと考えて付けたものでございますが、見方を変えればMsgboxがエラーメッセージの表示と変わらないと考えます。その場合、Callの行は削除になり、MsgboxにSetステートメントを用いて次のマクロをご用意されるといいかと存じます。
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.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
回答ありがとうございます。
通常のカット&ペーストの動作に準じた動きを想定して
いましたが、割り切って考えると、この簡単なマクロで十分ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでセルをクリックする...
-
VBAでの SendKeysの変数指定方法
-
(エクセルVBA)セルを左クリッ...
-
セルをクリックしたら色を変え...
-
マクロのデータ削除
-
【VBA】アクティブセルだけ背景...
-
Excelでプルダウンからフィルタ...
-
VBA Rangeの足し算
-
excel マクロでの特殊文字入力方法
-
エクセル:セルの色のコード番...
-
Excel VBA:フォーム←→セルのア...
-
Excel VBA で色付きのセルの値...
-
【マクロ】1つのセルから結合...
-
「段」と「行」の違いがよくわ...
-
B列の最終行までA列をオート...
-
VBAマクロ実行時エラーの修正に...
-
マクロの「SaveAs」でエラーが...
-
あああ..ああい..ああう とい...
-
Excelで数字を入れたら対応する...
-
特定の文字がある行以外を削除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaで指定したセルより下の行を...
-
Excel VBA:フォーム←→セルのア...
-
Excelマクロ セルを行頭に移動
-
VBAでの SendKeysの変数指定方法
-
エクセルでセルをクリックする...
-
ファイルサーバー上のexcelファ...
-
マクロのデータ削除
-
エクセルマクロで「セルのサイ...
-
セルをクリックしたら色を変え...
-
【VBA】アクティブセルだけ背景...
-
Excelでプルダウンからフィルタ...
-
Excel VBA で色付きのセルの値...
-
ExcelVBA コンボボックスに入力...
-
ダブルクリックでセルに色をつ...
-
IF関数で違う値もTRUEになる
-
VBA Rangeの足し算
-
エクセル:セルの色のコード番...
-
【マクロ】1つのセルから結合...
-
excel マクロでの特殊文字入力方法
-
Excelで数値の変化をカウントし...
おすすめ情報