(license)みなさん、こんにちは!タカハシ(@ntakahashi0505)です。弊社でお仕事をする場合に、「こういうコーディングルールでやろうね」というのを、自分自身または一緒にお仕事をするパートナーさんにお伝えすべく、エクセルVBAのコーディングガイドラインを作ろうということになりました。」にもほとんど書いてある内容ですし、別に企業秘密とするほどのことでもないので、せっかくなら記事にしてしまえ!ということで、記事として書かせてもらっています。プロシージャなど、名前には意味が伝わる単語を使います。Variantこれではどんな役割を持つ変数なのかわかりません...。VBAにおける名前は短いに越したことはないですが、長くてもメンバー候補が使えますので、それほど気にしなくてもよいです。【エクセルVBA】初心者にとっても便利なVBEの自動メンバー表示とその使い方エクセルVBAの業務効率を上げるためのVBEのテクニックについてお伝えしています。今回は、VBEのステキ機能である「自動メンバー表示」とは何か、また自動メンバー表示を使いこなす方法についてです。tonari-it.com2017.03.02意味がわからないよりは、長いほうがマシです。変数名はアルファベットのキャメル記法で書きます。変数の内容が明確かつ宣言から近い距離で完結するのであればpassurlmessagenumberclientなどの単一単語での変数名も問題ありません。ない場合、データ型に合わせて、以下接頭語で始める方法もあります。str:Stringdate:Daterng:Rangews:Worksheetwb:Workbookobj:Objectel:Elementただ、VBAの場合、数値型は種類が豊富なのでこの限りではありません。状況に応じて以下接頭語を使うことを推奨します。row:行col:列min:最小max:最大avg:平均ただし、以下については短くてシンプルな名称でも可読性には影響を与えませんので、使っても問題なしです。buf:一時的な変数obj:一時的なオブジェクト変数コレクションの変数名コレクションの場合、複数形の変数名にします。elプロシージャメインルーチンなどそのマクロ独自のSubプロシージャは日本語名でもOKです。他のプロシージャから頻繁に呼び出される可能性があるSubプロシージャ、またはFunctionプロシージャはアルファベットのパスカル記法でお願いします。他のマクロに再利用する際を考えると、日本語名でないほうが都合がよい場合が多いからです。各ライブラリで定義されているパブリックなメソッドやプロパティはパスカル記法ですので、独自で定義するパブリックなプロシージャもそれに合わせておきます。「~かどうか」を返すBoolean型のFunctionプロシージャに関してはIs~Has~Can~を使うとわかりやすいですし、かっこいいです。定数はアルファベットのスネーク記法で命名をします。単語」のキャメル記法でネーミングします。Cellsプロパティの引数として列番号などによく使われますので、単語はなるべく短いワードが望ましいです。ワークシートの列数を表す列挙体の場合は、そのオブジェクト名と同じワードを使うのがおすすめです。Enumと命名します。変数の宣言まず、前提として、不必要な変数は増やさないようにしたいところです。変数が増えるということは、管理すべき対象が増えるということなので、無駄に増やすと可読性やメンテナンス性を低下させることになります。重複や無駄のないように、最低限必要な変数を準備するようにしましょう。変数の宣言は強制するVBEのオプション設定で変数の宣言を強制するようにします。)の「編集」タブ、「変数の宣言を強制する」にチェックで、常に作用します。エクセルVBA超入門!たった10分でスタート地点に立つための方法エクセルVBA...まず何をしたら良いかわからない...!という声をよく耳にします。今回はVBAプログラミングをいざ書き始める直前の状態を目標に、エクセルVBAの最低限のセッティングの仕方についてお伝えします。tonari-it.com2015.05.02モジュールの宣言セクションに以下記載がある状態であれば、変数の宣言が必須となります。変数の型を明確にするなどのメリットがあります。暗黙の型は使わない型指定をしないとVariant型になりますが、変数の役割が見えづらくなりますので、特に理由がない限りは型を指定をすべきです。以下のような書き方をすると、変数xがVariant型になってしまうので注意が必要です。Longこのように記述するのが正しい書き方です。Longまた、オブジェクト変数でいうとObject型も便利ではありますが、同様の理由から、できるだけ型指定は詳細にするのが良いです。スコープはできる限り小さく原則、変数・定数はプロシージャレベルで宣言をすることで、可読性と安全性が高まります。理由もなくモジュールレベルやパブリックにはしないように...。宣言をするのは、使用する直前での宣言が望ましいです。プロシージャ冒頭にプロシージャ内で使用するすべての変数を宣言するというしきたりがあったりなかったりしますが、近くにあるほうが型は何か宣言時のコメントといった情報がスクロールなしで得られるようになります。定数の場合は、プロシージャの冒頭または宣言セクションでまとめて宣言をしておくのもよいでしょう。後で値を変更するときに、わかりやすい位置にあると便利です。Integer型は使わない整数はLong型で統一で問題ありません。Integer型はメモリ領域をセーブできるというメリットも無きにしも非ずのように見えるかもなのですが、公式にこのように発言されています。最近のバージョンでは、Integer型として宣言されていても、VBAはすべての整数値をLong型に変換します。したがって、Integer変数を使用することによるパフォーマンス上の利点はなくなりました。実際、Long変数はVBAで変換する必要がないため、少し速くなる可能性があります。コンピュータはそもそも小数付の計算が苦手で、SingleやDoubleの計算では誤差が発生する場合があるのですが、Currencyなら安心して使えます。Currencyは小数点以下4桁までを取り扱うことができ、計算時は1万倍して整数にしてから、計算後に1万で割って戻すという処理をしているので、小数付の計算による誤差が出ないのです。小数点以下5桁以下は丸められてしまいますので、その点は知っておく必要があります。コードのフォルムネストとインデントネストであれば必ずその深さの分のインデントを加えてください。理想としては深さは3つまでがいいですね。iWithステートメントの活用Withステートメントを使うとネストは増えてしまいますが、同じオブジェクトを何度も書かなくて済みますし、可読性も上がる場合が多く、コードを書くための強力な武器になります。With縦に揃える一行が長いときには、アンダースコアによる行連結シーケンスによる改行が有効ですが、縦に揃えることを意識すると可読性が高まります。"既にデータが記録されています。"「いいえ」をクリックすると処理を中断します。"既にデータが記録されています。"「いいえ」をクリックすると処理を中断します。"引数の多い命令を記述するときに有効です。一般的にコードを見ればわかるような内容についてのコメントは不要です。以下のようなパターン。Ifコメント入れなくてもわかりますから...情報密度が薄くなっちゃいます。頻繁に呼び出されることのあるプロシージャであるなら、役割、引数、返り値などについてコメントを入れておきます。以下のようなコメントです。Function役割や使い方がぱっとわかりますし、再利用もしやすくなります。マジックナンバーは禁止マジックナンバーは使用禁止です。メンテナンス性を著しく犠牲にします。引数ファイル名、パス名パスワードURLやメールアドレスなどがあります。定数や列挙型を使うことで、マジックナンバーを避けましょう。While~Loop文を使います。繰り返し回数の指定を変更することなく、テーブルのレコード追加や削除に対応できます。Each~Next文を使います。Each~Next文のほうがループ内でのオブジェクトの指定が簡潔になります。wsワークシートの指定はオブジェクト名でシートの指定はできる限りオブジェクト名を使います。どのモジュールからでも同名でアクセスできる可読性が確保できるシート名の変更の影響を受けない宣言が不要など大量のメリットがあります。初心者向けエクセルVBAで請求書を作成するシリーズ。今回は、エクセルVBAで頻繁に取り扱うワークシートを「オブジェクト名」を使って指定する方法です。オブジェクト名とは何か、またその編集方法もお伝えします。tonari-it.com2017.02.12特に、インデックス番号による指定は、シートの並び順に依存するので危なっかしいです。シート名を省略した場合は、暗黙的にActiveSheetへの処理となります。ActiveSheetはユーザーの操作によって想定しないシートが対象になることもあるので注意です。ワークシートの新規作成をした直後であれば、戻り値を使ってオブジェクト変数にすぐさま格納するのが良いでしょう。ThisWorkbook.Worksheets.Addワークブックを明示する以下のように親オブジェクトであるワークブックを省略することも避けるほうが良いです。BasicWorksheets("Sheet1").Name1Worksheets("Sheet1").Nameこの場合は、ActiveWorkbookが親オブジェクトとして認識されますが、ユーザーの操作によって想定しないオブジェクトが指定されたりします。基本的にThisWorkbookを使うか、オブジェクト変数で特定をしましょう。ActiveSheetと同様なのですが、ワークブックを新規作成をした直後には、戻り値を使ってオブジェクト変数に格納しちゃいましょう。"\hoge.xlsx")構造データの使用スクリプトで主に操作をするスプレッドシートのデータは、特に理由がない限りテーブル形式になるように心がけましょう。A1セルから構成する空白行・空白列を設けないセルの結合を使わない見出しは1行で構成する同じ種類のデータはシートを分けないつまり、ピボットテーブルを作成できるデータの整理の仕方が望ましいです。データを構造データで持つかどうかが、それを操作するプログラムの作りやすさに大きく影響します。ActiveSheet.Paste1234567Sheets("Sheet1").SelectRange("A1").SelectSelection.CopySheets("Sheet2").SelectRange("A1").SelectActiveSheet.Pasteなどといったコードが出力されますが、コピペにSelectメソッドは不要です。Selectをするたびにアプリケーションの動作が入り、実行速度が犠牲になりますし、クリップボードを使うのはユーザーの干渉を受ける可能性があり危険です。以下のよいうに、Copyメソッド一文でOKです。Sheet2.Range("A1")セル範囲で処理できるなら一発でCopyメソッドは範囲でも機能します。単なるコピペであれば、繰り返しを使って1セルずつコピペをするのではなく、範囲で一気にコピペすることを優先しましょう。Sheet2.Range("A1")実行速度に圧倒的な差が生まれます。理由がない限り、シートの処理をするのであれば、以下アプリケーションオブジェクトに関するプロパティ群を設定して、高速化を図ります。With遅い...重い...そんなエクセルVBAプログラムの処理速度を劇的に改善する方法エクセルVBAの実行速度が遅い・重いって時ありませんか?そんな時にエクセルVBAのプログラムの処理速度を速くするテクニックを紹介します。プログラムの実行時間を測定する方法も合わせてお伝えします。tonari-it.com2016.01.18日付リテラルエクセルVBAにおいて日付の指定はダブルクォーテーション囲みでも許されていますが、「日付リテラル」つまりシャープ記号囲みがおすすめです。いうのも、日付リテラルを使うことで、日付として受け付けられない文字列をはじくこともできますし、入力後に規定のフォーマットに変換されるので、想定外の値が入力されることも防ぐことができます。PM#に自動変換まとめ以上、エクセルVBAのコーディングガイドラインでした!どうぞご活用くださいませ。良いガイドライン見つけたら、随時更新していきますね。プランノーツ代表、コミュニティ「ノンプロ研」主宰。ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ★フォロー頂ければ嬉しいです。「コミュニティ+講座」形式で継続性&教え合える環境も提供。!ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ。セミナー・もくもく会・Facebookグループのサポートで「自らで学び続ける力をつける」支援、「教え合うことで学びの価値を上げる」場の提供をしています。初心者向けにエクセルVBAで請求データ一覧から請求書を自動で作成する方法をお伝えしています。今回はワークシートをコピーする方法、Activesheetの使い方、シート名を変更する方法についてお伝えします。【エクセルVBA】VBAでパスワード付のシートの保護を設定・解除する方法ProtectメソッドのPaswordオプションを使った、パスワード付のシートの保護を設定する方法と、UnprotectメソッドのPasswordオプションでパスワード付のシートの保護を解除する方法もご紹介しています。これを使えば、パスワード付シートの保護を、VBAから設定・解除することができますよ。2017.05.30Excel・VBA活用術エクセルVBAでグラフタイトルを変更する方法とChartTitleについてエクセルVBAでグラフとPowerPointを操作する方法についてお伝えしています。今回は、グラフのデータ範囲とともにChartTitleのTextを使って、タイトルも変更しながら貼り付ける方法です。【エクセルVBA】Intersectメソッドで範囲内のセルが変更されたことをキャッチする方法エクセルのWorksheet.Changeイベントと、Intersectメソッドを組み合わせて、特定の範囲内にあるセルの値が変更されたときのみ、イベント内の処理を実行させる方法をご紹介しています。Intersectメソッドは、イベントと組み合わせる以外にも便利に使うことができますよ。初心者向けエクセルVBAで請求書を作成するシリーズ。今回は、エクセルVBAで頻繁に取り扱うワークシートを「オブジェクト名」を使って指定する方法です。オブジェクト名とは何か、またその編集方法もお伝えします。2017.02.12Excel・VBA活用術エクセルVBAでCSVを高速に取り込むQueryTableオブジェクト使用時の注意点エクセルVBAで高速にCSVを取り込むことのできるQueryTableオブジェクト。想定されるエラーとその対処法、注意点について解説します。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。Scriptが「V8ランタイム」をサポート!モダンなECMAScript構文が使えるようになった2020.02.072020.02.08GASでコピーしたGoogleスライドのプレゼンテーションを取得する方法2020.02.052020.02.05Facebookページいつも隣にitのお仕事タイトルとURLをコピーしました。