VBAでExcelマクロをプログラミングするときに避けるべき4つの間違い

VBAでExcelマクロをプログラミングするときに避けるべき4つの間違い

マイクロソフトエクセル はすでに有能なデータ分析ツールですが、Visual Basic for Applications(VBA)で単純なコードを記述することにより、マクロを使用して反復的なタスクを自動化する機能を備えているため、はるかに強力です。ただし、誤って使用すると、VBAによって問題が発生する可能性があります。





プログラマーでなくても、VBAは、スプレッドシートに印象的な機能を追加できるシンプルな関数を提供します。





Excelでダッシュボードを作成するVBAの第一人者であるか、基本的なセル計算を行う簡単なスクリプトを作成する初心者であるかは関係ありません。これらの簡単なプログラミング手法に従って、バグのないクリーンなコードを作成する方法を学びましょう。





VBA入門

VBAはあなたのためにあらゆる種類のきちんとしたことをすることができます。シートを変更するマクロの作成から VBAスクリプトを使用してExcelスプレッドシートから電子メールを送信する 生産性に制限はほとんどありません。

ExcelでVBAをプログラムしたことがない場合は、Excelプログラムで開発ツールを有効にする必要があります。幸いなことに、開発者ツールを有効にするのは実際には非常に簡単です。に行くだけ ファイル >> オプション その後 リボンをカスタマイズする 。移動するだけです デベロッパー 左ペインから右にタブします。



チェックボックスでこのタブが有効になっていることを確認してください。これで、Excelメニューに[開発者]タブが表示されます。

ここからコードエディタウィンドウに入る最も簡単な方法は、をクリックすることです。 コードを見る 下のボタン コントロール 開発者メニューで。





これで、VBAコードを作成する準備が整いました。このタブでは、VBAと同様にアクセスします Excelでマクロを記録する 。 Excelが機能する準備ができたので、避けるべきいくつかの一般的な間違いと、それらを防ぐ方法を見ていきましょう。

1.恐ろしい変数名

コードウィンドウが表示されたので、VBAコードの記述を開始します。ほとんどのプログラムで最初に重要なステップは、VBAであろうと他の言語であろうと、変数を定義することです。変数に適切な名前を付けないことは、新しい開発者が犯す最も一般的なプログラミングの間違いの1つです。





私の電話を大きくするアプリ

何十年にもわたるコード作成を通じて、変数の命名規則に関して多くの考え方に出会い、いくつかのルールを難しい方法で学びました。変数名を作成するための簡単なヒントを次に示します。

  • それらをできるだけ短くします。
  • それらをできるだけ説明的にします。
  • それらの前に変数タイプ(ブール、整数など)を付けます。

これは、PC情報を収集するためにExcelからWMICWindows呼び出しを行うためによく使用するプログラムのサンプルスクリーンショットです。

モジュールまたはオブジェクト内の関数内で変数を使用する場合(これについては以下で説明します)、宣言の前に「public」変数として宣言する必要があります。 公衆 。それ以外の場合、変数は単語の前に付けることで宣言されます なし

ご覧のとおり、変数が整数の場合、前に付けられます int 。文字列の場合は、 NS 。これは個人的な好みであり、名前を一瞥することで変数が保持するデータのタイプを常に知ることができるため、プログラミング中に後で役立ちます。

また、Excelブックのシートに必ず名前を付けてください。

このように、Excel VBAコードでシート名を参照するときは、意味のある名前を参照していることになります。上記の例では、ネットワーク情報を取得するシートがあるため、シートを「ネットワーク」と呼びます。ネットワークシートを参照したいときはいつでも、シート番号を調べなくてもすばやく参照できます。

2.ループする代わりに壊す

新しいVBAプログラマーがコードを書き始めたときに抱える最も一般的な問題の1つは、ループを適切に処理することです。

ループはExcelで非常に一般的です。これは、行全体または列全体でデータ値を処理することが多いため、すべてを処理するにはループする必要があるためです。

新しいプログラマーは、特定の条件が真になったときに、ループ(VBAForループまたはVBADo Whileループ)から即座に抜け出したいことがよくあります。

これは、VBAループを解除するために使用されているこのメソッドの例です。

For x = 1 To 20
If x = 6 Then Exit For
y = x + intRoomTemp
Next i

新しいプログラマーは、簡単なのでこのアプローチを採用します。明示的にループを壊さないようにしてください。

多くの場合、その「ブレーク」の後に続くコードは処理することが重要です。ループを途中で終了したい条件を処理するためのはるかにクリーンでプロフェッショナルな方法は、VBAWhileステートメントのようなものにその終了条件を含めることです。

While (x>=1 AND x<=20 AND x6)
For x = 1 To 20
y = x + intRoomTemp
Next i
Wend

これにより、コードの論理的な流れが可能になります。これで、コードはループスルーし、6に達すると停止します。ループの途中で厄介なEXITまたはBREAKコマンドを含める必要はありません。

3.配列を使用しない

