Excelのコピーペーストの罠

表題ですが自分が Excel を使う時に嫌な罠があります
VBAで1回は苦労するであろう、問題 以下サンプル
(動かないよ?見本だから)


Public Sub サンプル()
Dim SH1 As Worksheet, SH2 As Worksheet, LC As Long
Const B列 As Long = 2
 For LC = 1 To 50 Step 1
  Worksheets("テンプレ").Copy
  Set SH2 = ActiveSheet
  SH1.AutoFilter B列, "Criteria"
  SH1.AutoFilter.Copy SH2.Range("A1:BF300")
  Workbooks("作表").SaveAs ThisWorkbook.Path & "\ABC.xlsx", 51
  Workbooks("作表").Close True
 Next LC
End Sub

仕様の問題でクリップボードを使わざる得なかった時の話
上記の流れを行うと、ペースト処理が異常になる
1行実行のデバッグ中は発現しない(笑) いや笑えないけど


Sub サンプル2()
'①
 SH1.AutoFilter.Copy SH2.Range("A1:BF300")
 
'②
 SH1.AutoFilter.Copy
 SH1.Paste SH2.Range("A1:BF300")

'③
 SH1.AutoFilter.Copy
 DoEvents か Timerを使用する
 SH1.Paste SH2.Range("A1:BF300")

'④
Application.CutCopyMode = False
End Sub

①で処理が正常に終わるならラッキー
次は②を試す、駄目なら③を追加する、さらに④を追加で解決している事が殆どです。
コーディング側としては、クリップボード経由は嫌なんだよねぇ、理解して貰えないけど、変数に取り込んで一気に書き出しするのはそれが理由の一つだったりします。

この記事が気に入ったらサポートをしてみませんか?