プロが教える店舗&オフィスのセキュリティ対策術

Excelを使用していてよく分からない現象に遭遇しました。
原因をご存じの方がいらっしゃいましたら教えてください。

とりあえず業務上での問題は、後述の「確認した内容2-3」で解決しましたので
興味からの質問となります。
また異なるバージョンのExcelでも同様かも知りたいです。


環境
Windows7(32bit) 月例のセキュリティパッチ適用済
Office2010のExcel


現象(再現率100%)
ブック間でセルの値のコピー後、ペーストができない
(セルを右クリックメニューで貼り付けのオプションがグレーになっている)

再現手順
1. a.xlsxおよびb.xlsmを新規作成
2. a.xlsxのSheet1上のA1:A10に適当な数値を入れ保存終了
3. b.xlsmのThisWorkBookモジュールに以下のマクロを記述し保存終了
-----
Private Sub Workbook_Activate()
  With Worksheets("Sheet1")
    .Activate
    .Range("A1:A10").ClearContents
  End With
End Sub
-----
4. a.xlsxおよびb.xlsmを開きウィンドウの整列で並べる
 ・両ブックともSheet1が選択されている)
5. a.xlsxのSheet1のA1:A10をコピーし、b.xlsmの同位置にペーストができない
 ・セルを右クリックメニューで貼り付けのオプションがグレーになっている
 ・マクロによるセルの値クリアは行われている


確認した内容
1. コピー後、a.xlsxを閉じると、b.xlsmへ貼り付けはできる

2-1. b.xlsmのマクロを削除した場合はペーストできる
2-2. 同マクロの .Range("A1:A10").ClearContents 行を削除した場合はペーストできる
2-3. 同行を .Range("A1:A10").Value = "" に変更した場合はペーストできる

Workbook_Activateイベントの処理中にRange.ClearContentsが存在するとNGの様です。

質問者からの補足コメント

  • 自宅のWin10(64bit)/Excel2016でも同様でした。
    ただし、「確認した内容1」ではテキスト値のみ張り付け可能でセルそのもの、式の貼り付けなどはメニューの選択肢として登場しませんでした。

      補足日時:2018/08/25 04:10

A 回答 (3件)

こんにちは。



回答の趣旨が間違っていましたら、スルーしてください。

◎ブック間でセルの値のコピー後、ペーストができない

かなり前から、この件は気づいていました。バージョンは2007から上は、ずっと変わらないと思います。Copyモード(点線で囲まれている状態)が消えてしまう原因は、ご質問上で掲げている内容だと思いますが、これは、別のシート(b.xlsmのSheet2)でも同様に起こります。

対処法としては、
クイックアクセスツールバーに、「デザインモード」のアイコンで、これをクリツクして、「デザインモード」にするというのは、マクロ自体を加工しないでできる方法です。
しかし、これは、B.xlsm ブック上でないと、デザインモードがオフになりません。
あまり良いアイデアではありませんよね。

ただ、クリップボードのペインを表示してみると、クリップボードにはコピーしたデータが残っていますから、これを再利用すればよいのですが、今の所、マクロからでは操作は分かりません。

クリツプボードオブジェクトを使う方法もありますが、これは多少の制限があります。フォーマットなどはコピー&ペーストされません。
今回試したコードです。(下記参照)

私自身の場合、もうずいぶん前にあきらめてしまいましたが、今回は、複雑でないなら、まあまあだとは思いますが……。

下記のコードは、クリップボードオブジェクトは、共有すればよいのかもしれませんが、今の段階では別々にしました。

'//ThisWorkbook モジュール
Dim cbDat As Variant
Const CLSID As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
Private Sub Workbook_Activate()
Dim rng As Range
Dim CBf, CB
Application.EnableEvents = False
CBf = Application.ClipboardFormats
If CBf(1) = False And Application.CutCopyMode = xlCopy Then
 Set CB = CreateObject("new:" & CLSID)
 CB.GetFromClipboard
 cbDat = CB.GetText
End If
With Worksheets("Sheet1")
 .Activate
 .Range("A1:A10").ClearContents
End With
'-------------
If CBf(1) = False Then
 Application.OnKey "^v", "ThisWorkbook.keyPaste" 'ショートカットを設定
  Set CB = Nothing
End If
Application.EnableEvents = True
End Sub

Sub keyPaste() 'マクロによる貼付けとショートカット解除
Dim CB As Object
If IsEmpty(cbDat) = False Then
 Set CB = CreateObject("new:" & CLSID)
 CB.SetText cbDat
 CB.PutInClipboard
 ActiveSheet.Paste
End If
Application.OnKey "^v"
Set CB = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ありがとう

趣旨に沿ったご回答をいただきまして、ありがとうございました。

2007以降で発生とのこと、補足でも書きましたが自宅の2016でも同じでした。
つまりExcelのバグということなのかな?

「デザインモード」にする方法、2016の環境でも使用できました、来週2010の環境でも試してみます。
ただ仰るとおり解決方法をしては現実的ではありませんね。

ご提示いただいたコードも2016の環境で動作しました。
あまり目にすることの無い知識をご提示いただき、いつも勉強させていただいています。
今後ともよろしくお願いいたしますね。

お礼日時:2018/08/25 04:29

貼り付け時に、形式を選択して、テキストを指定してください。


計算式が入っていると、そのまま貼り付けでは、計算式がコピーされます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2018/08/27 02:54

VBAと同じ作業を手作業でやってみて出来ますか?


VBAのコピー後にブレイクして、貼り付け出来ますか?
いろいろやってみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2018/08/27 02:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!