列数が多くなればVBAの記述量が増え、コーディングが大変になります。入力支援が使えるのは良いが、その事前準備があまりに大変ではやる気が失せてクラス作るのが面倒になってしまいます。同様のプロパティをコピペで大量生産する必要があるような場合の参考になれば良いということです。前回の続きになります。VBAクラスの作り方:列名の入力支援と列移動対応クラスを使う良さとして、入力支援が使えてコーディングが楽になるという利点があります、列番号をクラスに持てば、列名が候補表示されて非常に便利です。これを実装するには、かなりの手間がかかります。クラス作成に手間をかけて、その後を楽にするということになります。こちらで書いた列名のプロパティ部分を自動で作成するVBAを紹介します。Longここは、名称だけが違うプロパティが繰り返されています。コピペしつつ名称を変更すれば良いのですが、列数が多くなったら結構大変です。そこで、このクラス自体をVBAで作成してしまおうということです。前もって、以下に掲載しておきます。・列番号のプロパティを自動作成するVBAの完成コード以下で、順に説明します。作成済のクラス(clsColumn)をエクスポートして雛形にするVBAクラスの作り方:列名の入力支援と列移動対応クラスを使う良さとして、入力支援が使えてコーディングが楽になるという利点があります、列番号をクラスに持てば、列名が候補表示されて非常に便利です。これを実装するには、かなりの手間がかかります。クラス作成に手間をかけて、その後を楽にするということになります。こちらで作成したクラスclsColumnsをエクスポートして、作成するクラスの雛形にします。出力ファイルはそのままの、clsColumns.cls出力先はVBAを書いているブック(ThisWorkbook)と同一フォルダに入れてください。出力された、clsColumns.clsをメモ帳等のテキストエディタで開いてください。Functionこのようになっていますので、これを以下のように修正します。Explicitの手前までは、クラスを管理するための内部コードになっています。内容は特に気にするほどのものはありません。【追加プロパティ】このように変更して上書き保存してください。このファイルをクラスのひな型として使います。他と区別できるユニークな文字列ならなんでも構いません。以上を行い、シート名.clsとして出力します。Runtime」にチェックを付ける。VBAコードは特に難しい部分はないと思います。変数名は短めにしています。長いとWEB掲載したときには余計に見づらくなってしまうので。掲載コードが長くなるので、既定をそのまま使っています。プロパティ記述のひな型を入れておきます。列名部分を【列名】に変更し、改行(VbCrLf)を追加したものです。【追加プロパティ】は列名から作成したプロパティ全体で置換そして、clsCシート名.clsで出力しています。クラスファイル(.cls)のインポート出力したクラスファイル、clsCシート名.clsこれがあればインポートすれば良いのですが、せっかくなので自動でインポートするところまでやってみましょう。モデルへのアクセスを信頼する」これにチェックを付けておく必要があります。※この設定は、セキュリティを弱めるために危険性が増します。そこを突いたプログラムを動作させなければ問題とはなりません。普段はオフにしておき、必要な時だけオンにすることをお勧めしておきます。.clsファイルをインポートします。".clsファイルがありません。同名のクラスに対する処理を行うときに必要なために作成しています。ここでは少々回りくどい方法をとっていますが、一つの方法として紹介をかねて書いたものです。記述としては、FileSystemObjectを使ったほうが簡単に書けます。FileSystemObjectオブジェクトでは、コンピュータのファイルシステムへのアクセスが提供されています。VBAに用意されているファイル操作関連のステートメントや関数より、より強力で、より多くの機能が搭載されています。機能が大変多いため、これらを全て覚えるという事は困難です。元のclsはバックアップの意味でリネームして残しています。.VBComponents(ClsName)これで削除できます。作成途中のテスト段階では、間違って消してしまわないように気を付けてください。インポートは.clsファイルをフルパスで指定するだけです。このプロシージャーは何回でも実行できます。複数回実行すると、リネームされたクラスがそのたびに増えていきます。履歴で作成されてたクラスは後で解放して消して構いません。全てを連続実行できるように変更ここまで、それぞれ単体のプロシージャーとして、2つのプロシージャーを紹介してきました。前回作成した名前定義設定プロシージャと合わせて、一気に全てできるようにします。・クラスファイル(.cls)のインポートこの一連の処理をまとめて実行できるようにします。個別のプロシージャーで設定している情報を、このメインで設定して引き継ぐようにします。・対象シート・列タイトル行(名前定義行)・.cls出力フォルダ以上の3つになります。今後変更したいときの為に、せっかくなのでメインで指定できるようにします。多少の違いはあっても、概ねこのような感じで先頭の方で指定しています。そこで、これを以下のように、引数で受け取るように変更します。呼び出し元に最終的に決定したクラス名を戻すようにFunctionにしました。(値を戻す部分等は、完成コードをご覧ください。した名前定義とclsインポートについては、Functionにする必要がないので、引数への変更だけになります。大きくなってしまったプロシージャーを分割するときに必要な手法になります。これは必ず必要になってくる手法ですので、ぜひマスターすることをお勧めします。ここまでできれば、メインのプロージャーでそれぞれを呼び出せば完成です。"クラス(.cls)をインポートしました。"手動でクラス(.cls)をインポートしてください。".clsファイルがありません。NameAndProperty()これが起動するメインプロシージャーです。最初にclsインポートについての確認メッセージを出すようにしてみました。対象シートと名前定義の行を変更するだけで別のシートで使えます。シート数が多いときはループする等で対応すれば良いでしょう。細部については、お好みに合わせて変更してみてください。最後に今回は、クラスを作るVBAの紹介でした。クラスを作るといっても、ロジックは自動では作れませんので、(AIならできるようになる・・・)単純な定型文の繰り返し等の記述をVBAで行うということです。このようなものを作成すること自体に手間がかかりますが、これは一度作ってしまえば使い回しができますし、これでベースを作って後は手修正するという使い方でも良いと思います。従って、何度も同じことをやる必要があるなら、こういうツールを一度作っておけば、その後はコーディングの手間が大幅に減らせます。※シートで関数を設定して文字列を大量に生成する方法もあります。雛形の文字列(プロパティ文字列)をセルに入れておき、SUBSTITUTE関数で置換する方法になります。細かいことはできませんが、簡単にやれる利点があり応用範囲が広いので、ぜひ覚えておいてください。今回は名前定義が関係していることもありVBAで対応しました。コピペできるものはコピペする、繰り返しコピペと修正があるならツール作成を考える。このように段階的に考えてみると、全体の作業量が大きく変わってくるはずです。Next)|VBA入門7.マクロって何?VBAって何?|VBA入門8.セルに文字を入れるとは(Range,Value)|VBA入門9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説10.ひらがな⇔カタカナの変換|エクセル基本操作トップマクロVBAVBAクラス入門VBAクラスの作り方:列名のプロパティを自動作成するこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。GASスプレッドシート入門スプレッドシート応用GAS入門GAS応用トップマクロVBAVBAクラス入門VBAクラスの作り方:列名のプロパティを自動作成するこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。