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

【Officeスクリプト入門】データの入れ物「変数」の基本と型(データ型)をマスターしよう

Officeスクリプトで一歩進んだ自動化を行うために欠かせないのが「変数(へんすう)」です。今回は、変数の作り方や、データの種類を表す「型」について、分かりやすく解説します。

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

プログラムの中でデータを一時的に保存しておく箱のことを「変数」と呼びます。Officeスクリプトで変数を作る(宣言する)ときは、let というキーワードを使い、その後ろに好きな「変数名」を書きます。

また、Officeスクリプト(TypeScript)は、箱に入れるデータの種類(数値、文字など)を意識するルール(型システム)を持っています。

1. 実践サンプル

まずは、エディタに以下のコードを貼り付けて動かしてみましょう。変数 x を作って、初期値として 10 を入れ、それを画面に出力するシンプルなコードです。

function main(workbook: ExcelScript.Workbook) {
  // 変数xを宣言して、初期値10を代入する
  let x = 10;
  
  // 文字列と変数を「+」でつないで出力する
  console.log("xの値:" + x);
}

2. 実行結果

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

  xの値:10

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

Officeスクリプトの「型(かた)」ってなに?
今回のコードでは let x = 10; と書きました。このとき、Officeスクリプトは「右側が10(数字)だから、xは数値を入れる箱(number型)だな」と自動的に解釈してくれます。これを『型推論(かたすいろん)』と呼びます。

Officeスクリプトでよく使う代表的な型には、以下のようなものがあります。

型の名前中身の種類具体例
number(数値型) 整数や小数。計算に使う数字です。 103.14
string(文字列型) 文字のデータ。ダブルクォーテーションで囲みます。 "hello""xの値:"
boolean(論理値型) 正しいか、間違っているかを表す2択のデータ。 true(真) または false(偽)

もし、明示的に型を指定して変数を作りたいときは、let x: number = 10; のように、変数名の後ろに : 型名 をつける書き方もできます。型をしっかり決めておくことで、間違えて数値の箱に文字を入れてしまうようなバグを防いでくれるのが、VBAにはないOfficeスクリプト(TypeScript)の強みなんですよ!


PR

【Officeスクリプト入門】デスクトップ版Excelで挑戦!「Hello world」を表示させる手順をマスターしよう

Excelの「自動化」タブから使える新しい自動化機能「Officeスクリプト」。今回は、簡単なプログラムを作って画面にメッセージを表示させる具体的な手順を、実際の画面の流れに合わせて詳しく解説します。

0. 文法:文字を出す時は「console.log()」を使うだけ

プログラムの中でログやメッセージを確認したい時は、console.log() を使います。カッコの中に入れた文字が、実行結果の画面に表示されます。

1. 実践サンプルと作成手順

それでは、さっそくExcelを開いてスクリプトを作ってみましょう!手順は以下の通りです。

  1. Excelの上部メニューにある「自動化」タブを開きます。
  2. リボンの左端にある「新しいスクリプト」から、「コードエディタで作成」を選択します。
  3. すると、画面の一番右側に「スクリプトエディタ」が立ち上がります。
  4. 開いたエディタに、以下のコードをそのまま書き込みます(またはコピーして貼り付けます)。
function main(workbook: ExcelScript.Workbook) {
  console.log("hello world");
}

2. 実行結果の確認

コードが書けたら、スクリプトエディタの右上にある実行ボタン(よこむきさんかく ▶)をクリックしてみましょう。

ボタンを押すと、エディタの下部に「出力」タブが自動的に上がってきて、以下のように結果が表示されます。

  hello world

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

VBAの「Debug.Print」との違いは?
従来のExcelマクロ(VBA)でイミディエイトウィンドウに文字を出す時は Debug.Print を使っていましたが、Officeスクリプトでは console.log() を使います。これはWebの世界(JavaScriptやTypeScript)で非常によく使われる標準的な書き方なので、覚えておくと他のプログラミングにも応用が効きますよ!


【生物学問題】進化は一進一退?「断続平衡説」を攻略

進化といえば「何百万年もかけて、少しずつ途切れなく進むもの」というイメージがあるかもしれません。しかし、それに一石を投じた重要な学説を整理しましょう。

1. 問題:進化のスピードと様式

【 問題 】 生物の進化に関する学説のうち、「種が進化する過程では、短期間に急激な変化が起こる期間と、長期間にわたってほとんど変化が起きない(平衡状態の)期間が存在する」とする説を何と呼ぶでしょうか?

① 漸変説(グラジュアリズム)   ② 断続平衡説   ③ 中立進化説   ④ 用不用説

2. 正解:進化理論に関する正解

正解: ② 断続平衡説

3. 解説:爆発的な変化と長い安定

エルドリッジとグールドによって提唱されたこの説は、化石の記録に見られる「ある時突然、新しい種が登場し、その後しばらく変化しない」という事実をうまく説明しています。

[ 進化の2つの捉え方 ]
断続平衡説(Punctuated equilibrium):環境の激変や隔離などをきっかけに、短い期間(地質学的スケールでの数万〜数十万年)に一気に新種が誕生し、一度安定するとその後は長期間(数百〜数千万年)ほとんど変化しないという考え方。
漸変説(Gradualism):ダーウィンが考えたような、世代を重ねるごとに「一歩一歩、絶え間なく、ゆっくりと」進化が蓄積していくという考え方。

1. 試験のポイント: 「短期間の急激な変化」と「長期間の安定(平衡)」という2つのフェーズが交互に現れる、というフレーズが出たら「断続平衡説」を選びましょう。木村資生氏の「中立進化説(分子レベルの進化は偶然決まる)」など、他の進化理論と混同しないように区別が必要です。
2. バイオインフォの視点: 現在のゲノム解析(分子系統樹の作製など)では、遺伝子の変化スピードが一定であると仮定する「分子時計」が使われますが、実際には環境ストレスなどによって進化の速度(変異の固定速度)が加速する時期があることが分かっています。こうした「進化速度の不均一性」をモデル化し、計算機で過去の進化の歴史をシミュレーションする研究が行われています。


4. まとめ

「進化はダラダラ進むのではなく、急激なジャンプと長い安定の繰り返しである=断続平衡説」です。システム開発で言えば、長らく安定稼働していたシステムが、大きな技術変革(環境の変化)によって短期間で一気にリプレイスされるようなイメージに近いかもしれませんね!

【VBAスタンダード対策】プロシージャを強制終了する「Exit Sub」の制御構造を攻略!

プログラムを実行中、エラーや特定の条件が発生した時点で、それ以降の処理をスキップしてプロシージャを終了させたい場合があります。その際に使用する Exit Sub の仕組みと、処理の流れる構造を正しく理解しましょう。

1. 問題:Exit Sub 実行時の処理の流れ

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

Sub Main()
    Call CheckValue(10)
    MsgBox "完了"
End Sub

Sub CheckValue(num As Integer)
    If num > 5 Then
        Exit Sub
    End If
    MsgBox "チェック通過"
End Sub

① 「チェック通過」が表示された後、「完了」が表示される
② 「完了」だけが表示される
③ 「チェック通過」だけが表示される
④ 何も表示されずにマクロ全体が終了する

2. 正解:Exit Sub の制御フローに関する正解

正解: ② 「完了」だけが表示される

3. 解説:呼び出し元へ処理を戻す構造

Exit Sub の最も重要な構造的特徴は、「マクロ全体を終了させるわけではなく、呼び出されたプロシージャだけを終了して、呼び出し元に制御を戻す」という点にあります。

[ 処理のコントロール構造図 ]

Sub Main()
│ Call CheckValue(10) ───┐ 処理を移す
│ │
│ (戻ってきた!) ↓
MsgBox "完了" Sub CheckValue(num)
End Sub │ If 10 > 5 Then
Exit Sub ── 途中で脱出!
│ End If
MsgBox "チェック通過" (実行されない)
End Sub

1. ここが試験に出る!: スタンダード試験では、マクロ全体を終了させる End ステートメントと、そのプロシージャだけを抜ける Exit Sub の違いを突いてきます。今回のケースでは、CheckValue は途中で終了しますが、呼び出し元である Main の次の行(MsgBox "完了")に処理が戻る構造をしっかりと見極める必要があります。
2. エンジニアの視点: Java 17などの言語における `return;`(戻り値なしの即時復帰)と全く同じ構造です。実務において、不適切なデータ(事前条件の不一致)をプロシージャの最初でチェックして弾く手法を「ガード節(Guard Clause)」と呼びます。深くネスト(インデント)されたIf文を作らないための、理系NEOなスマートな設計パターンですね。


4. まとめ

「Exit Subは、その部屋(Sub)から出るだけで、元いた場所(Main)には戻る」。この構造を知っておけば、複雑なプロシージャ連携のデバッグも怖くありません。適切な脱出処理を組み込んで、無駄のない洗練された制御フローを構築しましょう。


【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. まとめ

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