VBAで簡単なタロット占いを作ってみた

※あくまでも独学なので、あまり参考になりませんが…。

因みにタロットの意味が何となくしか分からなかったので下記のサイト様を参考にしました。(ありがとうございました)
spicomi.net


今回は1枚のみを引くという設定です。というか、それしか出来ない。限界です…。
書いてみるとこんな感じ。

  Sub tarot()
  Dim oracle As Variant, mean As Variant, i As Integer, str As String
  
  
  '結果を配列に格納
   oracle = Array("正位置の愚者", "正位置の魔術師", "正位置の女教皇", "正位置の女帝", "正位置の皇帝", "正位置の法王", _
  "正位置の恋人達", "正位置の戦車", "正位置の力", "正位置の隠者", "正位置の運命の輪", "正位置の正義", "正位置の吊られた男", "正位置の死神", "正位置の節制", "正位置の悪魔", "正位置の塔", "正位置の星", "正位置の月", "正位置の太陽", "正位置の審判", "正位置の世界", "逆位置の愚者", "逆位置の魔術師", "逆位置の女教皇", "逆位置の女帝", "逆位置の皇帝", "逆位置の法王", _
  "逆位置の恋人達", "逆位置の戦車", "逆位置の力", "逆位置の隠者", "逆位置の運命の輪", "逆位置の正義", "逆位置の吊られた男", "逆位置の死神", "逆位置の節制", "逆位置の悪魔", "逆位置の塔", "逆位置の星", "逆位置の月", "逆位置の太陽", "逆位置の審判", "逆位置の世界")
  
  

  'タロットの意味を取得
    mean = Array("自由、未確定、純粋無垢", "創造、スタート、自信", "知力、学識、冷静、客観的", "家族愛、真実、豊か", "指導的立場、安定、責任感", "慈愛心、寛大な精神、援助を得る", "楽しい、無邪気、甘いムード", "情熱、前進、開拓", "強固、達成、エネルギッシュ", "模索、熟虜、ひとりで過ごす", _
           "幸運、偶然、運命的", "平等、冷静な判断力、義務感", "試練、報われる、忍耐", "完全な終わり、別れ、死", "バランス、穏やか、自然体", "欲望、依存状態、恐怖", "ダメージ、災難、崩壊", "高揚、憧れ、感動", "疑心暗鬼、先が見えない、誤解、神秘的世界", "純粋、笑い声、理想通り", "復活、よい知らせ、許し", "幸福感、成長、最高の幸運度", "無計画、不安定、愚か", _
           "自信がない、中途半端、消極的", "無慈悲、イライラ、批判精神", "不満、わがまま、嫉妬心", "威圧的、過信、無責任、自分勝手", "自分のことだけ、出し惜しみ、孤立無援", "遊び半分、その場限り、別れ", "暴走、停止、混乱", "気の弱さ、落胆、困難、失敗", "閉鎖的、孤立、卑屈", "チャンスを逃す、悪化、落ち込み", "変わりやすい、中途半端、迷い", "報われない、終わりが見えない、自己犠牲", "転換期、スタート、終わり", _
           "惰性、マンネリ、不摂生", "解放、断ち切る、楽になる", "崩壊目前、トラブル、不安", "幻滅、ギャップ、水", "順調、クリア、解消", "暗黒、不健康、ネガティブ", "自然消滅、刑罰、不幸", "中途半端、マンネリ感、物足りない")
    
    
    '0~43までの整数をランダムに取得
  i = Int(44 * Rnd)
    
    
    
  '文字列を生成
  str = "結果は" & oracle(i) _
  & vbCrLf & "意味は" & mean(i)


  '表示する
  MsgBox str


End Sub



もっと省略できる方法ってあるんですかね…?(全くもって無知)
 
追記。
出来栄えとしてはこんな感じです。
ユーザーフォームにこのコードを入れると…。
f:id:yukky1107:20200621232459p:plain
f:id:yukky1107:20200621232700p:plain

