Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13988 / 76734 ←次へ | 前へ→

【68246】Re:マクロの高速化
発言  SK63  - 11/2/17(木) 12:49 -

引用なし
パスワード
   ▼VBA勉強中 さん:
>
>作成し、動作も問題ありませんでしたが、
>2000行といったデータ範囲になるとかなりの時間がかかります。
>以下のコード部分を改善し、マクロを高速化することは可能でしょうか?
>※画面更新(ScreenUpdating)をオフにしてもあまり時間は短縮できませんでした。

Range("J32").Selectよりは、
Range("J32").FormulaArray ="=INDIRECT(ADDRESS(ROW(),MAX(IF(LEN(RC11:RC15),COLUMN(RC11:RC15)))))"


If Range("L32") = "A" Or Range("L32") = "A" Or Range("L32") = "" Then 
は、重複している????

イベントとシート再計算をFALSEにする。

比較対象がL~O32なので、一括で配列に入れて判定する。
Dim B as variamt
B = Cells(32, 12).Resize(1, 4).Value

この当たりでしょうか??
>
>-------------------------------------------------------------------
>Worksheets("追加シート").                       
>Selection.FormulaArray ="=INDIRECT(ADDRESS(ROW(),MAX(IF(LEN(RC11:RC15),COLUMN(RC11:RC15)))))"         
>   If Range("O32") = "A" Or Range("O32") = "B" Or Range("O32") = "" Then     
>    Selection.FormulaArray ="=INDIRECT(ADDRESS(ROW(),MAX(IF(LEN(RC11:RC14),COLUMN(RC11:RC14)))))"       
>    If Range("N32") = "A" Or Range("N32") = "Aき" Or Range("N32") = "" Then    
>      Selection.FormulaArray ="=INDIRECT(ADDRESS(ROW(),MAX(IF(LEN(RC11:RC13),COLUMN(RC11:RC13)))))"     
>      If Range("M32") = "A" Or Range("M32") = "A" Or Range("M32") = "" Then  
>       Selection.FormulaArray ="=INDIRECT(ADDRESS(ROW(),MAX(IF(LEN(RC11:RC12),COLUMN(RC11:RC12)))))"    
>       If Range("L32") = "A" Or Range("L32") = "A" Or Range("L32") = "" Then 
>         Selection.FormulaArray ="=INDIRECT(ADDRESS(ROW(),MAX(IF(LEN(RC11:RC11),COLUMN(RC11:RC11)))))"  
>       End If
>      End If
>    End If
>   End If

1 hits

【68244】マクロの高速化 VBA勉強中 11/2/17(木) 11:19 質問
【68246】Re:マクロの高速化 SK63 11/2/17(木) 12:49 発言

13988 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free