VBA
コーディング規約とは変数や処理の書き方などに方針を定めたもので、コードの書き方に迷う時間を減らしたり、以前書いたコードが読みやすくなる効果があります。ぜひ皆さんもマイルールを作ってみてください。
同じ図形が同じ場所に大量に溜まったファイルを整理する際に、最前面の図形以外を削除するコードを紹介します。タイプや位置などの複数要素の一致判定にはDictionaryを使用するのが便利です。
マニュアルやフロー図などがExcelで作られていると、ほとんどのテキストが図形内にあるということもよくあります。これを一括でセルに出力するマクロを紹介します。
ChatGPT、Copilot、Gemini、Claudeに同じマクロを作ってもらい性能を比較をしてみました。「VBA&AI初学者に優しい生成AIはどれ?」をテーマに採点しましたので、どのAIをお供にするかの参考にしてみてください。
Excelマクロ初心者のふゆさんに0からVBAを教えるLive配信です。毎週金曜22:00~お気軽にお越しください(´∀`)配信アーカイブと取り組んだ内容をまとめましたので復習や見逃し配信にご活用ください。
Wordの新規保存ダイアルログは先頭行のタイトルが保存ファイル名初期値になって開きます。この機能をExcelでも使えるよう、選択セルの値をブック名初期値として新規保存ダイアログを開くマクロを紹介します。
非表示のシートをコピー・移動しようとするとエラーが発生します。これを非表示のまま解消することはできませんので、一旦再表示 → コピー/移動 → 非表示に戻すという手順を踏んで対応します。
Collectionで重複のないユニークリストを作成する方法を解説します。KeyにItemと同じものを入れてKeyを重複チェックに利用するか、Itemの存在チェック関数を自作して対応するかの2つの方法で対応します。
和風スパゲティ勉強会 第7回のテーマは「Rangeオブジェクト再入門」ということで、今さら聞けないRange・Cellsの基本コードをおさらいしていきます。Excelのメインオブジェクトを綺麗に扱う方法を一緒に勉強しましょう。
Accessのテーブルをシートに出力する方法を紹介します。ADODBのSQLによるSELECT文を使用しています。テーブル名と出力始点セルを渡せば動く関数にしましたので、本関数を中身を見ずにCallしてもOKです。
On Error Resume Next下においては、Callしたプロシージャ内でエラーが発生すると即座にCall元に戻ります。エラー発生コードからEndSubまでのコードは一切実行されませんのでご注意ください。
プロシージャをCallする際、親子どちらでOnErrorを設定したかによって、どのように処理内容が変化するかをまとめました。エラー処理を行う際の参考にして下さい。
指定行より下の行をすべて削除するコードを解説します。シートの最終行まで削除、データの最終行まで削除の2通りの処理を解説します。いずれもフィルター抽出中は正しく動かないことに注意してください。
和風スパゲティ勉強会の配布資料と配信アーカイブをまとめました。復習や見逃し配信にご活用ください。ご視聴の際はぜひチャンネル登録をよろしくお願いします!
第6回 和風スパゲティ勉強会「VBAの落とし穴大全」の配布資料と配信アーカイブを共有します。全34品のタイトル・解決策・URLも資料内にリスト化しましたので、復習にお役立てください。
Excelがスピル対応のバージョンか調べる方法を解説します。一発で調べる方法はありませんので、RangeオブジェクトにFormula2プロパティが存在するかで判定します。
オブジェクトに特定のプロパティが存在するかを調べる方法を解説します。一発でこれを行うプロパティは存在しませんので、オブジェクト.プロパティがエラーになるかどうかを調べて判定します。
自シートを参照する「自シート名!」が数式内に入ってしまうと、読みにくくなってしまうだけでなく、ソートすると式が破損するという罠を生んでしまいます。今回はこれを自動でしょう供するマクロを紹介します。
特定の条件を満たす列を削除する方法を解説します。For文でStep-1を利用して最終列から1行ずつ削除していく方法と、Unionメソッドで一つのRangeオブジェクトにしてから一括で削除する方法があります。
書式のコピーにはPasteSpecialが思い浮かびますが、行ごとコピーする場合はAutoFillメソッドが使用できます。クリップボードを介さず安全高速ですので、フィルハンドルのようなコピー処理にはこちらを使用しましょう。
セルの結合解除にはショートカットキーが設定されていません。これをショートカットキーに登録するためにセル結合機能をマクロで再現してみました。複数行実行時に自動で横方向結合する機能も付けましたのでご活用ください。
セルの右下にカーソルを合わせたときに出る✚のコピー機能をオートフィル(フィルハンドル)と呼びます。これは便利なのですがショートカットがないため、マクロで再現してショートカットに登録してみましょう。
AutoFillとFillDownの違いを解説します。どちらも先頭のセルをセル範囲へコピーするメソッドですが、AutoFillはフィルハンドル、FillDownはCtrl+Dと対応しているためAutoFillの方がコピーの種類が豊富です。
先頭セルをセル範囲全体へコピーするCtrl+DやCtrl+Rと同じ処理をVBAで実行するには、FillDown/FillUp/FillRight/FillLeftメソッドを使用します。連続データ、値/書式のみコピーをしたい場合はAutoFIllメソッドを使用します。
Collection内に要素が存在するかチェックするには、標準機能がないため愚直にFor Each文で一致する要素があるかを判定します。DictionaryならExistsメソッド一発なので、出来ればそちらで実装しましょう。
DictionaryはKeyとItemをセットで持っておく仕組みですが、Itemを無視してKeyだけを一次元配列として使用する方法があります。このKeyのみDictionaryはCollectionの上位互換なので積極的に活用しましょう。
WorksheetFunction(以下WF)に渡せる一次元配列には上限があり、65,537を超える件数の一次元配列を正しく受け取れません。二次元配列やRangeオブジェクトを渡せば正しく動くので一次元配列のみお気を付けください。
CollectionはIndexによるアクセスが遅いという特徴があり、ForEach文なら一瞬でもFor文だと数秒~数十秒かかってしまうことがあります。これはデータ件数が増えると加速度的に遅くなるので注意しましょう。
処理が超速なことで知られるDictionaryですが、実はデータ件数が増えすぎると急に遅くなるという欠点もあります。件数の二乗に比例して処理が遅くなる傾向があるため、Dictionaryを分割するなどで対応します。
現在作業中のブックを保存する際、上書き保存ではなく別名で保存しておきたい場面があります。ブック名_yyyymmddhhmm_作業メモという名称でファイルのバックアップを取るマクロを紹介します。