さらに追記。
ランダムのパターンが一定になるみたいなので、
乱数の初期化 Randomizeを入力するとよいみたいです。 ('0~43までの整数をランダムに取得
とi = Int(44 * Rnd)の間に入れるらしい…。)


―追記(2020/12/26)―
何となく引ける枚数増やしたいなと思い3枚バージョンを作ってみました。

Sub tarot()
  Dim oracle As Variant, mean As Variant, i As Integer, str As String
  
  '結果を配列に格納
  oracle = Array("正位置の愚者", "正位置の魔術師", "正位置の女教皇", "正位置の女帝", "正位置の皇帝", "正位置の法王", _
  "正位置の恋人達", "正位置の戦車", "正位置の力", "正位置の隠者", "正位置の運命の輪", "正位置の正義", "正位置の吊られた男", "正位置の死神", "正位置の節制", "正位置の悪魔", "正位置の塔", "正位置の星", "正位置の月", "正位置の太陽", "正位置の審判", "正位置の世界", "逆位置の愚者", "逆位置の魔術師", "逆位置の女教皇", "逆位置の女帝", "逆位置の皇帝", "逆位置の法王", _
  "逆位置の恋人達", "逆位置の戦車", "逆位置の力", "逆位置の隠者", "逆位置の運命の輪", "逆位置の正義", "逆位置の吊られた男", "逆位置の死神", "逆位置の節制", "逆位置の悪魔", "逆位置の塔", "逆位置の星", "逆位置の月", "逆位置の太陽", "逆位置の審判", "逆位置の世界")
  
  
 


  'タロットの意味を取得
    mean = Array("自由、希望、未来への可能性", "創造性、アイディア、始まり", "直感的、清純、真実", "豊かさ、成功、繁栄", "目標、指導力、決断力", "伝統、常識、善行", "新たな始まり、協力、出会い", "冒険心、独立心、探究心", "努力による結果、存在感、努力", "内省、静かな暮らし、真実を求める", _
           "予期せぬ幸運、解放、予想外", "正義、公正、公平", "岐路、過渡期、忍耐", "潮時、ターニングポイント、再スタート", "節度、節約、堅実さ", "破壊、堕落、嫉妬", "急激な変化、破綻、魂の成長", "希望、夢を叶える、インスピレーション", "悩み、トラウマ、隠し事", "潜在的可能性、成果、成長", "復活、回復、変革", "完成、達成、勝利", "現実逃避、焦りや不安、怠慢", _
           "失敗、予想外、優柔不断", "思い込み、批判的、偏見", "誘惑、浪費、依存心", "身勝手、独りよがり、不完全燃焼", "暗転、障害、過ち", "逃げ、迷い、訪れない", "限界、失望、疲労感", "過信、実力不足、試練", "頑固さ、引き篭もり、孤独", "トラブル、アクシデント、急変", "不安定、判断ミス、バランスが悪い", "閉塞感、本末転倒、困難", "欠乏、喪失、無力感", _
           "ミス、過度の要求、トラウマ", "悪徳、背信、強情", "混沌、戸惑い、漠然", "過大評価、誇張、誘惑", "欲求、状況の好転、真実", "エネルギー不足、実力が出ない、期待外れ", "失意、幻滅、苦境", "スランプ、苦渋、絶望感")
    
    
    '0~43までの整数をランダムに取得
  i = Int(44 * Rnd)
  i2 = Int((44 - i) * Rnd)
  i3 = Int((44 - (i + i2) * Rnd))
  
    '初期化するための
    Randomize
    
  '文字列を生成
  str = "結果は" & oracle(i) _
  & vbCrLf & "意味は" & mean(i)
  
  str2 = "結果は" & oracle(i2) _
  & vbCrLf & "意味は" & mean(i2)

  str3 = "結果は" & oracle(i3) _
  & vbCrLf & "意味は" & mean(i3)

  '表示する
  MsgBox str & vbCrLf & str2 & vbCrLf & str3


End Sub

というもの。
ちなみに実際に実行してみるとこんな感じです。
f:id:yukky1107:20201226225103p:plain
f:id:yukky1107:20201226225127p:plain

これで合ってる気がしない…。

おわり。