忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBAスタンダード対策】SaveAs メソッドによる「名前を付けて保存」を攻略!

ブックを別名で保存する際に使用する SaveAs メソッド。VBAスタンダード試験では、保存先パスを指定する第1引数(Filename)の書き方や、保存後のアクティブブックの状態に関する理解が頻繁に問われます。

1. 問題:SaveAs メソッドによるファイル保存指定

【 問題 】 アクティブなワークブックを、C:\Data フォルダの中に Report_2026.xlsx というファイル名で「名前を付けて保存」したい。空欄 ( A ) に入る正しい記述はどれでしょうか?

Sub SaveAsTest()
    Dim folderPath As String
    Dim fileName As String

    folderPath = "C:\Data\"
    fileName = "Report_2026.xlsx"

    ( A )
End Sub

① ActiveWorkbook.SaveAs Path:=folderPath & fileName
② ActiveWorkbook.SaveAs Filename:=folderPath & fileName
③ ActiveWorkbook.SaveAs File:=folderPath & fileName
④ ActiveWorkbook.SaveAs Name:=folderPath & fileName

2. 正解:SaveAs メソッドの引数に関する正解

正解: ② ActiveWorkbook.SaveAs Filename:=folderPath & fileName

3. 解説:SaveAs メソッドの基本構文と重要な引数ルール

ワークブックを別の名前や異なるパスで保存するには Workbook.SaveAs メソッドを使用します。

[ SaveAs メソッドの構造とひっかけポイント ]

構文:Workbook.SaveAs( Filename , FileFormat , ... )

1. 第1引数の名前は「Filename」!
保存先のフォルダパスとファイル名を結合したフルパスを指定する引数名は Filename です。直感的に「Path」や「Name」、「File」を選びがちですが、これらは名前付き引数として存在しないためコンパイルエラーとなります。

2. SaveAs を実行した後の動作(重要!)
SaveAs を実行すると、「現在開いているブック自体」が新しい保存先のブックに切り替わります(元のファイルは閉じられ、保存後のファイルがアクティブになります)。
※元のファイルを開いたまま別名コピーを保存したい場合は、SaveCopyAs メソッドを使用します。

ここが試験に出る!: スタンダード試験では、SaveAs の引数名(Filename)のひっかけ問題のほか、「マクロ付きブック(.xlsm)として保存する場合の FileFormat 引数(xlOpenXMLWorkbookMacroEnabled)」 の指定要否についてもよく出題されます。


4. まとめ

「名前を付けて保存は Workbook.SaveAs Filename:="フルパス" 」。この構文と引数名を正確に覚えておけば、作成したレポートを日付や拠点名入りのファイル名で自動保存するマクロを迷わず実装できるようになります。


PR

【VBAスタンダード対策】Format 関数による数値の桁区切り・表示形式の変換を攻略!

VBAで数値(12345)をカンマ区切りの文字列(12,345)や通貨表示に整形する際に必須となるのが Format 関数 です。よく使われる書式記号の役割と指定方法をマスターしましょう。

1. 問題:Format 関数による数値の表示形式指定

【 問題 】 下記のコードを実行して FormatTest プロシージャを呼び出した際、メッセージボックス(MsgBox)に "12,345"(3桁区切りの文字列)と表示させたい。空欄 ( A ) に入る記述として正しいものはどれでしょうか?

Sub FormatTest()
    Dim num As Long
    num = 12345

    MsgBox ( A )
End Sub

① Format(num, "#,##0")
② Format(num, "Standard")
③ SetFormat(num, "3-digit")
④ NumberFormat(num, "#,##0")

2. 正解:Format 関数の記述に関する正解

正解: ① Format(num, "#,##0")

3. 解説:Format 関数の構文と「#,##0」書式指定子の構造

値の表示形式を指定した文字列に変換するには Format(値, "書式") という構文を使用します。

[ Format 関数の構造と書式記号 ]

構文:Format( 変換したい値 , "表示形式のパターン" )

1. 代表的な数値の書式記号
#,##0 : 3桁ごとにカンマ区切りを入れる(値が 0 の場合は "0" と表示する)
#,### : 3桁ごとにカンマ区切りを入れる(値が 0 の場合は表示しない)
#,##0円 / \"#,##0 : カンマ区切り+通貨単位の追加(例: 12,345円)

