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

【VBA】ThisWorkbook.Pathで簡単取得!開いているマクロブックのフォルダパスを活用する方法

VBAでファイル操作を行う際、フォルダの場所(パス)をコード内に直接書く(ハードコーディングする)と、ファイルを別の場所に移動したときにエラーになってしまいます。ThisWorkbook.Path を使えば、マクロが保存されているフォルダのパスを動的に取得できるため、環境が変わっても柔軟に動作するプログラムが作れます。

1. 基本概念:ThisWorkbook.Path とは?

ThisWorkbook.Path は、現在マクロが実行されているExcelファイル(自ブック)が保存されているフォルダの絶対パスを文字列で返します。

[ 特徴 ]
・マクロ付きブック(ThisWorkbook)が存在するフォルダのパスを取得する。
・末尾に「\(円マーク/バックスラッシュ)」は含まれない。
・ブックが一度も保存されていない未保存状態の場合は、空文字("")を返す。

2. 実践サンプル:自ブックのパスを取得して出力する

ポイント:末尾の「\」を連結してファイルパスを作る

自ブックと同じフォルダ内にある別のファイルやフォルダを指し示す場合、`ThisWorkbook.Path & "\"` とつなぐのが実務での基本テクニックです。

Sub ShowWorkbookPath()
  Dim currentPath As String
  
  ' 自ブックのフォルダパスを取得
  currentPath = ThisWorkbook.Path
  
  ' 1. パスそのものを出力
  Debug.Print currentPath
  
  ' 2. 同じフォルダ内のファイルを指すフルパスの例
  Debug.Print currentPath & "\データ.xlsx"
End Sub

3. 実行結果

イミディエイトウィンドウには、マクロが保存されているフォルダの位置に応じて以下のように表示されます。

C:\Users\Username\Documents
C:\Users\Username\Documents\データ.xlsx

4. エンジニアの視点:相対パス感覚で書けるメリットと注意点

1. ポータビリティの向上: `ThisWorkbook.Path` を基準に処理を組むと、フォルダごとデスクトップや共有サーバー、他人のPCへ移動させてもそのまま動きます。これぞまさに「自走するツール」の極意です。
2. ActiveWorkbook.Path との違い: `ActiveWorkbook` は「今画面でアクティブになっているブック」を指すため、処理中に別のブックを開くと取得先が変わってしまう危険があります。マクロ自身がある場所を基準にするなら、必ず `ThisWorkbook` を使いましょう。
3. 保存状態の事前チェック: 新規作成したばかりの未保存ブックで実行すると空文字が返り、後続のファイル参照でエラーになります。実務では `If ThisWorkbook.Path = "" Then` で保存済みか確認するガード句を入れておくと「いけいけ」で堅牢なコードになります。


5. まとめ

ファイルパスの動的取得は、脱ハードコーディングの基本中の基本です。`ThisWorkbook.Path` を使いこなして、環境の変化やファイルの移動にもびくともしないスマートなVBAツールを作成していきましょう!


PR

【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)という一連の外部ファイル自動処理も完璧に制御できます。


【VBAスタンダード対策】If 文における And / Or 演算子の論理優先順位を攻略!

If 文で複数の条件を組み合わせる際に使用する And(かつ)と Or(または)。1つの If 条件式の中に両方が混在している場合、どちらが優先して評価されるかという「論理演算子の優先順位構造」を正しく把握しておく必要があります。

1. 問題:And と Or が混在する条件式の評価

【 問題 】 下記のコードを実行して CheckLogic プロシージャを呼び出した際、メッセージボックス(MsgBox)に表示される文字列として正しいものはどれでしょうか?

Sub CheckLogic()
    Dim age As Integer
    Dim member As Boolean
    Dim coupon As Boolean

    age = 25
    member = False
    coupon = True

    If age >= 60 Or member = True And coupon = True Then
        MsgBox "割引適用"
    Else
        MsgBox "通常料金"
    End If
End Sub

① 割引適用
② 通常料金
③ 条件式の構文エラー(コンパイルエラー)が発生する
④ 実行時エラーが発生する

2. 正解:And と Or の評価順序に関する正解

正解: ② 通常料金

3. 解説:「And 優先」で評価される論理演算の構造

VBAの仕様上、かっこ ( ) を使っていない場合、AndOr よりも優先して先に計算される」という明確な優先順位ルールが存在します。

[ 条件式の評価構造ステップ ]

元の条件式:age >= 60 Or member = True And coupon = True

1. 優先度の高い And を先に結合・評価:
   (member = True And coupon = True) の部分が先に判定されます。
   ・member は False
   ・coupon は True
   ⇒ False And True の結果は False となります。

2. 残った Or を評価:
   age >= 60 Or [ステップ1の結果(False)] を判定します。
   ・age >= 60 (25 >= 60) は False
   ⇒ False Or False の結果は最終的に False となります。

★ したがって、If ブロックは実行されず、Else 側の "通常料金" が出力されます。

ここが試験に出る!: スタンダード試験では、「左から順番に Or から計算してしまう」という勘違いを誘う問題が頻出します。もし「(60歳以上または会員)であり、かつクーポンを持っている」という条件にしたい場合は、(age >= 60 Or member = True) And coupon = True のようにカッコで囲んで意図的に優先順位を変える必要があります。


4. まとめ

