質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

649閲覧

コードの処理速度を上げたい

amasan

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/06/16 07:24

編集2021/06/18 05:37

現状Excelで何枚かのシート上で複数処理をするマクロを組んでいます。
ボタンを4つとかに分けてそれぞれで処理しているのですが、時間が結構かかってしまいます。
もっと処理速度を上げる方法をご存じの方がいらっしゃったらご助言いただきたいです。
使用しているコードは以下になります。
①同じ番号の行を一つにするためのコード

VBA

1コード 2Sub ボタン5_Click() 3 4Dim oShIn As Object 5Set oShIn = ThisWorkbook.Sheets("シート1") 6Dim oShOut As Object 7Set oShOut = ThisWorkbook.Sheets("シート2") 8 9Dim iRow As Long 10iRow = oShIn.UsedRange.Rows.Count 11oShIn.Range("A3:A" & iRow).Copy 12oShOut.Range("A3").PasteSpecial Paste:=xlPasteValues 13 14oShOut.Range("A:A").RemoveDuplicates Columns:=Array(1) 15 16oShOut.Range("G3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 17 & ",シート2!$A3,シート1!$G$3:$G$" & iRow & ")" 18oShOut.Range("EY3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 19 & ",シート2!$A3,シート1!$EY$3:$EY$" & iRow & ")" 20oShOut.Range("EZ3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 21 & ",シート2!$A3,シート1!$EZ$3:$EZ$" & iRow & ")" 22oShOut.Range("FA3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 23 & ",シート2!$A3,シート1!$FA$3:$FA$" & iRow & ")" 24oShOut.Range("FB3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 25 & ",シート2!$A3,シート1!$FB$3:$FB$" & iRow & ")" 26oShOut.Range("FC3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 27 & ",シート2!$A3,シート1!$FC$3:$FC$" & iRow & ")" 28oShOut.Range("FD3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 29 & ",シート2!$A3,シート1!$FD$3:$FD$" & iRow & ")" 30oShOut.Range("FE3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 31 & ",シート2!$A3,シート1!$FE$3:$FE$" & iRow & ")" 32oShOut.Range("FF3").Formula = "=SUMIF(シート1!$A$3:$A$" & iRow _ 33 & ",シート2!$A3,シート1!$FF$3:$FF$" & iRow & ")" 34 35iRow = oShOut.UsedRange.Rows.Count 36oShOut.Range("G3:EY3:EZ3:FA3:FB3:FC3:FD3:FE3:FF3").Copy 37oShOut.Range("G4:FF" & iRow).PasteSpecial Paste:=xlPasteFormulas 38 39Application.CutCopyMode = False 40 41End Sub

② 階層を合した別シート毎を比較するコード

コード Sub ボタン4_Click() Dim i As Long With ThisWorkbook For i = 1 To .Sheets("シート3").UsedRange.Rows.Count DoEvents If .Sheets("シート2").Range("A" & i).Value = "" Then ' Exit For ElseIf .Sheets("シート2").Range("A" & i).Value <> .Sheets("シート3").Range("A" & i).Value Then .Sheets("シート2").Rows(i).Insert Shift:=xlShiftDown End If Next i End With End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/06/16 10:54

・コードは「コードの挿入」で記入してください。 ・それぞれ何をするコードなのか簡単に説明を追加された方が良いかと思います。 > 時間が結構かかってしまいます。 具体的にはどれだけかかっているのでしょうか?
guest

回答1

0

簡単な方法としてまずは

ウィンドウ描画
セルの再計算
イベントの検知

を処理の間止めてみてください

それでもの足りなければ
連続したセルの値へのアクセス部分を

範囲を配列として一括で取得して
配列の値で比較を行ってみましょう。

あと、ボタンを4つに分けているとのことですが
途中で操作が必要な方が
人は面倒だと思います

処理にかかる時間がどこまでか知りませんが
進捗が分からなくてもイライラすると
思いますので

ステータスバーに進捗を表示するようにすると
感覚的な待ち時間は減るかもしれません

進捗が見えれば待ち時間に別の仕事も
しやすくなりますし

投稿2021/08/08 08:44

kamikazelight

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問