2. 選択肢 ④ NumberFormat との違い(超頻出トラップ!)
NumberFormatNumberFormatLocal は、Range オブジェクトのプロパティです(例: Range("A1").NumberFormatLocal = "#,##0")。
VBAのコード内で「値や変数を整形して文字列を取得する」場合は Format 関数 を使用します。

ここが試験に出る!: スタンダード試験では、セルの表示形式を設定する「Range.NumberFormatLocal」と、変数の値をフォーマット変換する「Format 関数」の混同を狙う問題が多発します。「変数や値をフォーマット変換する組み込み関数は Format」と区別して覚えましょう。


4. まとめ

「3桁カンマ区切りの文字列に変換するなら Format(値, "#,##0") 」。この関数を押さえておけば、メッセージボックスに金額を表示させたり、テキストファイル出力時に数値をきれいなカンマ区切り形式で整形したりする処理がスムーズに書けるようになります。


【VBAスタンダード対策】セルの値が「日付」に変換できるかを判定する組み込み関数を攻略!

データ入力チェックにおいて、数値判定(IsNumeric)と並んで非常に重要なのが「値が日付として正しく評価・変換できるか」の判定処理です。VBAで用意されている専用の判定関数と、その判定ロジックを押さえましょう。

1. 問題:日付変換の可能性を判定する関数

【 問題 】 下記のコードは、セル A1 に入力されている値が日付(または日付として認識できる文字列)であるかを判定し、正しい日付形式の場合のみメッセージボックスに「有効な日付です」と表示しようとしています。空欄 ( A ) に入る正しいVBA組み込み関数はどれでしょうか?

Sub CheckDateCell()
    Dim val As Variant
    val = Range("A1").Value

    If ( A )(val) Then
        MsgBox "有効な日付です"
    Else
        MsgBox "日付ではありません"
    End If
End Sub

① IsDateFormat
② IsDate
③ CDate
④ IsCalendar

2. 正解:日付判定関数に関する正解

正解: ② IsDate

3. 解説:IsDate 関数の役割と CDate 関数との違い

VBAで渡された値が「日付型データ」であるか、あるいは「日付を表す文字列(例: "2026/08/14" や "2026-08-14" など)」として認識可能かを判定するには IsDate 関数 を使用します。

[ 判定関数の構造と選択肢の罠 ]

1. 判定結果(戻り値)
IsDate(引数) は、引数が日付として有効であれば True、日付として認識できなければ(例: "abc" や "2026/02/30" など存在しない日付)False を返します。

2. 選択肢 ③ CDate との違い(超頻出トラップ!)
IsDate:日付に変換できるか「調べる」関数(True / False を返す)
CDate:文字列や数値を実際に日付型(Date型)へ「変換する」関数

★ 変換できない値に対して直接 CDate("abc") を実行すると「型が一致しません」というエラーでプログラムが停止してしまいます。そのため、「まず IsDate でチェックしてから CDate で変換する」のがVBAの定石パターンです。

ここが試験に出る!: スタンダード試験では、「判定を行う IsDate」と「型変換を行う CDate」の役割の違いを狙う問題が頻出します。If 条件式の中で判定用として使うのは IsDate であることを確実に識別できるようにしておきましょう。


4. まとめ

「日付に変換できるか調べるのは IsDate(値) 」。この判定関数をマスターしておけば、ユーザーが「2026/13/45」や「未定」といった不正な日付フォーマットをセルに入力した場合でも、処理を実行する前に安全にエラー検出を行えるようになります。


【VBAスタンダード対策】セルの値が「数値」かどうかを判定する組み込み関数を攻略!

セルに入力されている値が数値なのか、文字列(または空欄)なのかをプログラムで判定する処理は、データチェックの基本です。VBAで用意されている「数値判定を行う組み込み関数」と、判定時の注意点を押さえましょう。

1. 問題:セル値の数値判定に使用する関数

【 問題 】 下記のコードは、セル A1 の値が数値(または数値として評価できる値)であるかを判定し、数値の場合のみその値を2倍にしてメッセージボックスに表示しようとしています。空欄 ( A ) に入る正しいVBA組み込み関数はどれでしょうか?

Sub CheckNumericCell()
    Dim val As Variant
    val = Range("A1").Value

    If ( A )(val) Then
        MsgBox val * 2
    Else
        MsgBox "数値ではありません"
    End If
End Sub

① IsNumber
② IsNumeric
③ VarType
④ IsValue

2. 正解:数値判定関数に関する正解

正解: ② IsNumeric

3. 解説:IsNumeric 関数の特徴と「Excelワークシート関数」との違いの罠

