Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6832 / 13646 ツリー ←次へ | 前へ→

【42826】MsgBoxをランダムに表示できるかな まーくん 06/9/22(金) 22:38 質問[未読]
【42828】Re:MsgBoxをランダムに表示できるかな ichinose 06/9/22(金) 23:37 発言[未読]
【42829】Re:MsgBoxをランダムに表示できるかな まーくん 06/9/23(土) 0:02 発言[未読]
【42841】Re:MsgBoxをランダムに表示できるかな かみちゃん 06/9/23(土) 9:37 発言[未読]
【42830】Re:MsgBoxをランダムに表示できるかな かみちゃん 06/9/23(土) 0:04 回答[未読]
【42831】Re:MsgBoxをランダムに表示できるかな まーくん 06/9/23(土) 0:19 発言[未読]
【42832】Re:MsgBoxをランダムに表示できるかな かみちゃん 06/9/23(土) 0:25 発言[未読]
【42834】Re:MsgBoxをランダムに表示できるかな まーくん 06/9/23(土) 1:01 発言[未読]
【42835】Re:MsgBoxをランダムに表示できるかな Blue 06/9/23(土) 1:12 回答[未読]
【42836】Re:MsgBoxをランダムに表示できるかな まーくん 06/9/23(土) 1:23 発言[未読]
【42871】Re:MsgBoxをランダムに表示できるかな まーくん 06/9/24(日) 1:31 お礼[未読]

【42826】MsgBoxをランダムに表示できるかな
質問  まーくん  - 06/9/22(金) 22:38 -

引用なし
パスワード
   皆さんよろしくお願いします。
ブックオープン時に下記メッセージが出るのですが
ケース1
これを4〜6種類用意しランダムにオープンごとに
表示を変えることが出来るでしょうか。

ケース2
時間帯で表示を変える
例として
8:00〜9:59まで"おはようございます"
10:00〜16:59"こんにちわ"
17:00〜19:59"そろそろかえれ"
20:00〜7:59"○○○○○"
お分かりになる方教えて下さい。

Sub Auto_Open()
  MsgBox "今日の天気は晴れです?!"
End Sub

【42828】Re:MsgBoxをランダムに表示できるかな
発言  ichinose  - 06/9/22(金) 23:37 -

引用なし
パスワード
   ▼まーくん さん:
こんばんは。

>皆さんよろしくお願いします。
>ブックオープン時に下記メッセージが出るのですが
>ケース1
>これを4〜6種類用意しランダムにオープンごとに
>表示を変えることが出来るでしょうか。
>
Sub test1()
  Dim mesarray As Variant
  mesarray = Array("aaa", "bbb", "ccc", "ddd", "eee", "fff")
'メッセージを配列にしておく
  Randomize Timer()
  MsgBox mesarray(Int(Rnd() * (UBound(mesarray) + 1)))
  '乱数を使用して0〜5を無作為に取得する
End Sub

>ケース2
>時間帯で表示を変える
>例として
>8:00〜9:59まで"おはようございます"
>10:00〜16:59"こんにちわ"
>17:00〜19:59"そろそろかえれ"
>20:00〜7:59"○○○○○"
Sub test2()
  Dim tmarray As Variant
  Dim mesarray As Variant
  Dim ans As Variant
  tmarray = Array(420, 600, 1020, 1200)
  mesarray = Array("おはようございます", "こんにちは", "そろそろかえれ", "○○○○○○")
  ans = Application.Match(Time() * 24 * 60, tmarray, 1)
  If IsError(ans) Then ans = 4
  MsgBox mesarray(ans - 1)
End Sub


試してください

【42829】Re:MsgBoxをランダムに表示できるかな
発言  まーくん  - 06/9/23(土) 0:02 -

引用なし
パスワード
   ▼ichinose さん:

>Sub test1()
>  Dim mesarray As Variant
>  mesarray = Array("aaa", "bbb", "ccc", "ddd", "eee", "fff")
>'メッセージを配列にしておく
>  Randomize Timer()
>  MsgBox mesarray(Int(Rnd() * (UBound(mesarray) + 1)))
>  '乱数を使用して0〜5を無作為に取得する
>End Sub
>
>>ケース2
>>時間帯で表示を変える
>>例として
>>8:00〜9:59まで"おはようございます"
>>10:00〜16:59"こんにちわ"
>>17:00〜19:59"そろそろかえれ"
>>20:00〜7:59"○○○○○"
>Sub test2()
>  Dim tmarray As Variant
>  Dim mesarray As Variant
>  Dim ans As Variant
>  tmarray = Array(420, 600, 1020, 1200)
>  mesarray = Array("おはようございます", "こんにちは", "そろそろかえれ", "○○○○○○")
>  ans = Application.Match(Time() * 24 * 60, tmarray, 1)
>  If IsError(ans) Then ans = 4
>  MsgBox mesarray(ans - 1)
>End Sub
>
>
>試してください
ichinoseさんありがとうございます。
バッチリです
時間変更の場合を聞きたいのですが(420, 600, 1020, 1200)は
どういう意味ですかまた、Arrayの意味も?ヘルプだとHasArray、FormulaArray
CurrentArray、IsArrayただArrayというのは出てきませんが?

'乱数を使用して0〜5を無作為に取得する
数を変えることは可能ですかたとえば0〜20とか?
よろしくお願いします。

【42830】Re:MsgBoxをランダムに表示できるかな
回答  かみちゃん  - 06/9/23(土) 0:04 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ケース1
>これを4〜6種類用意しランダムにオープンごとに
>表示を変えることが出来るでしょうか。

乱数を発生させて、その乱数に対応したメッセージでできるのではないでしょうか?

たとえば、1〜100の整数をランダムに表示させるには、以下のような感じでできます。
Sub Macro1()
 Dim lowerbound As Integer
 Dim upperbound As Integer
 
 lowerbound = 1
 upperbound = 100
 MsgBox Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
End Sub

>ケース2
>時間帯で表示を変える
>例として
>8:00〜9:59まで"おはようございます"
>10:00〜16:59"こんにちわ"
>17:00〜19:59"そろそろかえれ"
>20:00〜7:59"○○○○○"

以下のような感じでできると思います。
パソコンのシステム時刻をいろいろ変えて試してみてください。

 Select Case Hour(Time)
  Case 8 To 9
   MsgBox "おはようございます"
  Case 10 To 16
   MsgBox "こんにちわ"
  Case 17 To 19
   MsgBox "そろそろかえれ"
  Case 0 To 7, 20 To 23
   MsgBox "○○○○○"
 End Select

【42831】Re:MsgBoxをランダムに表示できるかな
発言  まーくん  - 06/9/23(土) 0:19 -

引用なし
パスワード
   ▼かみちゃん さん:

ありがとうございます。

>>ケース1
>>これを4〜6種類用意しランダムにオープンごとに
>>表示を変えることが出来るでしょうか。
>
>乱数を発生させて、その乱数に対応したメッセージでできるのではないでしょうか?
>
>たとえば、1〜100の整数をランダムに表示させるには、以下のような感じでできます。
>Sub Macro1()
> Dim lowerbound As Integer
> Dim upperbound As Integer
> 
> lowerbound = 1
> upperbound = 100
> MsgBox Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
>End Sub
 ↑
数字は毎回ランダムにかわりましたが
文言でコードをいれるにはどうしたらいいのでしょう


>以下のような感じでできると思います。
>パソコンのシステム時刻をいろいろ変えて試してみてください。
>
> Select Case Hour(Time)
>  Case 8 To 9
>   MsgBox "おはようございます"
>  Case 10 To 16
>   MsgBox "こんにちわ"
>  Case 17 To 19
>   MsgBox "そろそろかえれ"
>  Case 0 To 7, 20 To 23
>   MsgBox "○○○○○"
> End Select
これはよくわかりました。

【42832】Re:MsgBoxをランダムに表示できるかな
発言  かみちゃん  - 06/9/23(土) 0:25 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>数字は毎回ランダムにかわりましたが
>文言でコードをいれるにはどうしたらいいのでしょう

Select Case で分岐させればいいだけだと思います。

Select Case Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
 Case 1 To 50
  MsgBox "文言1"
 Case 51 To 100
  MsgBox "文言2"
End Seelct

※私がモタモタしているうちにichinoseさんからコメントがついていましたね。
 横から失礼しました。

【42834】Re:MsgBoxをランダムに表示できるかな
発言  まーくん  - 06/9/23(土) 1:01 -

引用なし
パスワード
   ▼かみちゃん さん:
