(1) 実行がExcel2016で問題無く、Excel2019で超遅くなったケース
(1)不具合発生の概略

先月(2022/02/1)、PCを購入しExcel2019を入れたので、マクロが正常に動くか確認中です。
エラー発生等の問題は特にありません。しかし、株価解析ツールKIkabu(M)確認で、Excel2016で1銘柄解析が
6秒でしたが、Excel2019で実行では60秒と約10倍遅くなり、使用に耐えられない速度です。

遅くなった原因は、CopyメソッドでExcel2010・Excel2o16の約10倍時間が掛かる。Copyメソッド
を別の方法にVBAを組み替えたら、60秒から→15秒に短縮できました。

以下に、Copyメソッドを使わない方法の改善例をまとめました。

<追記>
上記のようにKIkabu(M)で、Excel2019で確認したら10倍遅くなったのは事実ですが、その原因はExcel2019の
問題では無く、新規購入のPCに入っていた、ESET セキュリティソフトが悪さをしていました。
ESET は、Copyメソッドが実行されるとウイルスチェックを実行しているようで、実行が遅くなって
いました。ESET セキュリティソフトを削除したら、実行速度は普通に戻りました。
この、Excel2019で超遅くなった項目は、原因はウイルスチェックが原因です。
以下のマクロ改善例、Excel2019が遅くなった事には直接関係ありませんが、掲載済であり残します。

例1 ツール(酒田チャート)のマクロ例 
縦方向の日別データを、選択行へ横方向にコピー
【改善前】
    Range(Cells(i, 3), Cells(i, 6)).Copy Range(Cells(rn, 13), Cells(rn, 16))
(変数[i]は行でi=3で、[rn]も行でrn=1では、A3〜A6の縦セルデータを、M1〜P1の横列にコピーした例)
 
 
【改善後】
   Range(Cells(rn, 13), Cells(rn, 16)).Value = Range(Cells(i, 3), Cells(i, 6)).Value
(Copyメソッドの場合は、計算式を含めコピーしますが、Valueは表示されている数値のを移動する)
 


例2 ツール(一目均衡チャート)マクロ例
MN列を数値化
【改善前】
    Range(Cells(4, 13), Cells(endr2, 14)).Copy
    Range("M4").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
   Range("M3").Select
   Application.CutCopyMode = False
(これは、コピーして、「貼り付けのオプション」の値(V)実行のマクロ化です)
 
【改善後】
    Range(Cells(4, 13), Cells(endr2, 14)).Value = Range(Cells(4, 13), Cells(endr2, 14)).Value
(Valueは表示されている値のみを移動する
 


例3 ツール(一目均衡チャート)マクロ例
JKL列を指定日数後へずらす(終値、転換線、基準線)
【改善前】
    Range(Cells(4, 10), Cells(endr1, 12)).Copy
    Cells(kzhi1, 10).Select
    ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
        IconFileName:=False
  Range(Cells(4, 10), Cells(kzhi1 - 1, 12)).ClearContents
(場所をズラシ終えた後、不要の元データ(kzhi1 - 1行)を消去しました)
 
【改善後】
ReDim dat(endr1, 3)
   dat = Range(Cells(4, 10), Cells(endr1, 12)).Value
         Range(Cells(kzhi1, 10), Cells(endr1, 12)).Value = dat
  Range(Cells(4, 10), Cells(kzhi1 - 1, 12)).ClearContents
(本例は、直接貼り付けでなく、データを一旦配列変数[dat]に保存し,それを場所を指定し貼り付けています)
(マクロ記載では省略してありますが、モジュール変数としてDim dat() As Variant を記述)
 


例4 ツール(鍋蓋足チャート)マクロ例
日付I列に表示  
【改善前】
    Range(Cells(3, 1), Cells(gyou, 1)).Select
    Selection.Copy
    Range("I3").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.NumberFormatLocal = "m/d;@"
(A列の日付をコピーして、I列に貼り付け、本例ではセルデータ全ての貼り付けです)
 
【改善後】
    Range(Cells(3, 9), Cells(gyou, 9)).Value = Range(Cells(3, 1), Cells(gyou, 1)).Value
    Range(Cells(3, 9), Cells(gyou, 9)).NumberFormatLocal = "m/d;@"
(改善前は、Selection.NumberFormatLocalですが、改善後は選択されていないので、Range設定が必要)
 


例5 ツール(鍋蓋足チャート)マクロ例
終値率で表示
【改善前】
    Range(Cells(4, 12), Cells(gyou, 12)).Formula = "=F4/$L$3"
    Range("G1").Select
    Range(Cells(4, 12), Cells(gyou, 12)).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("G1").Select
(L列の計算結果を、計算式を省き結果の数値で表示する)
 
【改善後】
Range(Cells(4, 12), Cells(gyou, 12)).Value = Range(Cells(4, 12), Cells(gyou, 12)).Value
(同じ場所への数値化ですが、Value実行で問題なし)
 



【HPへ】