プロが教えるわが家の防犯対策術!

下記コードで[大吉、中吉、小吉、凶]が出ません。
[おみくじ0、1、2、3]となってしまいます。
修正をお願いします。

Private Sub CommandButton1_Click()

Dim i As Long
Randomize '乱数系列初期化
i = Int(4 * Rnd) '0~3で乱数生成

Dim おみくじ0 As String
Dim おみくじ1 As String
Dim おみくじ2 As String
Dim おみくじ3 As String
Dim 運勢 As String

おみくじ0 = "大吉"
おみくじ1 = "中吉"
おみくじ2 = "小吉"
おみくじ3 = "凶"

運勢 = "おみくじ" & i
MsgBox 運勢

End Sub

A 回答 (7件)

"おみくじ" & iを印字(表示)してるんだから当たり前



i=0なら ”おみくじ0”と印字される。

iによって、大吉、中吉、小吉、凶にしたいんだろ?

以下を全て変更
Dim おみくじ0 As String
Dim おみくじ1 As String
Dim おみくじ2 As String
Dim おみくじ3 As String
Dim 運勢 As String

おみくじ0 = "大吉"
おみくじ1 = "中吉"
おみくじ2 = "小吉"
おみくじ3 = "凶"

運勢 = "おみくじ" & i
MsgBox 運勢

↓↓↓↓

if i=0 then 運勢="大吉"
elseif i=1 then 運勢="中吉"
elseif i=2 then 運勢="小吉"
elseif i=3 then 運勢="凶"
endif

MsgBox 運勢
    • good
    • 0
この回答へのお礼

「"おみくじ" & iを印字(表示)してるんだから当たり前」
そういう事ですね。
コードを変更しました。
ありがとう御座いました。

お礼日時:2022/08/14 20:11

直接の回答でなく申し訳ないですが。



Dim による変数の宣言と値の代入は1度に出来ません。
これはVBなら可能ですが、VBAではエラーになると思いますよ。
    • good
    • 0
この回答へのお礼

ありがとう御座いました。

お礼日時:2022/08/14 20:13

thenで改行してね。



if i=0 then
運勢="大吉"
elseif i=1 then
運勢="中吉"
elseif i=2 then
運勢="小吉"
elseif i=3 then
運勢="凶"
endif

MsgBox 運勢
    • good
    • 0
この回答へのお礼

ありがとう御座いました。

お礼日時:2022/08/14 20:13

> 運勢 = "おみくじ" & i



「運勢」という文字型変数に「おみくじ」という文字列とLONG型変数iの値をくっつけて代入しています。

ちなみに

> Dim おみくじ0 As String
> Dim おみくじ1 As String
> Dim おみくじ2 As String
> Dim おみくじ3 As String
> Dim 運勢 As String
>
> おみくじ0 = "大吉"
> おみくじ1 = "中吉"
> おみくじ2 = "小吉"
> おみくじ3 = "凶"

の10行は

Dim おみくじ0 As String = "大吉"
Dim おみくじ1 As String = "中吉"
Dim おみくじ2 As String = "小吉"
Dim おみくじ3 As String = "凶"
Dim 運勢 As String

の5行で済みます。
参考まで。
    • good
    • 0
この回答へのお礼

変数宣言と変数を同時に記述出来るのですか。
今後の参考になりました。

お礼日時:2022/08/14 20:04

課題か何かなのだろうから、ヒントを元にテキストを見直してチャレンジしてください



答えを貰っても君の為になるとは思えない
    • good
    • 1
この回答へのお礼

きびしいお言葉。
ありがとう御座いました。

お礼日時:2022/08/14 20:07

方法としては、



1)おみくじ?の変数を配列変数にする

2)switch ~ case 文を使う

個人的にはswitch文が好み
    • good
    • 0
この回答へのお礼

配列のコードも考えてみました。
アドバイスをありがとう御座いました。
Private Sub CommandButton1_Click()

Dim おみくじ(3) As String
おみくじ(0) = "大吉"
おみくじ(1) = "中吉"
おみくじ(2) = "小吉"
おみくじ(3) = "凶"

Dim i As Long
Randomize '乱数系列初期化
i = Int(4 * Rnd) '0~3で乱数生成
MsgBox おみくじ(i)

End Sub

お礼日時:2022/08/14 20:09

だって・・・・・



"おみくじ"  <-これは文字列であり変数じゃないです

& i  <-これは文字列結合 と 0~3の数字です

このコードではこの結果が正解です
    • good
    • 0
この回答へのお礼

「"おみくじ"  <-これは文字列であり変数じゃないです

& i  <-これは文字列結合 と 0~3の数字です」
ありがとう御座いました。
その通りでした。考えが浅すぎました。

お礼日時:2022/08/14 20:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!