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

【Officeスクリプト入門】変数って初期化が必要?値を入れずに宣言するルールを学ぼう

Officeスクリプトで変数を作るとき、いつも let x = 10; のように最初から値を入れていましたが、ふと「これって必ず最初に値を入れないといけないの?」と疑問に思ったことはありませんか?

今回は、変数の「初期化(最初に値を入れること)」のルールと、あとから値を代入する方法について解説します!

0. 文法:初期化しない時は「型」をセットで書く

結論から言うと、変数を作るときに必ずしも最初から値(初期値)を入れる必要はありません。 値を入れずに「箱(変数)だけを先に用意する」という宣言も可能です。

ただし、初期値を入れない場合は「型(: number など)」を絶対にセットで書くというルールがあります。

1. 実践サンプル

それでは、エディタに以下のコードを貼り付けて動かしてみましょう。まずは「数値が入る箱」だけを用意して、あとからデータを代入するサンプルです。

function main(workbook: ExcelScript.Workbook) {
  // 初期値は入れず、まずは「数値が入る箱(score)」だけを用意する
  let score: number;
  
  // あとから処理の中で値を代入する
  score = 95;
  
  // コンソールに出力する
  console.log("テストの点数:" + score);
}

2. 実行結果

スクリプトエディタの右上にある実行ボタン(よこむきさんかく ▶)を押すと、画面下部の「出力」タブに以下のように表示されます。あとから入れた「95」がしっかり出力されますね!

  テストの点数:95

ワンポイント・アドバイス

なぜ初期値を入れないときは「型」が必要なの?
最初から let score = 95; と書けば、Officeスクリプトは「右側が数字だから、scoreは数値の箱(number型)ね」と自動で判断してくれます。

しかし、中身を空っぽのまま let score; とだけ書いてしまうと、Officeスクリプトは「えっ、これから数字を入れるの?文字を入れるの?どっちの箱を用意すればいいの?」と迷ってしまい、エラー(型不明のエラー)になってしまいます。そのため、あとから値を入れる場合は必ず let score: number; と教えてあげる必要があるのです。

ちなみに、値を一回も入れないまま(空っぽのまま)console.log(score); のように使おうとすると、エディタが「中身が入っていません!」と事前に赤い波線で怒ってくれます。うっかりミスを未然に防いでくれる便利な仕組みなので、ぜひ覚えておいてくださいね!



PR

【Officeスクリプト入門】型って宣言するの?データ型(型指定)の基本をマスターしよう

前回はデータの入れ物である「変数(let)」について解説しましたが、今回は一歩進んで、Officeスクリプトの最大の特徴である「データ型(型指定)」について解説します!

「型ってわざわざ書かないといけないの?」という疑問を、実際の書き方とメリットを交えてスッキリ解消しましょう。

0. 文法:型は「コロン(:)」のあとに書く

Officeスクリプトで型をはっきりと宣言したいときは、変数名(または定数名)の後ろに : 型名 をつけます。

代表的な型には、以下のようなものがあります。

  • number:数値(整数や小数)
  • string:文字列(文字のデータ)
  • boolean:論理値(true または false)

1. 実践サンプル

それでは、エディタに以下のコードを貼り付けて動かしてみましょう。型をきっちり指定して変数を宣言するサンプルです。

function main(workbook: ExcelScript.Workbook) {
  // ① 数値型(number)を明示して宣言
  let age: number = 20;
  
  // ② 文字列型(string)を明示して宣言
  let message: string = "こんにちは!";
  
  // コンソールに出力する
  console.log(message + "年齢は" + age + "歳です");
}

2. 実行結果

スクリプトエディタの右上にある実行ボタン(よこむきさんかく ▶)を押すと、画面下部の「出力」タブに以下のように表示されます。

  こんにちは!年齢は20歳です

ワンポイント・アドバイス

Q. 型は「絶対に」書かないとダメなの?
結論から言うと、初期値をいきなり入れる場合は書かなくても大丈夫です!

例えば、let age = 20; とだけ書いた場合、Officeスクリプトが自動的に「右側が20(数字)だから、この変数は number 型だな!」と判断してくれます(これを型推論といいます)。そのため、最初のうちは型を省略して書いても問題なく動きます。

