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

【VBAスタンダード対策】文字列連結演算子「&」と「+」の構造的違いを攻略!

VBAで文字列を結合する際、&(アンパサンド)と +(プラス)のどちらでも繋げられるように見えます。しかし、この2つは内部の処理構造が全く異なります。データの型が混ざったときに起きるVBA特有の挙動を解き明かしましょう。

1. 問題:型が混在する場合の連結演算子の挙動

【 問題 】 下記のコードを実行した際、メッセージボックスに表示される結果の組み合わせとして正しいものはどれでしょうか?

Sub OperatorTest()
    Dim val1 As String
    Dim val2 As Integer
    
    val1 = "100"
    val2 = 200
    
    ' --- (1) & 演算子で結合 ---
    Dim result1 As String
    result1 = val1 & val2
    
    ' --- (2) + 演算子で結合 ---
    Dim result2 As String
    result2 = val1 + val2
    
    MsgBox result1 & " / " & result2
End Sub

① result1: "100200" / result2: "100200"
② result1: "100200" / result2: 型違いによるエラー(または 300)
③ result1: 300 / result2: "100200"
④ result1: 型違いによるエラー / result2: 300

2. 正解:演算子の優先順位と型変換に関する正解

正解: ② result1: "100200" / result2: 型違いによるエラー(または 300)

3. 解説:強制結合の「&」と、足し算優先の「+」

VBAにおいて、この2つの演算子は「何を目的として作られたか」という根本的な構造の設計が異なります。

[ 演算子の構造的特徴 ]

■ & 演算子(文字列結合の専門職)
右と左のデータが何であれ、「すべて文字列に強制変換してくっつける」という構造を持っています。文字列の "100" と 数値の 200 なら、200を文字に変えて "100200" にします。エラーが起きにくく安全です。

■ + 演算子(本来は足し算の専門職)
片方が「数値型」である場合、VBAは構造的に「これは足し算(算術演算)だな」と解釈しようとします。そのため、もう片方の "100" も数値の 100 に自動変換して「100 + 200 = 300」として計算しようとします。

★ ここがトラップ!:
もし、val1 = "VBA" のように数値に変換できない文字だった場合、"VBA" + 200 は足し算が不可能なため、「型が一致しません(Runtime Error 13)」というエラーではじかれます。

1. ここが試験に出る!: スタンダード試験では、「文字列結合は & を使う」というのが大原則として問われます。+ を使ったコードを提示し、データ型が混ざったときに計算されてしまう挙動や、エラーになる危険性を指摘させる問題が定番です。
2. エンジニアの視点: Java 17などの現代的な言語では `+` 演算子が文字列結合として安全にオーバーロード(多重定義)されていますが、VBAは古い仕様を引き継いでいるため、四則演算のプラスと明確に区別する「理系NEO」な厳密さが必要です。実務でバグを生まないためにも、文字列の結合には **100% `&` を使う** のがプロの暗黙の了解です。


4. まとめ

「文字を繋ぐなら四の五の言わずに『&』」。この構造ルールを徹底するだけで、データの型に振り回されるバグは一掃できます。演算子ひとつにも明確な役割を与えること。それが、美しく堅牢なマクロの設計図を描くための基本です。


PR

【VBAスタンダード対策】オブジェクトのクリア「Nothing」と状態判定の構造!

オブジェクト変数に格納された「実体への参照(リモコン)」は、使い終わったら明示的にクリアすることが推奨されます。また、変数が空っぽ(未設定)の状態であるかどうかを正確に判定する構造をマスターしましょう。

1. 問題:Nothingによるクリアと状態判定の文法

【 問題 】 オブジェクト変数 myWB に割り当てられたワークブックの参照をクリアし、その後、正しくクリアされたかどうか(Nothingであるか)を条件分岐で確認したい。空欄 ( A )( B ) に入る正しいキーワードの組み合わせはどれでしょうか?

Sub ClearTest()
    Dim myWB As Workbook
    Set myWB = Workbooks.Open("C:\Test.xlsx")
    
    ' --- (1) 参照をクリアする ---
    Set myWB = ( A )
    
    ' --- (2) クリアされたか判定する ---
    If myWB ( B ) Nothing Then
        MsgBox "変数はクリアされています。"
    End If
End Sub

① (A) Empty (B) =
② (A) Nothing (B) =
③ (A) Empty (B) Is
④ (A) Nothing (B) Is

2. 正解:オブジェクトのクリアと判定に関する正解

