VBAでスタック&キューを完全攻略!積まれた書類と行列で覚えるデータ構造

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
今回はプログラミングにおける重要な概念である「スタック」と「キュー」について解説します。

おそらく、これを聞いて「難しそうだから閉じようかな…」と感じられたかもしれません。

私自身、VBAを学び始めた頃は「配列の理解だけでも大変なのに…」と感じていたものです。 しかし、実際の概念はとてもシンプルです。 

【業務効率化】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の記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました