和風スパゲティのレシピ

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

サンプルコード

複数のシートをまとめてコピー/移動する

複数のワークシートを一度にコピー/移動する方法を紹介します。Worksheetsは配列を渡すと複数のシートを返してくれますので、そこからWorksheets(Array("集計表", "データ")).Copyと、単独シートと同じようにCopy/Moveメソッドを使用します。

アクティブシートを変えずにシートを追加・コピーする

アクティブシートを変えずに、シートを追加・コピー・移動する方法を解説します。アクティブシートを全く変えることなくメソッドを実行する方法はありませんので、元のアクティブシートを記憶し、後でそのシートをActivateして地道に達成します。

新規シートを新しいブックに追加する

新しいシートを、新規のブックに追加する方法を紹介します。それには Set 新規シート = Workbooks.Add.Worksheets(1) というコードを実行します。Workbooks.Addでブックを追加すればそこにシートがありますので、そのシートを取得すればOKです。

セル範囲を縮小する/見出し行を除外する

セル範囲を縮小する方法(見出し行を除外する方法)を紹介します。Set 下から1行減らしたセル範囲 = セル範囲.Resize(セル範囲.Rows.Count - 1) や、Set 上から1行減らしたセル範囲 = セル範囲.Offset(1).Resize(セル範囲.Rows.Count - 1)で取得できます。

セル範囲を元の大きさを基準に拡大縮小する

セル範囲を、元の大きさを基準に拡大縮小する方法を紹介します。セル範囲を変更するには、RangeオブジェクトのResizeプロパティを使用し、「セル範囲.Resize(セル範囲.Rows.Count + 1 , セル範囲.Columns.Count)」というコードを実行します。

重複しないよう連番付きでシート名を設定する

シートの名称設定は、すでに使われているシート名を指定するとエラーになってしまいます。これを回避するために、シート名が重複した場合は(2)、(3)、(4)…と連番を付与してからシート名を設定するコードを紹介します。

ブック内の最終(右端)シートを取得する

あるブックの最後のシートを取得する方法を解説します。これを一発で取得するWorkbooks("○○").LastSheetみたいなプロパティはありませんので、Set 最終シート = 指定ブック.Worksheets(指定ブック.Worksheets.Count)と地道に取得することになります。

文字列からシート名に使えない文字を消去する

ワークシート名には文字数と使用文字に条件があり、この条件に違反するとエラーが発生します。文字数の方は簡単で、Left関数で31文字以降をカットしてしまえばOKなのですが、禁則文字の方はReplace関数で該当の文字を1個ずつ消してあげる必要があります。

偶数シートなど飛び飛びのシートをループする

偶数番のシートや、3つおきのシートなど、規則性がある飛び飛びのシートをループ処理するコードを紹介します。Forステートメントの「Step」を使うのが最も基本的で、For シート番号 = 2 To 6 Step 2 という記述で2,4,6番目のシートを処理できます。

隣のシート(前のシートや次のシート)を取得する

あるシートを変数などで持っているときに、隣(前後)のシートを取得する方法を紹介します。Worksheetオブジェクトには、これを一発で取得するプロパティが用意されており「Next/Previousプロパティ」を使うことで、前後のシートを取得することができます。

指定のシートが何番目のシートか調べる

指定のシートが何番目のシートか調べる方法を解説します。例えばActiveSheetが何番目のシートかを調べるには、ActiveSheet.Indexを取得します。このIndexで求めた数値は、グラフシートなどがなければWorksheets(x)のxに入れて使うことができます。

シートを新規ブックにコピー/移動する

ワークシートを新しいブックにコピー/移動する方法を紹介します。この方法はとても簡単で、Worksheets("○○").Copy でOKです。移動する場合は、Worksheets("○○").Move になります。

シートを別のブック(の末尾)にコピー/移動する

ワークシートを別のブックにコピー/移動する方法を紹介します。コピー・移動する際は、 Worksheetの、Copy/Moveメソッドを使用し、これらのメソッドの引数「After/Before」には別のブックのシートも特に制約なく指定できます。

Ctrl+Shift+↓のセル範囲取得をVBAで行う方法

Ctrl + Shift + ↓によるセル範囲の選択はとても便利です。VBAでも使いたいのですが、残念ながら一発で取得するプロパティは無いため、スタートのセルと、Endプロパティで取得したセルを、Rangeプロパティで繋げることで取得します。

シート名をセル値から取得してWorksheetを指定する方法

セルの値からシート名を取得したくなることがあります。Worksheets(Range("A1"))と書きたくなるのですが、これではエラーになってしまいます。この解決策は非常に簡単で、Worksheets(Range("A1").Value)と、Valueプロパティ明示すればOKです。