正解: ④ (A) Nothing (B) Is

3. 解説:Nothingという概念と「Is」演算子

オブジェクト変数を「何も指していない状態」にするキーワードと、その状態を比較する演算子には、VBA独自の構造ルールがあります。

[ Nothingの構造的メカニズム ]

1. クリアは「Set 変数 = Nothing」
Nothing は「どこも指していない無の状態」を表す特殊なキーワードです。通常の変数でいう 0 や空文字("")のような役割ですが、オブジェクト変数なので代入時には必ず Set が必要です。これによりメモリ上の参照(紐付け)が完全に切断されます。

2. 判定には「=」ではなく「Is」を使う
【超重要】 オブジェクトが Nothing かどうかを判定するとき、If myWB = Nothing と書くと実行時エラーになります。値の比較ではなく「同じ対象を指しているか(参照の比較)」を行うため、構造的に Is 演算子 を使用しなければなりません。

1. ここが試験に出る!: スタンダード試験では、あえて If myWB = Nothing という誤ったコードを提示し、エラーになる原因を答えさせる問題が頻出します。オブジェクトの比較は必ず Is(または否定の IsNot ではなく Not ... Is Nothing)を使うという構造を叩き込んでください。
2. エンジニアの視点: Java 17などでは `if (myWB == null)` のように共通の比較演算子を使いますが、VBAは「値の比較(=)」と「参照の比較(Is)」を厳密に区別する理系NEOな設計になっています。大規模なマクロでメモリリーク(メモリが解放されずに重くなる現象)を防ぐためにも、プロシージャの最後で `Set 変数 = Nothing` を明示する癖をつけるのがプロの構造化プログラミングです。


4. まとめ

「オブジェクトを消すならSet = Nothing、確かめるならIs Nothing」。このセットを完璧に理解していれば、オブジェクト変数の制御で迷うことはありません。メモリ空間を綺麗に保ち、エラーのないスマートなマクロを構築しましょう。


【VBAスタンダード対策】オブジェクト変数の代入と「Set」の構造を攻略!

オブジェクト変数とは、単なる「値」ではなく、ワークシートやセル範囲といった「モノ(オブジェクト)」を操作するために、その場所を記憶しておくための変数です。通常の変数とは代入のルールが根本的に異なります。

1. 問題:オブジェクト変数への正しい代入方法

【 問題 】 変数 mySheet に「Sheet1」というワークシートを割り当てて、そのシートの名前を表示させたい。空欄 ( A ) に入る正しい記述はどれでしょうか?

Sub ObjectTest()
    Dim mySheet As Worksheet

    ( A ) Worksheets("Sheet1")

    MsgBox mySheet.Name
End Sub

① mySheet =
② Set mySheet =
③ Let mySheet =
④ mySheet :=

2. 正解:オブジェクト変数の代入に関する正解

正解: ② Set mySheet =

3. 解説:なぜ「Set」が必要なのか?

VBAの構造において、通常の変数とオブジェクト変数は、メモリへの格納方法が明確に区別されています。

[ 変数の構造的違い ]

■ 値の代入(Set不要)
Dim n As Integer
n = 100 ' 箱の中に直接「100」を入れる

■ オブジェクトの代入(Set必須)
Dim r As Range
Set r = Range("A1") ' 箱の中に「A1セルという実体への参照(リモコン)」を入れる

★ 理系NEOなポイント:
参照(ポインタ):オブジェクト変数は、実体そのものを箱に入れているわけではなく、実体を操作するための「リモコン」を箱に入れているような構造です。
Nothing:オブジェクト変数を宣言した直後の初期状態は 0 ではなく Nothing です。Nothingの状態(リモコンがどこも指していない状態)でプロパティを操作しようとすると「オブジェクト変数が設定されていません」というエラーになります。

1. ここが試験に出る!: スタンダード試験では「Setを書き忘れていないか」という点が非常に多く問われます。また、使い終わった後に Set mySheet = Nothing としてメモリを解放する構造も重要です。
2. エンジニアの視点: Java 17などのオブジェクト指向言語では `new` キーワードでインスタンス化しますが、VBAでは既存のExcel要素(シートなど)を扱う際、この `Set` が「これは単なる値のコピーではなく、実体へのリンクである」という宣言の役割を果たしています。


4. まとめ

「オブジェクトにはSet、使い終わったらNothing」。この代入構造をマスターすることで、複雑なExcel操作も変数一つでスマートに制御できるようになります。変数という「リモコン」を正しく対象に向け、正確なマクロを構築しましょう。

