和風スパゲティのレシピ

日本語でコーディングするExcelVBA

VBA

ExcelVBAコーディングガイドライン

コーディング規約とは変数や処理の書き方などに方針を定めたもので、コードの書き方に迷う時間を減らしたり、以前書いたコードが読みやすくなる効果があります。ぜひ皆さんもマイルールを作ってみてください。

重なった図形を最前面のもの以外削除する

同じ図形が同じ場所に大量に溜まったファイルを整理する際に、最前面の図形以外を削除するコードを紹介します。タイプや位置などの複数要素の一致判定にはDictionaryを使用するのが便利です。

すべての図形内テキストをセルに出力するマクロ

マニュアルやフロー図などがExcelで作られていると、ほとんどのテキストが図形内にあるということもよくあります。これを一括でセルに出力するマクロを紹介します。

4種のAIによるExcelVBAコーディング性能比較

ChatGPT、Copilot、Gemini、Claudeに同じマクロを作ってもらい性能を比較をしてみました。「VBA&AI初学者に優しい生成AIはどれ?」をテーマに採点しましたので、どのAIをお供にするかの参考にしてみてください。

スパとふゆの0からはじめるExcelマクロ まとめ

Excelマクロ初心者のふゆさんに0からVBAを教えるLive配信です。毎週金曜22:00~お気軽にお越しください(´∀`)配信アーカイブと取り組んだ内容をまとめましたので復習や見逃し配信にご活用ください。

選択セル値をブック名にブックを新規保存するマクロ

Wordの新規保存ダイアルログは先頭行のタイトルが保存ファイル名初期値になって開きます。この機能をExcelでも使えるよう、選択セルの値をブック名初期値として新規保存ダイアログを開くマクロを紹介します。

非表示のシートをコピー・移動する

非表示のシートをコピー・移動しようとするとエラーが発生します。これを非表示のまま解消することはできませんので、一旦再表示 → コピー/移動 → 非表示に戻すという手順を踏んで対応します。

Collectionで重複なしリストを作成する

Collectionで重複のないユニークリストを作成する方法を解説します。KeyにItemと同じものを入れてKeyを重複チェックに利用するか、Itemの存在チェック関数を自作して対応するかの2つの方法で対応します。

10/29(水)21:00~ 第7回 和風スパゲティ勉強会「Rangeオブジェクト再入門」

和風スパゲティ勉強会 第7回のテーマは「Rangeオブジェクト再入門」ということで、今さら聞けないRange・Cellsの基本コードをおさらいしていきます。Excelのメインオブジェクトを綺麗に扱う方法を一緒に勉強しましょう。

Accessのテーブルをワークシートに出力する

Accessのテーブルをシートに出力する方法を紹介します。ADODBのSQLによるSELECT文を使用しています。テーブル名と出力始点セルを渡せば動く関数にしましたので、本関数を中身を見ずにCallしてもOKです。

OnError中にCallした関数内でエラーが起きると即呼出元に戻る

On Error Resume Next下においては、Callしたプロシージャ内でエラーが発生すると即座にCall元に戻ります。エラー発生コードからEndSubまでのコードは一切実行されませんのでご注意ください。

プロシージャのCall元/先でのOnError挙動まとめ

プロシージャをCallする際、親子どちらでOnErrorを設定したかによって、どのように処理内容が変化するかをまとめました。エラー処理を行う際の参考にして下さい。

指定行より下を最終行まですべて削除する

指定行より下の行をすべて削除するコードを解説します。シートの最終行まで削除、データの最終行まで削除の2通りの処理を解説します。いずれもフィルター抽出中は正しく動かないことに注意してください。

和風スパゲティ勉強会 資料&配信アーカイブまとめ

和風スパゲティ勉強会の配布資料と配信アーカイブをまとめました。復習や見逃し配信にご活用ください。ご視聴の際はぜひチャンネル登録をよろしくお願いします!

「VBAの落とし穴大全」配布資料&配信アーカイブ

第6回 和風スパゲティ勉強会「VBAの落とし穴大全」の配布資料と配信アーカイブを共有します。全34品のタイトル・解決策・URLも資料内にリスト化しましたので、復習にお役立てください。

Excelがスピルに対応したバージョンか調べる

Excelがスピル対応のバージョンか調べる方法を解説します。一発で調べる方法はありませんので、RangeオブジェクトにFormula2プロパティが存在するかで判定します。

オブジェクトに特定のプロパティが存在するか調べる

オブジェクトに特定のプロパティが存在するかを調べる方法を解説します。一発でこれを行うプロパティは存在しませんので、オブジェクト.プロパティがエラーになるかどうかを調べて判定します。

数式内の自シート!を消去するマクロ

自シートを参照する「自シート名!」が数式内に入ってしまうと、読みにくくなってしまうだけでなく、ソートすると式が破損するという罠を生んでしまいます。今回はこれを自動でしょう供するマクロを紹介します。

条件を満たす列を削除する - Delete/Union

特定の条件を満たす列を削除する方法を解説します。For文でStep-1を利用して最終列から1行ずつ削除していく方法と、Unionメソッドで一つのRangeオブジェクトにしてから一括で削除する方法があります。

第1行の書式を最終行までコピーする - Rows

書式のコピーにはPasteSpecialが思い浮かびますが、行ごとコピーする場合はAutoFillメソッドが使用できます。クリップボードを介さず安全高速ですので、フィルハンドルのようなコピー処理にはこちらを使用しましょう。

セルの結合・解除をショートカットに登録する

セルの結合解除にはショートカットキーが設定されていません。これをショートカットキーに登録するためにセル結合機能をマクロで再現してみました。複数行実行時に自動で横方向結合する機能も付けましたのでご活用ください。

オートフィルをショートカットに登録する

セルの右下にカーソルを合わせたときに出る✚のコピー機能をオートフィル(フィルハンドル)と呼びます。これは便利なのですがショートカットがないため、マクロで再現してショートカットに登録してみましょう。

AutoFillとFillDownの違い

AutoFillとFillDownの違いを解説します。どちらも先頭のセルをセル範囲へコピーするメソッドですが、AutoFillはフィルハンドル、FillDownはCtrl+Dと対応しているためAutoFillの方がコピーの種類が豊富です。

セル範囲を先頭セルの値・式で埋める - FillDown

先頭セルをセル範囲全体へコピーするCtrl+DやCtrl+Rと同じ処理をVBAで実行するには、FillDown/FillUp/FillRight/FillLeftメソッドを使用します。連続データ、値/書式のみコピーをしたい場合はAutoFIllメソッドを使用します。

Collectionに要素が存在するかチェックする

Collection内に要素が存在するかチェックするには、標準機能がないため愚直にFor Each文で一致する要素があるかを判定します。DictionaryならExistsメソッド一発なので、出来ればそちらで実装しましょう。

DictionaryをKeyだけでCollectionのように使う

DictionaryはKeyとItemをセットで持っておく仕組みですが、Itemを無視してKeyだけを一次元配列として使用する方法があります。このKeyのみDictionaryはCollectionの上位互換なので積極的に活用しましょう。

WorksheetFunctionに一次元配列を渡すと配列が欠損する

WorksheetFunction(以下WF)に渡せる一次元配列には上限があり、65,537を超える件数の一次元配列を正しく受け取れません。二次元配列やRangeオブジェクトを渡せば正しく動くので一次元配列のみお気を付けください。

CollectionはFor文でループすると遅くなる

CollectionはIndexによるアクセスが遅いという特徴があり、ForEach文なら一瞬でもFor文だと数秒~数十秒かかってしまうことがあります。これはデータ件数が増えると加速度的に遅くなるので注意しましょう。

Dictionaryの格納件数による速度低下検証

処理が超速なことで知られるDictionaryですが、実はデータ件数が増えすぎると急に遅くなるという欠点もあります。件数の二乗に比例して処理が遅くなる傾向があるため、Dictionaryを分割するなどで対応します。

ファイルをバックアップするマクロ

現在作業中のブックを保存する際、上書き保存ではなく別名で保存しておきたい場面があります。ブック名_yyyymmddhhmm_作業メモという名称でファイルのバックアップを取るマクロを紹介します。