VBAで値が数値(あるいは数値に変換可能か)を判定するには IsNumeric 関数(イズ・ニューメリック)を使用します。

[ 判定関数の構造と引っ掛けポイント ]

1. 選択肢 ① IsNumber との違い(超重要!)
Excelのワークシート関数には ISNUMBER 関数が存在しますが、VBAの組み込み関数としては存在しません。VBAで直接使えるのは IsNumeric です(ワークシート関数を使う場合は WorksheetFunction.IsNumber(...) と書く必要があります)。

2. IsNumeric 関数の判定ルール
IsNumeric(値) は、渡されたデータが数値型(Integer, Long, Doubleなど)である場合や、「文字列であっても数値に変換できる場合(例: "123")」True を返します。
※日付データ(例: "2026/08/14")や全角数字(例: "123")も、VBAの仕様上数値変換が可能なため True と判定される点に注意が必要です。

ここが試験に出る!: スタンダード試験では、Excel関数名と紛らわしい「IsNumber」や、型を数値で返す「VarType」などを選択肢に混ぜて受験者を惑わせてきます。「VBAの組み込み関数で数値判定をするなら IsNumeric」と即答できるように覚えておきましょう。


4. まとめ

「VBAで数値判定をする時は IsNumeric(セル値) 」。この関数を活用すれば、ユーザーが入力したセルデータを計算する前に「文字が交じっていて計算エラー(型が一致しません)になる」のを防ぐ事前チェック処理をスマートに記述できるようになります。


【VBAスタンダード対策】Workbooks.Open メソッドの引数と戻り値の処理を攻略!

外部のExcelファイルをVBAから開く際に使う Workbooks.Open メソッド。試験では、開いたブックを変数に格納して操作する際の「Set ステートメントの要否」「括弧 ( ) をつける・つけないの記述ルール」が非常に頻出します。

1. 問題:Workbooks.Open メソッドによるブック変数の取得

【 問題 】 下記のコードは、C:\Data\Sales.xlsx を開き、開いたブックの1番目のシート名をメッセージボックスに表示しようとしています。空欄 ( A ) に入る記述として正しいものはどれでしょうか?

Sub OpenWorkbookTest()
    Dim wb As Workbook
    Dim filePath As String
    filePath = "C:\Data\Sales.xlsx"

    ( A )

    MsgBox wb.Worksheets(1).Name
End Sub

① wb = Workbooks.Open(filePath)
② Set wb = Workbooks.Open(filePath)
③ Set wb = Workbooks.Open filePath
④ Workbooks.Open(filePath) As wb

2. 正解:Open メソッドの構文に関する正解

正解: ② Set wb = Workbooks.Open(filePath)

3. 解説:メソッドの戻り値取得と括弧 ( ) の記述ルール

Workbooks.Open メソッドは、指定したファイルを開くと同時に、開いたそのファイル自体を表す Workbook オブジェクトを呼び出し元に返します(戻り値)。

[ 記述の構造とルールのポイント ]

1. オブジェクト変数への代入は Set が必須!
変数 wb は Workbook という「オブジェクト(参照型データ)」です。VBAにおいてオブジェクトを変数に代入する際は、必ず頭に Set キーワードをつけなければなりません(①のように Set を省くと「オブジェクト変数または With ブロック変数が設定されていません」というエラーになります)。

2. 戻り値を受け取る場合は引数をカッコ ( ) で囲む!
VBAでは、メソッドの戻り値を変数に代入して受け取る場合、引数をカッコで囲む必須ルールがあります(③のように Set を使ってもカッコがないとコンパイルエラーになります)。

★ 正解の Set wb = Workbooks.Open(filePath) は、「Setによるオブジェクト代入」と「戻り値取得のためのカッコ囲み」の両方のルールを満たしています。

ここが試験に出る!: スタンダード試験では、戻り値を受け取らない呼び出し(例:Workbooks.Open filePath)と、変数で受け取る呼び出し(例:Set wb = Workbooks.Open(filePath))のカッコや Set の有無を混ぜ合わせた誤答選択肢が頻出します。「Set で受けるならカッコが必要」というペアの構造を丸ごと暗記しておきましょう。


4. まとめ

「開いたブックを変数 wb に保持して操作するなら Set wb = Workbooks.Open(...) 」。この構文を押さえておけば、別ブックを開いてデータを転記し、保存して閉じる(wb.Close SaveChanges:=True)という一連の外部ファイル自動処理も完璧に制御できます。