【BI技術者認定試験対策】性別で現れ方が変わる!「伴性遺伝」を攻略

遺伝子が「性染色体(XまたはY)」の上にある場合、その形質が伝わる確率は男女(雌雄)で大きく異なります。この独特な遺伝形式をマスターしましょう。

1. 問題:性染色体に由来する遺伝

【 問題 】 X染色体やY染色体といった「性染色体」の上に存在する遺伝子によって引き起こされる遺伝現象を何と呼ぶでしょうか?

① 常染色体遺伝   ② 伴性遺伝   ③ 細胞質遺伝   ④ 核外遺伝

2. 正解:性染色体と遺伝に関する正解

正解: ② 伴性遺伝

3. 解説:X染色体の「スペア」があるかないか

多くの場合、X染色体にある潜性(劣性)遺伝子の形質が、男性(XY)において現れやすいのが特徴です。

[ 伴性遺伝のポイント ]
X連鎖潜性遺伝:女性(XX)は正常なXが1つあれば発症しませんが、男性(XY)はXが1つしかないため、そこに変異があると形質が現れます。例:血友病、赤緑色覚多様性。
保因者:女性で、片方のXに変異遺伝子を持っているが発症していない人を「保因者(キャリア)」と呼びます。
Y連鎖遺伝:Y染色体上にある遺伝子によるもので、父親から息子へ必ず伝わります。

1. 試験のポイント: 前問の「限性遺伝(性別によってスイッチが入る)」との違いを明確にしましょう。伴性遺伝は「遺伝子の置き場所(性染色体)」が原因で、結果として男女の出現比率に偏りが出る現象です。
2. バイオインフォの視点: ゲノム解析(GWASなど)において、性染色体は常染色体とは異なる解析手法を用います。男性はXが1本、女性は2本という「コピー数」の違いを考慮して統計処理を行う必要があり、バイオインフォマティシャンにとっても慎重なハンドリングが求められる領域です。


4. まとめ

「性染色体の上に乗っている遺伝子の遺伝=伴性遺伝」です。特に「X連鎖」のパターンは家系図問題などでも非常によく出題されるため、男女での現れ方の違いを論理的に理解しておきましょう!


【BI技術者認定試験対策】性別によって決まる形質!「限性遺伝」を攻略

遺伝子を持っていても、特定の性別(オスまたはメス)の個体にしかその形質が現れない不思議な現象があります。性染色体と表現型の関係を整理しましょう。

1. 問題:特定の性のみに現れる遺伝

【 問題 】 特定の遺伝子が、一方の性の個体にのみ表現型として現れる遺伝現象を何と呼ぶでしょうか?(例:孔雀の飾り羽や、人間の二次性徴など)

① 伴性遺伝   ② 限性遺伝   ③ 従性遺伝   ④ 細胞質遺伝

2. 正解:性に関わる遺伝形式の正解

正解: ② 限性遺伝

3. 解説:性別という「フィルター」

遺伝子自体は両方の性別が持っている場合もありますが、ホルモンの影響などにより、特定の性別でしかスイッチが入らない形質のことです。

[ 遺伝形式の細かな違い ]
限性遺伝(げんせいいでん):特定の性別だけに現れる。例:乳汁分泌(雌のみ)、雄鳥の鶏冠(雄のみ)。
伴性遺伝(ばんせいいでん):性染色体(X, Y)上に遺伝子があり、性別によって現れる確率が異なる。例:赤緑色覚多様性。
従性遺伝(じゅうせいいでん):両性に出るが、性別によって優劣の関係が変わる。例:若ハゲ(男性で顕性、女性で潜性)。

1. 試験のポイント: 最も混同しやすいのが「伴性遺伝」との違いです。「遺伝子がどこにあるか(性染色体)」に注目するのが伴性遺伝、「どちらの性別に現れるか(表現型)」に注目するのが限性遺伝と整理しましょう。
2. バイオインフォの視点: 性特異的な遺伝子発現(Sex-biased gene expression)の解析は、トランスクリプトーム解析(RNA-Seq)における重要なトピックです。同じゲノムを持ちながら、なぜオスとメスでこれほどまでに形態や機能が異なるのか? その背後にある「遺伝子スイッチ」の制御ネットワークをデータから解明する研究が進んでいます。


4. まとめ

「特定の性別だけに形質が出る=限性遺伝」です。生物が繁殖のために特化した能力や外見を維持するための、進化上の重要な仕組みと言えますね!