Copyright © 2017-2020 mMm Program All Rights Reserved. 明らかに1行ずつ削除するより、先に行をまとめて選択するほうが工数(クリック数)が少なくて済みます。. エクセルマクロをはじめよう!」, プログラムのロジックを駆使したVBA高速化の王道テクニックを公開。 (現在準備中...). Excel VBA マクロの列を削除する方法を紹介します。Columns.Delete メソッドまたは Range.Delete メソッドで列を削除できます。 HOME > VBA高速化 > 【第5位】不要行の削除. 結論:高速削除が可能なVBAコードを紹介します!どうぞコピペしてお使ってください。, 大量データの中にある不要な行を削除するシーン・・・・・・ありますよね。 単純に行を削除するだけなら、Range(cell).Deleteで出来ます。 でも、大量データの行を高速に削除するとなると話が変わってきます。, Range(cell).Deleteで大量の行を削除すると、1行ずつ削除するので時間がかかります。 そんなときは「union」を使うと高速に処理ができます。, そんなアナタと私(忘れた時用)のために、先にコードを紹介します!適時変更を加えて、お好きに使ってください!, 普通の削除とUnionを使った削除、どれだけ処理速度が違うのか?速度の違いを↓の動画でご確認ください!, ファイルサイズ2.5MBほどでこの速度差です。 ファイルサイズが大きくなれば、より顕著に速度の違いが現れます。 実際、会社のデータを使う際はもっと大きなデータを扱う場合があるでしょう。, Unionを使うコードで内部的に起きていることを表現すると・・・ 削除する行をまとめて選択した上で削除している。, Unionを使わないコードを表現すると・・・ 削除する行を1行選択して削除を実行。また、削除する行を選択して削除を実行の繰り返し。, 実際、手作業で上の動作を比較してみるとよく解ると思います。明らかに1行ずつ削除するより、先に行をまとめて選択するほうが工数(クリック数)が少なくて済みます。, Unionでまとめて削除することで作業時間が大幅に削減されます。 アナタが行削除の速度に悩んでいるのなら、是非使ってみてくださいね。, マサヤです!プログラムや料理が好きです。 楽しく生きていくための学びや料理など色々書いてます。, 日本料理店の板前 ⇒ コールセンター会社 マネージャー  ⇒ VBAにハマって業務を効率化しまくる ⇒ ブログでスキルを発信 ⇒ 他のプログラムの勉強も始める, 私に変えねばならないものを変える勇気を、どうしようもないものを受け入れる静穏を、そして、それらを見分ける洞察力を与えて下さい。. エクセルVBAで縦列を削除する方法は簡単です。ただ、条件によって複数列になると時間がかかりますので、高速化する裏技を紹介します。, 前提として、下記のような乱数の関数RAND()を少数点1桁で四捨五入した式"=ROUND(RAND(),1)"が100列10000行にびっしり入っているシートがあります。, Dim i As Integer, j As IntegerDim col_array As VariantApplication.ScreenUpdating = False ' 描画を停止するApplication.Calculation = xlCalculationManual ' 手動計算にするj = 1With Sheets(1) For i = 1 To 100  If .Cells(1, i) = 1 Then   col_array = .Range(.Cells(1, i), .Cells(10000, i))   .Range(.Cells(1, j), .Cells(10000, j)) = col_array   j = j + 1  End If Next i .Range(.Cells(1, j), .Cells(10000, 100)).ClearEnd WithApplication.Calculation = xlCalculationAutomatic ' 自動計算にするApplication.ScreenUpdating = True ' 描画を再開する, 高速化のポイントは.deleteを使わず、必要列をコピーして不要列を一括で削除する、という処理方法です。, 4、5行目Application.ScreenUpdating = False ' 描画を停止するApplication.Calculation = xlCalculationManual ' 手動計算にするはよくあるVBA高速化です。, 10行目If .Cells(1, i) = 1 Then 条件です。1行目が"1"ならばデータを残し、それ以外は列を削除する処理を想定しています。, 11行目col_array = .Range(.Cells(1, i), .Cells(10000, i)) はその列の1行目から10000行目までの仮配列”col_array”に代入しています。, 12行目.Range(.Cells(1, j), .Cells(10000, j)) = col_array は仮配列に格納したデータをj列に代入しています。j列は初期は7行目で1を代入されています。, 16行目.Range(.Cells(1, j), .Cells(10000, 100)).Clear で最後に不要列をクリアしています。, 20行目、21行目Application.Calculation = xlCalculationAutomatic ' 自動計算にするApplication.ScreenUpdating = True ' 描画を再開するという高速化処理後に元の状態に戻すコードです。, Dim i As IntegerApplication.ScreenUpdating = False ' 描画を停止するApplication.Calculation = xlCalculationManual ' 手動計算にするWith Sheets(1) For i = 100 To 1 Step -1  If .Cells(1, i) <> 1 Then   Columns(i).Delete  End If Next iEnd WithApplication.Calculation = xlCalculationAutomatic ' 自動計算にするApplication.ScreenUpdating = True ' 描画を再開する, 6行目For i = 100 To 1 Step -1ここのポイントはiが1から100まで順に進むのではなく、100から1つずつ遡っていくことです。そうしないと、9行目の行をdeleteしたときに1列ずつ残ってしまいます。, このように、iが1から100まで順に進むと判定されない列が半分発生してしまいます。ここでは、iは100から1へ戻るようにすれば解決できます。, 8行目If .Cells(1, i) <> 1 Then もし1行目が1以外なら…, それでは、実際に処理時間を比較してみましょう。下記結果は5回実行した平均処理時間です。, ご覧のように1秒かからずに実行できる方法があるにも関わらず、コードの違いで無駄に待ち時間を過ごすのはもったいないですね。工夫して高速化しましょう。「列」削除でなく、「行」削除の高速化VBAも同じ方法で、必要行を残して不要行を一括消去すれば高速化が可能になります。.

Sin 二乗 θ 17, 名探偵コナン 8月 放送予定 6, エメラルド ラルトス 技 4, ボルボ V60 オーナー 7, パワプロ Switch マイライフ 青特 10, 遺産 100万 使い道 14, Thinkpad X270 Sim 5, なんj 世界史 面白い 4, アルプス ベル お祝い膳 5,