• ベストアンサー

エクセルVBA/イベント発生でコピペ不能はなぜ?

シートに以下のマクロを設定すると、そのシート内ではコピーしたもののペーストが不能になります。 どうしてでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Interior.ColorIndex = 6 End Sub

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

現象だけ説明すれば、 セルを編集した瞬間に、Excel のコピーモードが解除されてしまうからです。 手動で作業しても同じ現象が起きますよ。 1. セル A1 に適当なものを入力してコピー。 (A1 の枠線が点滅) 2. セル C1 を選択 3. セル C1 の背景色を変える。(または C1 に何かを入力) (ここで A1 の枠線点滅が解除されてしまう) 「セルのコピー」は特殊なのでこうなります。 セルのコピーじゃなくてセルの中に入力されている「値」がクリップボードにコピーされていれば貼り付けは可能です。

merlionXX
質問者

お礼

早速ありがとうございます。 セルを編集するとコピーモードが解除されてしまうのですね、知りませんでした。 > セルの中に入力されている「値」がクリップボードにコピーされていれば貼り付けは可能です。 「値」をクリップボードにコピーするにはどうすればよいのですか?

その他の回答 (2)

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.3

こんにちは。 以下のようにすれば、質問に有るようなマクロを設定したシート上でもコピー&ペーストが可能になると思います。 ただし、=SUM(A1:A10)などの数式も値で貼り付いてしまいますが・・・ Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim myData As New DataObject Dim myTxt As String 'クリップボードが空の時のエラー回避 On Error Resume Next 'クリップボードの文字列を変数に退避 myData.GetFromClipboard myTxt = myData.GetText Target.Interior.ColorIndex = 6 '変数に退避した文字列をクリップボードに戻す。 myData.SetText myTxt myData.PutInClipboard End Sub UserFormを挿入するか、 Microsoft Forms 2.0 Object Libraryに参照設定して試してみてください。

merlionXX
質問者

お礼

ありがとうございます。 いろんなやりかたがありますね。勉強になります。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

CutCopyMode 中は動作しないようにするとか、、、 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Application.CutCopyMode = 0 Then    Target.Interior.ColorIndex = 6  End If End Sub

merlionXX
質問者

お礼

なるほど、こういう回避方法があるんですね、ありがとうございました。

関連するQ&A