WorksheetFunctionの呼び出しを短縮する方法

WorksheetFunctionはとても便利ですが、コードが長いという弱点があります。そこで、WorksheetFunctionオブジェクトをそのまま返すだけの関数をWfやFxなど短い関数名で作っておけば、その関数名だけでWorksheetFunctionを呼び出せます。

よく書くコードは汎用関数に - 作り方と使い方

どんなマクロでも使えるような関数のことを汎用関数と呼びます。よく書く処理は汎用関数にして持っておきましょう。同じコードを何回も書かなくて良くなるだけでなく、コードが読みやすくなり、重要な処理に集中できるようになります。

FileSystemObjectの呼び出しを短縮する方法

FileSystemObjectはとても便利なのですが、DimからCreateObjectまでの参照部分が面倒です。このCreateObjectを裏で行い、生成したFileSystemObjectを返すFunctionを用意することで、FileSystemObjectをあたかも定数のように扱えます。

ParamArrayを別関数のParamArrayに渡す方法

引数の数を可変にするParamArrayキーワードで受け取った引数を、別の関数のParamArrayに渡す方法を解説します。といいつつ私の調べた限り完全解答はなく、どうしても呼出元関数をいじる必要が出るようです。ひとつのヒントとなれば幸いです。

帳票出力マクロを簡単に書くためのクラスを作る

完成品の全体が見たい!という方のための、マクロサンプルです。今回のテーマは「データシート⇒帳票を出力」です。利便性をテーマに作成しましたので、クラスの参考にするなり、中身を見ずにコピペして使うなり、お好きな方法でご活用ください。

帳票出力マクロをクラスを使って書く

完成品の全体が見たい!という方のための、完成品マクロのサンプルコードです。今回のテーマは「データシート⇒帳票を出力」です。クラスの基本的な書き方を使って実装しておりますので、クラスを勉強し始めた方は、参考にしてみてください。

帳票出力マクロをプロシージャ分割して書く

完成品の全体が見たい!という方のための、完成品マクロのサンプルコードです。今回のテーマは「データシート⇒帳票を出力」です。関数(プロシージャ)分割を使って、メンテナンス性を意識したコードにしておりますので、参考にしてみてください。

最終行を取得する方法7選 - 基本構文とサンプルコード

Excelのデータ処理をマクロで自動化しようと思ったら、必ずついて回るのが「最終行の自動取得」です。データの処理がどんなものであれ、まずはデータがどこまで入っているかを確認して、処理を実行する範囲を決めないといけません。

セル範囲(Range)を指定する方法10選

セル範囲の指定は、簡単に書こうと思えば書けるので、普段はあまり考えない部分かもしれません。ですが読みやすさや書きやすさを追求しようと思えば、とても考えがいのある処理ですので、自分の知識の確認の意味でも、ちょっと確認してみましょう。

印刷映えする格子罫線を自動で引くマクロ

「外枠が実線で中が細い点線の格子罫線」を自動で引くマクロを紹介します。普通の格子罫線は印刷すると太くて気になりますが、一番細い点線を使うと、印刷時は点線ではなく細い直線になります。表をキレイに印刷したいときは、この設定で罫線を引きましょう。

汎用マクロ・便利ツール用の共通関数について

本ブログで紹介している、汎用マクロ・便利ツールは、特に頻出の処理を、共通の関数として抽出して使っています。共通関数のソースコードと解説を以下に記しておきますので、コードの説明が読みたい方はご利用ください。

セル範囲の値だけをコピーする - 基本構文とサンプルコード

セルの値だけを、範囲から範囲へコピーする方法を紹介します。A1:C3の正方形を、D4:F6にコピーするコードは、実は「Range("D4:F6").Value = Range("A1:C3").Value」で済みます。「値貼り付け」より速くて読みやすいので、こちらを使いましょう。

文字列の中にある数字を抽出する関数

指定の文字列から数字だけを抜き出す汎用関数を紹介します。数値をすべて抽出する(123みかん456 ⇒ 123456)タイプと、最初に登場したものを抽出する(1,100円(税10%) ⇒ 1,100)タイプがありますので、目的にあった方をご覧ください。

ダイアログボックスでフォルダを指定・選択する

マクロの実行中に、ダイアログボックスを開き、ユーザーにフォルダを指定・選択してもらうコードを、コピペして使える関数にしたものを紹介します。ユーザーが選択したフォルダの「パス」を返す関数なので、Stringの変数に入れたりして使ってください。

ブックを現在開いているかチェックする関数

ある名前のブックを、現在開いているかを調べる関数を紹介します。Worksbooks(ブック名)の「インデックスが有効範囲にありません」エラーを回避するのによく使います。やり方は簡単で、教本のような「コレクションに対するFor Each」で処理します。