Cells(行, 列) と Range("列行") でセルに値を入れられるRGB で色を作り、セルの背景と文字に色をつけられるこれから書くプログラムは、単独で動くわけではありません。 下に何層もの土台があって、その上に載っています。
| 語 | 意味 |
|---|---|
| オペレーティングシステム (operating system) |
基本ソフトウェアの 1 つ。もとはコンピュータの資源を効率よく使うために 最低限必要なソフトウェアだった。現在は人が操作しやすくする面(ユーザインタフェース)も重要になっている |
| コンパイラ (compiler) |
基本ソフトウェアの 1 つ。プログラムを機械語(コンピュータが解釈できる数値)に変換する |
| 言葉 | 意味 | 反対の言葉 |
|---|---|---|
| マルチユーザシステム | 1 台のコンピュータを複数の利用者が共有する | シングルユーザシステム |
| マルチタスク マルチプロセス |
コンピュータ上の情報処理の単位=タスク=プロセス。 これを並行して処理できる | シングルタスクシステム |
ワードとエクセルとブラウザを同時に開いていられるのは、 OS がそれぞれをプロセスとして管理し、CPU を細かく割り振っているからです。
いまのマルチユーザ。 元資料は「1 台を複数人が共有する」という 1980 年代の形(大型計算機に端末をつなぐ)を前提にしていますが、 この考え方はクラウドとして戻ってきました。 Google ドライブや Microsoft 365 は、遠くにある 1 台(正確には多数)を大勢が共有する仕組みです。 「自分の PC で全部やる」時代をはさんで、また共有に向かっている ── というのが現在の位置です。
コンピュータの内部では、すべてが 2 進数です。 CPU が直接実行できるのは機械語(machine language)── 0 と 1 の並びだけです。 しかしそれを人が書くのは無理なので、間に何段か置きます。
| 語 | 意味 |
|---|---|
| 機械語 | コンピュータが解釈できる言葉。数値(2 進数) |
| ニーモニック | 機械語を、人が理解・記述しやすいように
英単語や記号に置きかえたもの(mov=move、add=加算) |
| レジスタ | CPU が持つ少量の記憶装置。計算の作業台 |
| 低水準言語 | 機械語・アセンブリ言語。機械の都合に近い |
| 高水準言語 | Fortran、C、Python、VBA ── 人の考え方に近い |
機械語とアセンブリ言語は1 対 1 に対応しています。 一方、高水準言語の 1 行は機械語の何十行にもなります。 その変換をするのがコンパイラです。
VBA はコンパイラ型ではありません。 元資料は「コンパイラがプログラムを機械語に変換する」と説明していますが、 これから使う VBA はインタプリタ寄りの仕組みで動きます ── 書いたプログラムをその場で 1 行ずつ解釈して実行します。 だから「コンパイルする」という手順がなく、書いてすぐ F5 で動きます。 その代わり、実行してみるまで見つからない誤りがあります (このページの中で動いている処理系も、同じくインタプリタです)。
自然言語(natural language)は日本語や英語のように、 誰かが設計したのではなく自然に育った言葉です。 人工言語(artificial language)は目的のために設計された言葉で、 プログラミング言語はこちらに入ります。
両者の決定的な違いはあいまいさを許すかどうかです。 「適当に温めて」は日本語として通じますが、プログラムには書けません。 解釈が 1 通りに決まることが人工言語の条件で、 だからこそ機械が実行できるのです(第 9 章のアルゴリズムの条件につながります)。
ファイルとは情報を管理する単位です。 そしてファイルを名前と場所で整理する仕組みがファイルシステムです。
C: など)の下にフォルダ(=ディレクトリ)があり、その中にファイルがあるC:\Users\kodama\report.xlsm)拡張子は「約束」です。
.xlsx と .xlsm の違いは、名前の最後の 1 文字だけではありません ──
.xlsm でないとマクロが保存されません。
Excel は「マクロが入っているのに .xlsx で保存しようとしている」と警告しますが、
そこで「はい」を押すと書いたプログラムが消えます。
この授業でいちばん多い事故なので、最初に覚えてください。
マクロとは、Excel の操作を記録して再生できるようにしたものです。 そして記録されたものの正体はVBA のプログラムです。 だから「記録する → 中身を見る」のが、いちばん自然な入り口になります。
| 操作 | |
|---|---|
| ① | 「表示」→「マクロ」→「マクロの記録」を選ぶ。名前は Macro1 のまま |
| ② | セルに何か入力する・色をつける(この操作が記録される) |
| ③ | 「表示」→「マクロ」→「記録終了」 |
| ④ | 「表示」→「マクロ」→「マクロの表示」→ Macro1 →「編集」 |
| ⑤ | VBA の画面が開く。記録された内容がプログラムになっている |
| ⑥ | シートの内容を消してから、F5 で実行 → 同じ結果が再現される |
| ⑦ | 「名前を付けて保存」→ 「Excel マクロ有効ブック(.xlsm)」 |
プログラムの形はこれだけです。
Sub Macro1() ── ここから「Macro1」という名前のプログラムが始まる
End Sub ── ここでプログラムが終わる
この 2 行の間に書いたことが、上から順に実行されます。
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)。
「行・列」の順を取り違えるとこうなる、というのを一度自分で見ておくと、
あとで原因不明のずれに悩まなくなります。
色は 赤・緑・青の 3 つの数(各 0〜255)で作ります。これが 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.Color と Interior.ColorIndex を並べて示していますが、
この 2 つは別のものです。
ColorIndex は Excel 2003 までの56 色のパレットの番号で、
Color は 1677 万色を直接指定します。
いま書くなら Color と RGB を使ってください
(ColorIndex は古いブックを読むときのために残されています)。
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 章)です。 まずは面倒さを味わっておいてください。
Sub 名前() と End Sub の間が、上から順に実行されるCells(行, 列) は行が先、Range("B3") は列が先RGB(赤, 緑, 青)。各 0〜255 で 1677 万色選んで「答え合わせ」を押すと、その場で判定と解説が出ます。
もとにしたのは「情報学入門(VBA)100-2018」全 46 枚です。
| 元資料 | この教材 | 種別 |
|---|---|---|
| 「ソフトウエア」「ハードウエア」 | JIS の表記「ソフトウェア」に統一 | 表記 |
| RGB の説明が「8=2 色/256=2 種類/24 ビット=フルカラー」と、指数と計算の途中が欠けている | 各色 8 ビット → 256 段階、3 色で 24 ビット、2563=16,777,216 色と明記。動かせるモデルを追加 | 不足 |
Interior.Color と Interior.ColorIndex を並列に列挙 |
ColorIndex は Excel 2003 までの56 色パレットの番号で別物。いま書くなら Color | 不足 |
| 「コンパイラがプログラムを機械語に変換する」とだけあり、VBA 自身の実行方式に触れていない | VBA はインタプリタ寄りで、コンパイルの手順がないことを追記 | 不足 |
| マルチユーザシステムが 1980 年代の形のまま | クラウドとして戻ってきたという現在の位置づけを追加 | 古い |
| Excel の操作手順がスクリーンショット 17 枚で、文章としての手順書がない | 7 段の手順表にした(画面が変わっても読める形に) | 体裁 |
| ファイルの定義を「ウィキペディアより」として画像で引用 | 本文で定義し、パス・木構造・拡張子 .xlsm の重要性を追加 | 体裁 |
Cells と Range の引数の順序が逆である点への注意がない |
最初の関門として明示し、実際に動かして確かめられるようにした | 不足 |
元資料で正しかったこと。
機械語とアセンブリ言語が 1 対 1 に対応すること、ニーモニック・レジスタ・低水準/高水準言語の説明、
プロセス=タスク=情報処理の単位、OS とコンパイラの定義、
Sub/End Sub の説明、
Cells(2,2).Value = "経営学部" などの書き方は、いずれも正確です。