VBA樹林– category –
-
【VBA】引数を持つFunction(関数)の作り方と使い方|戻り値の返し方
はじめに VBAのプロシージャには、これまで見てきた Sub の他に、もう一つ「Function」があります。Sub と Function の最大の違いは、Function は処理の結果として「戻り値(返り値)」を返すことができる点です。 Function を自作することで、Excelの SUM... -
【VBA】引数の参照渡し(ByRef)と値渡し(ByVal)の違いとは?
はじめに VBAでサブルーチンに引数を渡す際、「参照渡し(ByRef)」と「値渡し(ByVal)」という2つの方法があることをご存知でしょうか?この2つは似て非なるもので、違いを理解しないままでいると、「呼び出したマクロに変数を渡したら、元の値まで変わ... -
【VBA】サブルーチンに引数を渡す方法|再利用性の高いコードを書くための基本
はじめに VBAの処理をサブルーチン(部品化されたマクロ)に分割するとコードが整理されますが、そのままだと「特定のセル範囲」や「固定の文字列」に対してしか処理を実行できません。 サブルーチンをよりパワフルで再利用可能な「万能な部品」にするため... -
【VBA】処理をサブルーチン化(部品化)してコードを整理する方法
はじめに VBAでマクロを作成していると、一つのプロシージャの中に何十行、何百行とコードが連なり、「どこで何をやっているのか分からない…」と、巨大な「スパゲッティコード」になってしまうことがあります。このようなコードは、後から修正したり、他の... -
【VBA】Variant型の中身をTypeName関数で判定する方法
はじめに VBAの Variant 型は、文字列、数値、日付、さらにはセル範囲(Rangeオブジェクト)まで、あらゆる種類のデータを格納できる非常に柔軟なデータ型です。この特性を活かすと、様々な種類の引数を受け取れる、汎用性の高いマクロ(プロシージャ)を... -
【VBA】ユーザー定義型(Type)の使い方|複数の関連データをまとめて扱う
はじめに VBAでプログラムを書く際、一人の従業員に関する情報(社員ID、氏名、入社日など)のように、複数の関連データをひとまとめにして扱いたい場面がよくあります。これらの情報を別々の変数で管理すると、コードが煩雑になり、管理も大変です。 この... -
【VBA】Enumとビット演算で、複数の選択肢(フラグ)を管理する応用テクニック
はじめに ユーザーに「A, B, Cの中から好きなものを複数選択してください」といった機能を提供したい場合、通常のEnum(列挙型)ではうまく管理できません。Enumは基本的に択一式の選択肢を扱うものだからです。 しかし、Enumの各メンバーに 2のべき乗 (1,... -
【VBA】Enum(列挙型)の使い方|マジックナンバーをなくしコードを読みやすくする方法
はじめに VBAでプログラムを書いていると、「もし shippingType が 1 なら通常配送、2 なら速達…」のように、特定の数値を特定の意味として扱う場面がよくあります。 ' マジックナンバーを使った悪い例 Sub ProcessOrder(shippingType As Long) If shippin... -
【Excel VBA】Accessにテーブルを新規作成し、Excelからデータを流し込む方法
Excel VBAからAccessを操作する際、既存のテーブルにレコードを追加するだけでなく、テーブルそのものをVBAで新しく作成したい、という場合があります。例えば、毎月の集計結果を、月ごとの新しいテーブルとしてAccessに保存していくようなケースです。 こ... -
【VBA】連想配列 Scripting.Dictionary の使い方を徹底解説!
はじめに VBAの配列は、myArray(0) のように数値のインデックスでデータを管理します。しかし、「商品名」をキーにして「価格」を取り出す、といったように、文字列をキー(添え字)にしてデータを扱いたい場面は非常に多くあります。 このような「キーと... -
【VBA】Collectionオブジェクトの使い方入門!可変リストを手軽に扱う
はじめに VBAで複数のデータを扱う際、配列は非常に便利ですが、「処理の途中で要素の数を変えたい」場合には、動的配列と ReDim Preserve を使う必要があり、少し手間がかかります。 もっと手軽に、要素の追加や削除を自由に行いたい場合に最適なのが「Co... -
【VBA】Join関数で、配列の全要素を一つの文字列に連結する方法
はじめに VBAで配列に格納した複数の文字列データを、"東京,大阪,名古屋" のように、特定の区切り文字を挟んで一つの文字列にまとめたい、という場面はよくあります。Forループを使って一つずつ文字列を連結していく方法もありますが、もっとスマートな方... -
【VBA】Split関数で、区切り文字を含む一つの文字列を配列に変換する方法
はじめに VBAで、"東京/大阪/名古屋/福岡" のように、特定の区切り文字(この場合は /)で区切られた一つの長い文字列を扱う場面はよくあります。このような文字列から、各都市名を個別のデータとして取り出したい場合、どうすればよいでしょうか? 手作業... -
【VBA】配列のインデックスを常に1から始める Option Base 1 の使い方と注意点
はじめに VBAの配列は、Dim myArray(3) のようにサイズだけを指定して宣言すると、インデックス番号が 0 から始まります(0, 1, 2, 3 の4要素)。しかし、プログラミングに慣れていないと、この「0始まり」が直感的でなく、混乱の原因になることがあります... -
【VBA】動的配列の使い方 ReDim と ReDim Preserve の違いを解説
はじめに VBAで配列を Dim myArray(1 To 5) のように宣言すると、そのサイズは固定されます。しかし、プログラムを実行してみないと、配列にいくつの要素を格納する必要があるか分からない、という場面は非常に多くあります。例えば、条件に一致するデータ... -
【VBA】配列の最初のインデックス番号と最後のインデックス番号を取得する方法 (LBound, UBound)
はじめに VBAで配列を扱う際、その配列にいくつの要素が含まれているのか、またインデックス番号がいくつから始まっているのかを、プログラムの中で正確に知りたい場面がよくあります。特に、Forループで配列の全要素を処理する場合、この情報は不可欠です... -
【VBA】2次元配列の使い方入門!Excelの表形式データを高速処理
はじめに VBAの「配列」は、通常、データを一列に並べた「1次元」のものを指します。しかし、Excelのワークシートのように、行と列からなる表(テーブル)形式のデータを扱いたい場合、より強力な「2次元配列」が非常に役立ちます。 2次元配列は、縦横に仕... -
【VBA】Array関数で配列を簡単・手軽に作成する方法
はじめに VBAで配列を使う際、Dimで宣言してから、myList(0) = ..., myList(1) = ... のように、一行ずつ要素を代入していくのが基本です。しかし、あらかじめ中に入れるデータが決まっている場合、この方法は少し冗長に感じられますよね。 そんなときに非... -
【VBA】配列のインデックス番号を1から始める方法と LBound/UBound の使い方
はじめに VBAの配列は、デフォルトではインデックス番号(各要素を識別する番号)が 0 から始まります。しかし、例えば「1月〜12月」のデータのように、1 から始まる番号で管理したい場合も多いですよね。 VBAでは、配列を宣言する際にインデックスの開始... -
【VBA入門】配列の使い方を徹底解説!宣言からループ処理まで
はじめに VBAで複数のデータを扱う際、「変数」をデータの数だけ用意するのは大変ですよね。例えば、12ヶ月分の売上データを扱うのに、12個の変数を宣言するのは非効率です。 こんなときに活躍するのが「配列」です。配列は、複数のデータを格納できる、仕... -
【VBA入門】変数と定数の使い方、スコープ(適用範囲)の違いを徹底解説
はじめに VBAでプログラミングを始めるにあたり、最初に理解すべき最も重要な概念の一つが「変数」と「定数」です。これらは、数値や文字列といったデータを一時的に格納しておくための「箱」のようなものです。 変数 (Variable): 中身を自由に入れ替えら... -
【VBA】Excelで入力したセルの値を自動で読み上げる機能(Speak on Enter)を切り替える方法
はじめに Excelには、セルに値を入力して Enter キーを押した瞬間に、その入力内容を音声で自動的に読み上げる機能が備わっています。これは、伝票などの紙媒体から数値を連続して入力する際に、目線をExcelシートに戻すことなく、耳で入力内容を確認でき... -
【VBA】Excelに任意のテキスト(文字列)を音声で読み上げさせる方法
はじめに Excel VBAの音声読み上げ機能は、セルの値を読み上げるだけでなく、プログラム内で作成した任意の文字列を自由に話させることもできます。 この機能を活用すれば、特定のシートを開いたときに「入力時の注意事項」を音声でアナウンスしたり、マク... -
【VBA】Excelのセル範囲の値を音声で読み上げる方法 (Speakメソッド)
はじめに Excelに、入力されたデータを音声で読み上げてくれる機能があるのをご存知でしょうか? この機能は、主にアクセシビリティ向上のために用意されていますが、データ入力後の目視と聴覚によるダブルチェック(読み合わせ確認)にも非常に役立ちます... -
【VBA】ボタンや図形に登録されたマクロを動的に切り替える方法 (OnAction)
はじめに Excelのシート上に配置したボタンや図形をクリックしたときに実行されるマクロを、状況に応じて動的に切り替えたいと思ったことはありませんか? 例えば、同じボタンを「開始」ボタンとして使い、一度クリックされたら「停止」ボタンに変化させ、... -
【VBA】シート上のスピンボタンを使いこなす!主要プロパティ徹底解説
はじめに Excelのシート上で、ユーザーに数値を簡単に入力させたい場合、「フォームコントロール」の「スピンボタン」が非常に便利です。マウスで上下の矢印をクリックするだけで、数値を増減させることができるため、キーボードでの入力ミスを防ぎ、直感... -
【VBA】シート上のオプションボタンをグループボックスで管理し、選択項目を判定する方法
はじめに Excelのシート上で、「問1. プランを選択」「問2. 支払い方法を選択」のように、複数の独立した設問にオプションボタンで回答させたい場合、そのまま配置すると全てのボタンが一つのグループになってしまいます。 この問題を解決するのが、「フォ... -
【VBA】シート上のオプションボタンで選択された項目を判定する方法
はじめに Excelのシート上で、ユーザーに複数の選択肢から一つだけを選ばせる場合、「フォームコントロール」の「オプションボタン」が役立ちます。アンケートや設定シートなどで、排他的な選択を促すのに最適です。 VBAを使えば、シート上に配置された複... -
【VBA】シート上のチェックボックスを使いこなす!主要プロパティ解説 (Caption, Value)
はじめに Excelのシート上に配置できる「フォームコントロール」のチェックボックスは、タスクの完了確認や、オプションのオン/オフを切り替える際に非常に便利なUI(ユーザーインターフェース)です。 VBAでこのチェックボックスを操作するためには、その... -
【VBA】シート上のコンボボックス(ドロップダウン)を使いこなす!主要プロパティ解説
はじめに Excelのシート上に配置できる「フォームコントロール」のコンボボックス(VBA上では DropDown オブジェクト)は、省スペースでユーザーに選択肢を提示できる便利なコントロールです。 VBAでこのコンボボックスを自在に操るためには、その主要なプ...