「And は掛け算(優先度高)、Or は足し算(優先度低)と同じ感覚で評価される」。この演算子の優先順位構造を頭に入れておけば、実務で複雑な顧客条件分岐やエラー判定ロジックを組む際にも、予期せぬ判定ミスを回避できます。


【BI技術者認定試験対策】病原体に対する生体防御メカニズム!「免疫応答」を攻略

異物(抗原)の侵入を感知した免疫システムが、それを排除するために起こす一連の防御反応について整理しましょう。

1. 問題:異物に対する免疫系の反応

【 問題 】 免疫系が、体内に侵入した病原体(細菌やウイルス)などの異物(抗原)を認識し、排除するために起こす一連の反応を何と呼ぶでしょうか?

① 免疫応答   ② 免疫寛容   ③ 拒絶反応   ④ アレルギー反応

2. 正解:生体防御の用語に関する正解

正解: ① 免疫応答(Immune Response)

3. 解説:自然免疫と獲得免疫の2段階システム

免疫応答は、大きく分けて「自然免疫応答」と「獲得免疫応答(適応免疫応答)」の2段階のステップで構成されています。

[ 免疫応答の分類 ]
自然免疫応答:好中球やマクロファージなどが、侵入してきた異物を無差別にすばやく食作用で攻撃・排除する初期防御。
獲得(適応)免疫応答:樹状細胞からの抗原提示を受け、T細胞やB細胞が特定の異物(抗原)をピンポイントで認識し、抗体産生や細胞傷害で強力に排除する高度な防御システム。

1. 試験のポイント: 「免疫系が病原体などに応じて起こす反応=免疫応答」です。一方、特定の抗原に対して免疫応答を起こさない(攻撃を抑制する)仕組みは「免疫寛容」と呼ばれ、正反対の概念として対比して出題されます。
2. バイオインフォの視点: 獲得免疫応答では、T細胞受容体(TCR)やB細胞受容体(BCR/抗体)の遺伝子再構成(V(D)J重合)によって多様な受容体群(レパトア)が形成されます。シングルセルRNA-SeqとV(D)Jシーケンスを組み合わせた「免疫レパトア解析」により、どのようなクローンの免疫細胞が特定の病原体に対して応答・増殖しているかを高精度にトラッキングするデータ解析が行われています。


4. まとめ

「免疫系が病原体などに応じて反応すること=免疫応答」です。システム開発で言えば、不正なリクエストやサイバー攻撃(病原体)を侵入検知システム(IDS/IPS)が検知し、ファイアウォールやセキュリティポリシを動的に適用して遮断する「インシデントハンドリング(自動防御レスポンス)」のような仕組みですね!


【生物学問題】多能性幹細胞の原点!「ES細胞」を攻略

受精卵(胚)の一部から作られ、体の中のあらゆる細胞へ変化(分化)できる能力を持った、再生医療や生命科学の基礎となる細胞について整理しましょう。

1. 問題:胚由来の分化多能性を持つ細胞

【 問題 】 発生初期の胚(胚盤胞の内部細胞塊)から取り出して培養して作られ、生体を構成するほぼすべての細胞に分化できる能力(多能性)と、無限に増殖できる能力をあわせ持つ万能細胞を何と呼ぶでしょうか?

① ES細胞   ② iPS細胞   ③ 体性幹細胞   ④ 癌幹細胞

2. 正解:幹細胞の種類と特徴に関する正解

正解: ① ES細胞(胚性幹細胞 / Embryonic Stem Cell)

3. 解説:ES細胞とiPS細胞の違い

「あらゆる細胞になれる万能性(多能性)」を持つ代表的な細胞には「ES細胞」と「iPS細胞」があります。両者の最大の違いは「どこから作るか」です。

[ 万能幹細胞の使い分け ]
ES細胞(胚性幹細胞)受精卵(胚)の内部細胞塊を取り出して作成。受精卵を壊す必要があるため生命倫理的な課題が存在します。
iPS細胞(人工多能性幹細胞)皮膚や血液などの体細胞に特定の遺伝子(山中4因子)を導入し、受精卵のような万能な状態へ「初期化(リプログラミング)」して作成。
※「胚細胞(受精卵・胚)から」というキーワードがある場合は、iPS細胞ではなくES細胞が正解となります。

1. 試験のポイント: 「胚細胞(発生初期の胚)から得られる」「あらゆる細胞に分化できる」という記述が出たら「ES細胞(胚性幹細胞)」が正解です。「体細胞を初期化して作る」という記述があれば「iPS細胞」になるため、出どころ(起源)の文章をしっかり読み取りましょう。
2. バイオインフォの視点: ES細胞がなぜ「万能性」を維持できるのか、どのような遺伝子ネットワーク(Oct4, Sox2, Nanogなど)が働いているかを解明するために、シングルセルRNA-Seq(scRNA-seq)による解析が多用されています。1細胞ごとの遺伝子発現プロファイルを次元削減(UMAPやt-SNE)して可視化し、ES細胞が特定の臓器(神経や心筋など)へと変化していく分化軌跡(Pseudotime解析)をトラッキングします。


4. まとめ

「胚細胞から作られる分化多能性を持った細胞=ES細胞」です。システム開発で言えば、どんな具象クラス(神経細胞、心筋細胞など)にも派生・インスタンス化できる、最上位の「抽象基底クラス(Abstract Base Class)」のような細胞ですね!