こんにちは!ぐーです。
今回はプログラミングにおける重要な概念である「スタック」と「キュー」について解説します。
おそらく、これを聞いて「難しそうだから閉じようかな…」と感じられたかもしれません。
私自身、VBAを学び始めた頃は「配列の理解だけでも大変なのに…」と感じていたものです。 しかし、実際の概念はとてもシンプルです。
1. 「スタック」は机に積まれた書類の山(LIFO)
スタック(Stack)は、日本語で「積み重ねる」という意味です。
イメージは、「机の上にどんどん積み上げていく書類」。
- 特徴: 最後に置いた書類が、一番上にくる。
- 取り出す時: 一番上の(最後に置いた)ものから手に取る。
これをプログラミング用語でLIFO(Last-In, First-Out / 後入れ先出し)と呼びます。
2. 「キュー」はコンビニのレジ待ち(FIFO)
キュー(Queue)は、「行列」という意味です。
イメージは、「お昼時のコンビニのレジ待ち」。
- 特徴: 早く並んだ人から順番に会計する。
- 取り出す時: 最初に並んだ(最初に来た)人から抜けていく。
こちらはFIFO(First-In, First-Out / 先入れ先出し)と呼びます。
具体的な活用シーン
たとえば、Excelなどで「処理の取り消し(Ctrl + Z)」ができるのは、操作履歴 を「スタック」に保存することで実現しています。
一方、メールやチャット送信システムなどは、予約された順に送信するために「キュー」を活用しています。
この論理的な順序をコードで扱えるようになると、複雑な業務フローをバグなく自動化できるようになります。
VBAで再現してみよう!(コピペOK)
今回は、VBAの「Collection(コレクション)」という便利な機能を使って、この2つを再現します。
① スタック(後入れ先出し)のサンプル
Sub StackExample()
' 文房具を箱に積み重ねるイメージです
Dim stack As New Collection
' データを追加
stack.Add "ノート"
stack.Add "ペン"
stack.Add "消しゴム" ' これが一番上になる
MsgBox "現在のスタック数は " & stack.Count & " 個です。"
' データを取り出す
Do While stack.Count > 0
MsgBox "取り出したアイテム: " & stack(stack.Count) ' 結果:「消しゴム」→「ペン」→「ノート」の順に表示されます
stack.Remove stack.Count ' 取り出したら削除する
Loop
End Sub
② キュー(先入れ先出し)のサンプル
Sub QueueExample()
' 行列に並ぶイメージです
Dim queue As New Collection
' データを追加
queue.Add "Aさん"
queue.Add "Bさん"
queue.Add "Cさん" ' Cさんは最後尾
' データを取り出す
Do While queue.Count > 0
MsgBox "お呼び出し: " & queue(1) ' 結果:「Aさん」→「Bさん」→「Cさん」の順に表示されます
queue.Remove 1 ' 処理が終わったら1番目を消すと、2番目が1番目になります
Loop
End Sub
【深掘り】なぜ配列があるのに、わざわざ「不自由」な形にするのか?
ここで、鋭い方は一つの疑問が浮かぶかもしれません。
「VBAには配列やコレクションがあるんだから、好きな場所を書き換えればいいじゃない。どうしてわざわざ機能を制限して『スタック』や『キュー』なんて名乗る必要があるの?」
という疑問です。結論から言うと、あえて入口と出口を一つに絞ることで、プログラムのバグを劇的に減らし、コードの意図を100%明確にできるからです。
何でもできる自由な配列は便利ですが、裏を返せば「どこからでもデータを壊せてしまう」というリスクと隣り合わせ。複雑なツールを作る時に、意図しない場所でデータが書き換わってしまうリスクは、まさにプログラマーの天敵ですよね。
でも、「この処理はスタックでいく!」と方針を決めておけば、データの流れが一本道になり、迷子になることがありません。「あえて自由を制限すること」が、結果として安全で読みやすいなコードにつながることもあります。
まとめ:道具を使い分ければ、コードはもっとシンプルに
「スタック」と「キュー」の概念は、とてもシンプルです。
- 直近の作業を優先したいなら「スタック」
- 届いた順番を守りたいなら「キュー」
この使い分けができるだけで、VBAコードの論理性は一気に高まります。最初は難しく感じる概念でも、意味を理解して使いこなせば、それは強力な武器となります。
一歩ずつ、楽しみながら学んでいきましょう!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント