情報学入門(データ演習) / 第 1 章

起動する

プログラムが動く土台と、はじめてのマクロ

この章のねらい

1. プログラムが動く土台

これから書くプログラムは、単独で動くわけではありません。 下に何層もの土台があって、その上に載っています。

アプリケーション(application)ワード、エクセル、ブラウザ ── 私たちが直接使うもの。 これから書く VBA のマクロも、エクセルの中で動くのでここに属します
基本ソフトウェア(basic software)オペレーティングシステム(OS)とコンパイラ。 アプリケーションを動かすための土台
ハードウェア(hardware)CPU、メモリ、SSD、画面、キーボード ── 実際の機械
意味
オペレーティングシステム
(operating system)
基本ソフトウェアの 1 つ。もとはコンピュータの資源を効率よく使うために 最低限必要なソフトウェアだった。現在は人が操作しやすくする面(ユーザインタフェース)も重要になっている
コンパイラ
(compiler)
基本ソフトウェアの 1 つ。プログラムを機械語(コンピュータが解釈できる数値)に変換する

1.1 1 台を何人で、何本の仕事で使うか

言葉意味反対の言葉
マルチユーザシステム1 台のコンピュータを複数の利用者が共有する シングルユーザシステム
マルチタスク
マルチプロセス
コンピュータ上の情報処理の単位タスクプロセス。 これを並行して処理できるシングルタスクシステム

ワードとエクセルとブラウザを同時に開いていられるのは、 OS がそれぞれをプロセスとして管理し、CPU を細かく割り振っているからです。

いまのマルチユーザ。 元資料は「1 台を複数人が共有する」という 1980 年代の形(大型計算機に端末をつなぐ)を前提にしていますが、 この考え方はクラウドとして戻ってきました。 Google ドライブや Microsoft 365 は、遠くにある 1 台(正確には多数)を大勢が共有する仕組みです。 「自分の PC で全部やる」時代をはさんで、また共有に向かっている ── というのが現在の位置です。

2. 機械が分かる言葉、人が分かる言葉

コンピュータの内部では、すべてが 2 進数です。 CPU が直接実行できるのは機械語(machine language)── 0 と 1 の並びだけです。 しかしそれを人が書くのは無理なので、間に何段か置きます。

機械語
アセンブリ言語(ニーモニック)
0001000111001001
mov   A, 110
1001101110001101
add   101
0110110011011110
store 300
0111011010100011
mul   2
1110100001101101
sub   B
意味
機械語コンピュータが解釈できる言葉。数値(2 進数)
ニーモニック機械語を、人が理解・記述しやすいように 英単語や記号に置きかえたものmov=move、add=加算)
レジスタCPU が持つ少量の記憶装置。計算の作業台
低水準言語機械語・アセンブリ言語。機械の都合に近い
高水準言語Fortran、C、Python、VBA ── 人の考え方に近い

機械語とアセンブリ言語は1 対 1 に対応しています。 一方、高水準言語の 1 行は機械語の何十行にもなります。 その変換をするのがコンパイラです。

VBA はコンパイラ型ではありません。 元資料は「コンパイラがプログラムを機械語に変換する」と説明していますが、 これから使う VBA はインタプリタ寄りの仕組みで動きます ── 書いたプログラムをその場で 1 行ずつ解釈して実行します。 だから「コンパイルする」という手順がなく、書いてすぐ F5 で動きます。 その代わり、実行してみるまで見つからない誤りがあります (このページの中で動いている処理系も、同じくインタプリタです)。

2.1 自然言語と人工言語

自然言語(natural language)は日本語や英語のように、 誰かが設計したのではなく自然に育った言葉です。 人工言語(artificial language)は目的のために設計された言葉で、 プログラミング言語はこちらに入ります。

両者の決定的な違いはあいまいさを許すかどうかです。 「適当に温めて」は日本語として通じますが、プログラムには書けません。 解釈が 1 通りに決まることが人工言語の条件で、 だからこそ機械が実行できるのです(第 9 章のアルゴリズムの条件につながります)。

3. ファイルとファイルシステム

ファイルとは情報を管理する単位です。 そしてファイルを名前と場所で整理する仕組みがファイルシステムです。

拡張子は「約束」です。 .xlsx.xlsm の違いは、名前の最後の 1 文字だけではありません ── .xlsm でないとマクロが保存されません。 Excel は「マクロが入っているのに .xlsx で保存しようとしている」と警告しますが、 そこで「はい」を押すと書いたプログラムが消えます。 この授業でいちばん多い事故なので、最初に覚えてください。

4. はじめてのマクロ

マクロとは、Excel の操作を記録して再生できるようにしたものです。 そして記録されたものの正体はVBA のプログラムです。 だから「記録する → 中身を見る」のが、いちばん自然な入り口になります。

元資料 12〜28 枚目の手順(現在の Excel でも同じです)
操作
「表示」→「マクロ」→「マクロの記録」を選ぶ。名前は Macro1 のまま
セルに何か入力する・色をつける(この操作が記録される)
「表示」→「マクロ」→「記録終了」
「表示」→「マクロ」→「マクロの表示」→ Macro1「編集」
VBA の画面が開く。記録された内容がプログラムになっている
シートの内容を消してから、F5 で実行 → 同じ結果が再現される
「名前を付けて保存」→ 「Excel マクロ有効ブック(.xlsm)」

プログラムの形はこれだけです。
Sub Macro1() ── ここから「Macro1」という名前のプログラムが始まる
End Sub ── ここでプログラムが終わる
この 2 行の間に書いたことが、上から順に実行されます

5. セルに値を入れる

VBA からセルを指す書き方は 2 つあります。順番が逆なので、ここが最初の関門です。

Cells(3, 2) ── 行が先、列が先ではない。3 行目の 2 列目
Range("B3") ── 列(アルファベット)が先。B 列の 3 行目
この 2 つは同じセルを指しています。

なぜ 2 つあるのか。Range人が読みやすいのですが、 Cells行と列を数字で指定できるので、 繰り返しの中で Cells(i, 1) のように変数を使えます。 プログラムを書くうえでは、こちらが圧倒的に便利です。

Sub Macro1()
    ' Cells は(行, 列)の順。3 行 2 列 = B3
    Cells(3, 2).Value = "Cells(3, 2) で入れた"

    ' Range は「列行」。B4 は 4 行 2 列
    Range("B4").Value = "Range(""B4"") で入れた"

    ' .Value は省略できる
    Cells(1, 1) = 100
    Cells(2, 1) = 3.14

    ' 文字列は " " で囲む
    Cells(1, 2) = "経営学部"
End Sub

試してみてください。 上の Cells(3, 2)Cells(2, 3) に変えて実行すると、 入る場所が変わります(B3 → C2)。 「行・列」の順を取り違えるとこうなる、というのを一度自分で見ておくと、 あとで原因不明のずれに悩まなくなります。

6. 色をつける

色は 赤・緑・青の 3 つの数(各 0〜255)で作ります。これが RGB 関数です。

動かす② RGB で色を作る 数を動かす

なぜ「フルカラー」と呼ぶのか。 元資料は「256=28 種類」「24 ビット=フルカラー」と書いていますが、計算の途中が抜けています。 赤・緑・青がそれぞれ 8 ビット(256 段階)なので、合わせて 8×3 = 24 ビット。 表せる色数は
256 × 256 × 256 = 224 = 16,777,216 色
人の目が区別できる色数を超えているので「フル(十分な)カラー」と呼ばれます。

Sub Macro2()
    ' 背景色(Interior = 内側)
    Cells(1, 1).Interior.Color = RGB(255, 0, 0)      ' 赤
    Cells(2, 1).Interior.Color = RGB(0, 176, 80)     ' 緑
    Cells(3, 1).Interior.Color = RGB(0, 112, 192)    ' 青
    Cells(4, 1).Interior.Color = RGB(255, 0, 255)    ' 紫(赤+青)

    ' 文字の色
    Cells(1, 2) = "赤い文字"
    Cells(1, 2).Font.Color = RGB(255, 0, 0)
    Cells(2, 2) = "太字"
    Cells(2, 2).Font.Bold = True

    ' 昔からある色番号(3 = 赤)。今は Color を使うほうがよい
    Cells(5, 1).Interior.ColorIndex = 3
End Sub

元資料は Interior.ColorInterior.ColorIndex を並べて示していますが、 この 2 つは別のものですColorIndex は Excel 2003 までの56 色のパレットの番号で、 Color は 1677 万色を直接指定します。 いま書くなら ColorRGB を使ってください (ColorIndex は古いブックを読むときのために残されています)。

7. 自分で書いてみる

Sub 練習()
    ' 見出しをつくる
    Cells(1, 1) = "時限"
    Cells(1, 2) = "月"
    Cells(1, 3) = "火"
    Cells(1, 4) = "水"

    ' 見出しに色をつける
    Range("A1").Interior.Color = RGB(0, 63, 140)
    Range("A1").Font.Color = RGB(255, 255, 255)
    Range("B1").Interior.Color = RGB(0, 63, 140)
    Range("B1").Font.Color = RGB(255, 255, 255)

    Cells(2, 1) = 1
    Cells(3, 1) = 2
    Cells(2, 2) = "情報学入門"

    ' ここから下に、自分で追加してみましょう

End Sub

同じことを 4 回も書いていて、面倒に思えたでしょうか。 その感覚が正しいです。 「似たことを何度も書く」のをやめるための仕組みが、 繰り返し(第 7 章)と手続き(第 9 章)です。 まずは面倒さを味わっておいてください。

8. まとめ

  1. プログラムはハードウェア → 基本ソフトウェア → アプリケーションの上に載る
  2. CPU が分かるのは機械語だけ。人が書くのは高水準言語で、間を変換する
  3. 人工言語の条件は解釈が 1 通りに決まること
  4. マクロは記録して中身を見られる。正体は VBA のプログラム
  5. Sub 名前()End Sub の間が、上から順に実行される
  6. Cells(行, 列)行が先Range("B3")列が先
  7. 色は RGB(赤, 緑, 青)。各 0〜255 で 1677 万色
  8. .xlsm で保存する。.xlsx だとマクロが消える

章末問題

選んで「答え合わせ」を押すと、その場で判定と解説が出ます。

付録:元資料からの修正一覧

もとにしたのは「情報学入門(VBA)100-2018」全 46 枚です。

元資料この教材種別
「ソフトウエア」「ハードウエア」 JIS の表記「ソフトウェア」に統一表記
RGB の説明が「8=2 色/256=2 種類/24 ビット=フルカラー」と、指数と計算の途中が欠けている 各色 8 ビット → 256 段階、3 色で 24 ビット、256316,777,216 色と明記。動かせるモデルを追加不足
Interior.ColorInterior.ColorIndex を並列に列挙 ColorIndex は Excel 2003 までの56 色パレットの番号で別物。いま書くなら Color不足
「コンパイラがプログラムを機械語に変換する」とだけあり、VBA 自身の実行方式に触れていない VBA はインタプリタ寄りで、コンパイルの手順がないことを追記不足
マルチユーザシステムが 1980 年代の形のまま クラウドとして戻ってきたという現在の位置づけを追加古い
Excel の操作手順がスクリーンショット 17 枚で、文章としての手順書がない 7 段の手順表にした(画面が変わっても読める形に)体裁
ファイルの定義を「ウィキペディアより」として画像で引用 本文で定義し、パス・木構造・拡張子 .xlsm の重要性を追加体裁
CellsRange引数の順序が逆である点への注意がない 最初の関門として明示し、実際に動かして確かめられるようにした不足

元資料で正しかったこと。 機械語とアセンブリ言語が 1 対 1 に対応すること、ニーモニック・レジスタ・低水準/高水準言語の説明、 プロセス=タスク=情報処理の単位、OS とコンパイラの定義、 SubEnd Sub の説明、 Cells(2,2).Value = "経営学部" などの書き方は、いずれも正確です。