新しいVBAプログラマーが犯すもう1つの興味深い間違いは、計算プロセス中に行と列をフィルター処理する多数のネストされたループ内のすべてを処理しようとすることです。

これはまた、重大なパフォーマンスの問題につながる可能性があります。列をループして毎回値を抽出することは、プロセッサにとってキラーです。数値の長いリストを処理するためのより効率的な方法は、配列を利用することです。

これまでアレイを使用したことがない場合でも、心配する必要はありません。アレイを、情報を入れることができる特定の数の「キューブ」を備えた角氷トレイとして想像してみてください。キューブには1から12までの番号が付けられており、それがデータをキューブに「入れる」方法です。

入力するだけで簡単に配列を定義できます 整数としてのDimarrMyArray(12)

電話がタップされているかどうかを見分ける方法

これにより、12個のスロットを埋めるために使用できる「トレイ」が作成されます。

配列のない行ループコードは次のようになります。

Sub Test1()
Dim x As Integer
intNumRows = Range('A2', Range('A2').End(xldown)).Rows.Count
Range('A2').Select
For x = 1 To intNumRows
If Range('A' & str(x)).value <100 then
intTemp = (Range('A' & str(x)).value) * 32 - 100
End If
ActiveCell.Offset(1, 0).Select
Next
End Sub

この例では、コードは範囲内のすべてのセルを処理し、温度計算を実行しています。

これらの同じ値に対して他の計算を実行したい場合、プロセスは不格好になります。このコードを複製し、これらすべてのセルを処理して、新しい計算を実行する必要があります。すべてを1つの変更で!

配列を使用したより良い例を次に示します。まず、配列を作成しましょう。

Sub Test1()
Dim x As Integer
intNumRows = Range('A2', Range('A2').End(xldown)).Rows.Count
Range('A2').Select
For x = 1 To intNumRows
arrMyArray(x-1) = Range('A' & str(x)).value)
ActiveCell.Offset(1, 0).Select
Next
End Sub

NS x-1 Forループは1から始まるため、配列要素を指すために必要なのは1つだけです。配列要素は0から始める必要があります。

配列ができたので、内容を処理するのは非常に簡単です。

Sub TempCalc()
For x = 0 To UBound(arrMyArray)
arrMyTemps(y) = arrMyArray(x) * 32 - 100
Next
End Sub

この例では、行配列全体を調べます( UBound 配列内のデータ値の数を示します)、温度計算を実行し、それをと呼ばれる別の配列に配置します arrMyTemps

4.参照が多すぎる

本格的なVisualBasicまたはVBAのどちらでプログラミングしている場合でも、特定の機能にアクセスするには「参照」を含める必要があります。

参照は、そのファイルを有効にした場合に利用できる機能で満たされた「ライブラリ」のようなものです。をクリックすると、開発者ビューで参照を見つけることができます ツール メニューでクリックします 参考文献

このウィンドウに表示されるのは、現在のVBAプロジェクトで現在選択されているすべての参照です。

不要な参照はシステムリソースを浪費する可能性があるため、このリストを確認する必要があります。 XMLファイル操作を使用しない場合、なぜMicrosoft XMLを選択したままにするのですか?データベースと通信しない場合は、MicrosoftDAOなどを削除してください。

これらの選択した参照が何をするのかわからない場合は、を押してください F2 オブジェクトエクスプローラーが表示されます。このウィンドウの上部で、参照する参照ライブラリを選択できます。

選択すると、すべてのオブジェクトと使用可能な機能が表示されます。クリックすると、詳細が表示されます。

たとえば、DAOライブラリをクリックすると、データベースへの接続とデータベースとの通信がすべてであることがすぐに明らかになります。

プログラミングプロジェクトで使用する参照の数を減らすことは理にかなっており、アプリケーション全体をより効率的に実行するのに役立ちます。

100で実行されているWindows10ディスク

ExcelVBAでのプログラミング

実際にExcelでコードを書くという考え全体は多くの人を怖がらせますが、この恐れは実際には必要ありません。 Visual Basic for Applicationsは習得が非常に簡単な言語であり、上記の基本的な一般的な方法に従うと、コードがクリーンで効率的で理解しやすいものになります。

しかし、そこで止まらないでください。を使用してExcelスキルの強力な基盤を構築します。 初心者向けのVBAチュートリアル 。次に、スプ​​レッドシートの自動化に役立つリソースを使用して、VBAとマクロについて学習し続けます。

共有 共有 つぶやき Eメール Windows 11にアップグレードする価値はありますか?

Windowsが再設計されました。しかし、それはWindows10からWindows11に移行するように説得するのに十分ですか?

次を読む
関連トピック
  • 生産性
  • プログラミング
  • プログラミング
  • VisualBasicプログラミング
  • マイクロソフトエクセル
著者について アンソニー・グラント(公開された40の記事)

Anthony Grantは、プログラミングとソフトウェアをカバーするフリーランスのライターです。彼は、プログラミング、Excel、ソフトウェア、およびテクノロジーに手を出しているコンピューターサイエンスの専攻です。

アンソニー・グラントのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください