最終更新日:2023-08-23VBAサンプル集:そのまま使える実用マクロ集ExcelマクロVBAの実用的なサンプル集として、なるべくそのまま使えるようにVBAコードを書いています。VBAコードの細部についての技術的な解説は少なめになっています。技術的な解説は、以下をご覧ください。Application外のオブジェクト:マクロVBA技術解説VBAサンプル集として「そのまま使えるVBAコード」とは言え、全ての環境においてそのままで実行可能であるとは限りません。PC環境やExcelのバージョンによってはエラーや実行結果が違ってくることもありえます。掲載時点で特定環境において動作確認したものになりますので、実行環境により修正が必要になる場合もあります。製品版の販売ではありません、あくまでサンプルVBAであることは承知おきください。・連続セル範囲の選択のまとめ1行置きにする行挿入(Insert)A列に連続データが入っているとします。これを1行置きにします。ポイントは下から行うことです。上からやると、どんどん下に追いやられてしまいます。これで、最終行を取得しています。・全てのシートを印刷するなら重複削除してコピー(AdvancedFilter)重複データを排除して、別シートにコピーする場合です。以下の表で説明します。フィルターオプションを使います。このマクロは、この指定と同じになりります。似たような方法ですが、コピー部分を自分で記述する場合です。これらのチェックをせずに開いてしまうと、マクロがエラー停止してしまいます。ここでは、これらのチェック方法についての具体的なVBAコードを紹介します。ブックを閉じる(Close)ブックを閉じる時の処理方法です。これは、次のように書くこともできます。保存しないで閉じる場合。罫線を簡単に引く(Borders,BorderAround)エクセルでは、罫線を引く事が多いです。この罫線は、以外に処理時間もかかりますし、やり方によっては、VBAの行数も多くなります。簡単に罫線を引く方法です。以下の表を作成する場合です。罫線を引く順番等、いろいろありますが、とにかく短いコードにしてみます。・マクロが途中で終了した場合オートフィルター(AutoFilter)エクセルでは、定番機能のフィルターです。「Sheet1」のA列でフィルターし、「Sheet2」へコピーします。基本的なフィルターです。フィルターのセル範囲指定は、いろいろな指定が可能です。」も参考にして下さい。日付のオートフィルタ(AutoFilter)とても便利なオートフィルターですが、日付となると、結構大変です。以下の表で説明します。普通は、こんなように指定します。2007以降で追加された機能です。印刷ダイアログを使用する(xlDialogPrint)入力しやすいように、セルに色をつけている事が多いと思いますが、印刷時には、ちょっとじゃまな場合もあります。インク(トナー)も無駄ですしね。印刷時に色指定を解除して印刷する方法になります。印刷タイアログを表示します。・サイト内の関連ページシートを名前順に並べ替えるシートを名前順に並べ替える方法になります。配列を使っていますが、配列が難しい場合は、シートに書き出して処理すれば良いでしょう、並べ替えもシート上なら簡単です。上記では、シート名を文字列として処理しています。数式内の不要なシート名を削除する(HasFormula)複数のシートにまたがる数式を入力していると、自身のシート名!が数式についてしまいます、この自身のシート名!は不要であり、式を見づらくしてしまいます、この不要なシート名を、マクロVBAで一括削除します。ブックの全シート、全セルを対象として、数式の中から、自身のシート名!を削除するマクロVBAになります。数式の参照しているセルを取得するセルに入っている数式の参照しているセルを取得するには、RangeのPrecedentsプロパティを使いますが、このプロパティは他のシートの参照には対応していません。セルの参照先を取得するプロパティには、Dependentsプロパティがあります。条件付き書式で変更された書式を取得する条件付き書式が設定されている場合、当然ですが見た目は、本来そのセルに設定されている書式ではなく、条件付き書式の条件によって設定されている書式になります。VBAで、この条件付き書式によって設定された書式を取得します。・セル結合/解除の最後にセル結合なんて絶対に許さないんだからねセル結合の弊害はネットに溢れているのでここで改めて説明の必要はないでしょう。いえ、ついついセル結合してしまう事ありますよね、人間だからね。VBAで適切に処理すればセル結合もきちんと処理は可能です。不要となったシートを削除するマクロVBAのサンプルです。不定数のシート名を指定して削除できるようにSubを作成します。名前で指定されたシートがない場合は特に何もしません。指定されたシート名のシートがある場合のみ削除します。セル番地でバラバラに指定されたセルの削除シート内の複数のセルを削除します。削除するセルはバラバラです。いうVBAを書いたら良いでしょうか。セル削除後は上方向にシフトします。セルの削除についての基本は以下を参照してください。:マクロVBAサンプル集ユーザー定義関数でフリガナを取得する(GetPhonetic)ワークシート関数の、「PHONETIC」では、他のソフト等からコピペした漢字は取得できません。そこで、VBAでユーザー定義関数を作成し、読みを取得できるようにします。A列はメモ帳よりコピペしました。B列に、ユーザー定義関数を指定して、振り仮名を取得しています。ユーザー定義関数でハイパーリンクのURLを取得(Hyperlink)ネットから、何らかの一覧をエクセルにコピペすると、文字列や画像等に、リンクの設定がくっついてきます。URLが表記されていれば良いですが、表示されていない事の方が多いでしょう。そこで、VBAでユーザー定義関数を作成し、URLを取得できるようにします。ジャンプ機能の最後に「値の貼り付け」をショートカットに登録(OnKey)コピーペーストの質問で、よく目にするのは、値の貼り付けが面倒だというものです。ショートカットが無いからのようです。ネットを調べて見たのですが、どれもしっくりこないので、作ってみました。いろいろな方法が考えられるのですが、簡単かつ直ぐに使えて、他の人にも配布可能なものが良いと思います。「セルの結合」をショートカットに登録(OnKey)「値の貼り付け」をショートカットに登録が好評だったので(本当かな)、その第二弾!セルの結合をショートカットに登録します。作り方は、前回の、「値の貼り付け」をショートカットに登録と同様です。コピーペーストの質問で、よく目にするのは、値の貼り付けが面倒だというものです。半角カナのみ全角カナに変換する半角カナのみ全角カナに変換します。ネットを探してみたところ、あるにはあるのですが、どうも中途半端。使えて、汎用性のあるプログラムが見つからなかったので、作ってみました。String'元...計算式の元となる数値定数を消去する(Precedents)指定のセルの計算式が参照しているセルの数値定数をクリアします。参照しているセルが、さらに他のセルを参照している場合は、その先のセルを消去します。計算式の入っているセルを起点にして、その参照先をすべて検索し、計算式の元となるセル(数値定数が入っているセル)の値をクリアします。Beep音で音楽(Beep,Sleep)時々検索されるので、Beep音で音楽を演奏してみましょう。プログラムはほぼAPIをCALLするだけです。