まず、ExcelとVBAの使用経験は、学校で見たものに限定されていると言います。私はプログラミングの経験がありますが、他の言語で。
毎週入手するファイルがあります。このファイルの構造は常に同じです:ID、名前、日付、1から4までの値、関連性のないデータ。
このデータは、[すべて選択]ボタン(ワークシートの左上隅、MS Excel 2013のセル名の下にある小さな三角形)で選択され、別のデフォルトファイルにコピーされます。このファイルは、データを再加工して、に基づいて別のシートに表示およびフィルタリングします。 1-4の値と日付。
私の質問:データが貼り付けられている/貼り付けられていることを検出するにはどうすればよいですか? Worksheet.Changeイベントを試しましたが、貼り付けコマンド(CTRL + V)でChangeイベントがトリガーされません。また、データはどのようにコピーされますか?行ごと、セルごと(どちらの方向)、...を更新しますか?コピーコマンドを検出できたらデバッグすることで、最後の質問に対する答えを簡単に見つけることができますが、誰かが答えを知っているかどうかはわかりません。
これを行うための別の、より簡単な(またはより良い)方法はありますか?
必要に応じて、より多くのデータと情報を提供できます。
ご協力ありがとうございました。
編集:「...コピーされていますか?」本来の貼り付けに変更されました。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim UndoList As String
'~~> Get the undo List to capture the last action performed by user
UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)
'~~> Check if the last action was not a paste nor an autofill
If Left(UndoList, 5) = "Paste" Then
'Do stuff
End If
End Sub
これでうまくいきました。同様のものが必要で、リストのサイズを知っている人には、@ MaciejLosの回答も機能します。
Worksheet_Change上書きされない数式をセルに追加すると、イベントがその役割を果たします。データがA1セルに貼り付けられ、5列を占めているとします。したがって、以下の式を6.列と行1に入力します。
=COUNTBLANK(A1:A1048576)
これで、貼り付けイベントを処理/検出できるようになりました;)