下記標準モジュールに書込オープンさせるたびに
MsgBoxの表示が変わるはずなのですが
毎回"今日は儲かりました?"
しかでないのですが
コードおかしいですか?

Sub Auto_Open()
 Dim lowerbound As Integer
 Dim upperbound As Integer
 
 lowerbound = 1
 upperbound = 100
 
 Select Case Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
 Case 1 To 10
  MsgBox "血圧は正常ですか?"
 Case 11 To 20
  MsgBox "今日のあなたの運勢は○吉です"
 Case 21 To 30
  MsgBox "今日もお仕事頑張るぞ!"
 Case 31 To 40
  MsgBox "昨日の夕飯何食べました?"
 Case 41 To 50
  MsgBox "おとといの朝食はなに?"
 Case 51 To 60
  MsgBox "今日は儲かりました?"
 Case 61 To 70
  MsgBox "今日は残業無しで帰りましょう。家族が待ってますよ?"
 Case 71 To 80
  MsgBox "今日のあなたの運勢は○凶です車の運転は要注意です"
 Case 81 To 90
  MsgBox "貴方の名前・年齢・血液型は"
 Case 91 To 100
  MsgBox "お元気ですか?"
  End Select
End Sub

【42835】Re:MsgBoxをランダムに表示できるかな
回答  Blue  - 06/9/23(土) 1:12 -

引用なし
パスワード
   Rnd関数のヘルプより
<MSDN>
引数 number の値によって、Rnd 関数が返す乱数が決まります。

初期シード値が変わらない限り、一連の Rnd 関数が返す乱数系列は同じになります。これは、連続する各 Rnd 関数が乱数系列の中の直前の乱数をシード値として、次の乱数をそれぞれ生成するためです。

システム タイマーから取得した新しいシード値を使って、乱数ジェネレータを初期化するには、Rnd 関数を呼び出す前に、引数を指定せずに Randomize ステートメントを実行してください。
</MSDN>

「Randomizeステートメントを実行してください」とのことです。

つまり

>Sub Auto_Open()
> Dim lowerbound As Integer
> Dim upperbound As Integer
> 
> lowerbound = 1
> upperbound = 100
> 
'☆追加
Randomize  ' 乱数発生ルーチンを初期化します。
> Select Case Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
(略)

【42836】Re:MsgBoxをランダムに表示できるかな
発言  まーくん  - 06/9/23(土) 1:23 -

引用なし
パスワード
   ▼Blue さん:
ありがとうございます。
うまくいきました。
申し訳ないですが
[#42829] の疑問わかりますか?

>Rnd関数のヘルプより
><MSDN>
>引数 number の値によって、Rnd 関数が返す乱数が決まります。
>
>初期シード値が変わらない限り、一連の Rnd 関数が返す乱数系列は同じになります。これは、連続する各 Rnd 関数が乱数系列の中の直前の乱数をシード値として、次の乱数をそれぞれ生成するためです。
>
>システム タイマーから取得した新しいシード値を使って、乱数ジェネレータを初期化するには、Rnd 関数を呼び出す前に、引数を指定せずに Randomize ステートメントを実行してください。
></MSDN>
>
>「Randomizeステートメントを実行してください」とのことです。
>
>つまり
>
>>Sub Auto_Open()
>> Dim lowerbound As Integer
>> Dim upperbound As Integer
>> 
>> lowerbound = 1
>> upperbound = 100
>> 
>'☆追加
>Randomize  ' 乱数発生ルーチンを初期化します。
>> Select Case Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
>(略)

【42841】Re:MsgBoxをランダムに表示できるかな
発言  かみちゃん  - 06/9/23(土) 9:37 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

>時間変更の場合を聞きたいのですが(420, 600, 1020, 1200)は
>どういう意味ですかまた、Arrayの意味も?

Array関数もヘルプに載っていますので、確認してみてください。
(420, 600, 1020, 1200)
の意味は、「分」です。7:00の場合だと7*60=420ですよね?
Match関数の特性も活かしてあるので、そちらのヘルプも確認してみてください。

【42871】Re:MsgBoxをランダムに表示できるかな
お礼  まーくん  - 06/9/24(日) 1:31 -

引用なし
パスワード
   ▼Blue さん:
▼ichinose さん:
▼かみちゃん さん:
ありがとうございました。
自分でも工夫しながら完成させます。

6832 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free