Q. じゃあ、なんでわざわざ型を書くの?
型をはっきり書いておく(型指定する)最大のメリットは、「未来の自分やチームのうっかりミスを、エディタがその場で怒ってくれるから」です。

もし、let age: number = 20; と書いたあとに、間違えて age = "二十歳"; のように文字を入れようとすると、実行する前にエディタが「数値の箱に文字を入れないでください!」と赤い波線でエラーを出して教えてくれます。VBAだと実行してエラーになるまで気づきにくいバグを、書いたその瞬間に防いでくれるのが型を宣言する強みなんですよ!


【Officeスクリプト入門】値を変えたくない時に使う!「定数(const)」の宣言方法をマスターしよう

前回はデータの入れ物である「変数(let)」について解説しましたが、今回はもう一つの重要な入れ物「定数(ていすう)」について解説します!

プログラムを書いていると、「途中で中身を絶対に変えたくない(変えられては困る)値处理」が出てきます。そんな時に使うのが定数です。基本的な書き方と、変数との違いをスッキリ整理しましょう。

0. 文法:定数の宣言には「const」を使う

Officeスクリプトで定数を作る(宣言する)ときは、const というキーワードを使い、その後ろに「定数名」を書きます。

変数(let)は後から中身を別の値に入れ替えることができますが、定数(const)は「最初に決めた値を後から絶対に変更できない」という強力なルールを持っています。

1. 実践サンプル

それでは、エディタに以下のコードを貼り付けて動かしてみましょう。円周率のように「世界中で決まっている変わらない値」を定数として宣言し、画面に出力するコードです。

function main(workbook: ExcelScript.Workbook) {
  // 定数 PI を宣言して、初期値 3.14 を代入する
  const PI = 3.14;
  
  // コンソールに定数の値を出力する
  console.log("円周率:" + PI);
}

2. 実行結果

スクリプトエディタの右上にある実行ボタン(よこむきさんかく ▶)を押すと、画面下部の「出力」タブに以下のように表示されます。

  円周率:3.14

ワンポイント・アドバイス

なぜわざわざ「const(定数)」を使うの?
「中身を変えられる let だけ使っていれば、大は小を兼ねるから良いのでは?」と思うかもしれません。しかし、あえて const を使うのにはプログラミングにおいて非常に重要な理由があります。

  1. うっかりミス(バグ)を防げる
    もし const PI = 3.14; と書いた後に、コードの別の場所で間違えて PI = 5.55; のように値を上書きしようとすると、Officeスクリプトが「定数だから変更できません!」と実行前にエラーで教えてくれます。これにより、計算ロジックが途中で狂ってしまうバグを未然に防ぐことができます。
  2. コードが読みやすくなる
    他の人(あるいは数ヶ月後の自分)がコードを見たときに、const で書かれているだけで「あ、この値は最初から最後まで変わらない決まり文句なんだな」と一目で理解できます。

現代のプログラミング(OfficeスクリプトのベースであるTypeScriptなど)では、「基本はまず const を使い、後から値を書き換える必要がある時だけ let を使う」というのが、綺麗で安全なコードを書くための鉄則(ベストプラクティス)とされています。ぜひこの意識を持って使い分けてみてくださいね!


【VBAスタンダード対策】Exit For 脱出時の「カウンタ変数」の値を構造的に見抜く!

ループ処理を途中で強制終了する Exit For。しかし、途中で脱出した瞬間、ループの回数を数えていた「カウンタ変数」の中身がいくつになっているか、正確に把握できていますか? 試験で狙われる変数の内部構造を解き明かします。

1. 問題:Exit For を実行した直後の変数の中身

【 問題 】 下記のコードを実行して LoopTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?

Sub LoopTest()
    Dim i As Integer

    For i = 1 To 10
        If i = 5 Then
            Exit For
        End If
    Next i

    MsgBox i
End Sub

① 4
② 5
③ 6
④ 11

2. 正解:ループ脱出時の変数状態に関する正解

正解: ② 5

3. 解説:途中で抜けた時と、最後まで回った時の「違い」

Forループにおけるカウンタ変数 i の値は、「どこで処理が中断されたか」によって、その後の構造的な値が全く異なります。

[ Forループ内のタイムライン構造 ]

・i = 1, 2, 3, 4 ── 順調に処理
・i = 5 になった!
  │
  ├── If i = 5 Then が成立
  └── Exit For が実行される

★ 途中で脱出した場合(今回)
Exit For は、Next i(値を+1する処理)に到達する前に、ループの外へジャンプする構造です。そのため、変数 i5 のまま保持されます。

★ 比較:もし途中で抜けずに「完走」した場合
10回目(i=10)の処理が終わり、Next i を通ることで iは 11 に増えます。そこで初めて「10を超えたから終了」と判定されるため、完走時の最終値は 11 になる構造を持っています。

1. ここが試験に出る!: スタンダード試験では、「Exit Forで抜けた時はその時点の値(5)」になり、「最後まで完ソウした時は上限+ステップ値(11)」になるという、カウンタ変数の最終的な数値の違いを確実に突いてきます。メッセージボックスがどこで実行されているかを落ち着いて読み解きましょう。
2. エンジニアの視点: Java 17などの `for (int i=1; i<=10; i++)` 内で `break;` する構造と同じですが、VBAの `Next` は「値を増やして判定に戻る」という明確なステップ構造を意識しやすいのが特徴です。実務において、ループを抜けた後に「データが見つかって途中で抜けた(i<=10)」のか、「最後まで見つからなかった(i=11)」のかを判定するスマートな理系NEO設計によく使われます。


4. まとめ

「Exit ForはNextを通らないから、その時の値のまま」。このループ構造の仕組みを理解しておけば、条件に合致したデータが何番目に見つかったかを正確に捉えることができます。変数の変化を頭の中でシミュレーションして、完璧なアルゴリズムを構築しましょう。


【生物学問題】脳の情報リレー!「シナプス伝達」を攻略

脳内の電気シグナルは、神経細胞の隙間をそのまま飛び越えることはできません。そこで活躍する「化学物質を使った通信の仕組み」を整理しましょう。

1. 問題:神経細胞間の情報伝達

【 問題 】 神経細胞(ニューロン)同士の接合部において、電気信号が到達した際に神経伝達物質が放出され、それが次の細胞に受け取られることで信号が伝わる一連の現象を何と呼ぶでしょうか?

① 活動電位   ② シナプス伝達   ③ 跳躍伝達   ④ 膜電位固定

2. 正解:神経シグナルに関する正解

正解: ② シナプス伝達

3. 解説:電気と化学のハイブリッドシステム

1つの神経細胞の中は「電気信号(活動電位)」で素早く伝わりますが、細胞と細胞の間の隙間(シナプス間隙)は「化学物質(神経伝達物質)」に変換されてバトンが渡されます。

[ シナプス伝達の流れ ]
1. 到達:電気信号が神経末端(シナプス前細胞)に届きます。
2. 放出:シナプス小胞から「神経伝達物質(グルタミン酸やGABAなど)」が隙間に放出されます。
3. 結合:次の細胞(シナプス後細胞)の受容体に物質が結合します。
4. 再起動:次の細胞に再び電気信号が発生し、情報が先へ進みます。

1. 試験のポイント: 神経細胞の結合部を「シナプス」、そこで情報が伝わる現象を「シナプス伝達」と呼びます。混同しやすい「跳躍伝達」は、軸索の髄鞘(マイエリン鞘)を電気信号がジャンプして高速移動する現象のことなので、区別しておきましょう。
2. バイオインフォの視点: AIの「ディープラーニング(深層学習)」の数理モデルは、このシナプス伝達の仕組み(入力の合計値がある閾値を超えると次のノードへ信号が伝わる)を模して作られました。生体内のリアルな脳をコンピュータ上に再現する「計算神経科学(Computational Neuroscience)」では、膨大な数のシナプス結合の強度がどう変化するかを微分方程式などを用いてシミュレーションしています。


4. まとめ

「ニューロン間の隙間を神経伝達物質で満たして信号を渡す=シナプス伝達」です。この物質のやり取りの効率が変化することが、私たちの脳の「記憶」や「学習」の正体でもあります。電気から化学物質へ、そしてまた電気へと切り替わる見事なリレーシステムですね!