質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

6436閲覧

VBA 画像をユーザーフォーム上にランダムに表示する

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/01/12 05:14

VBAで画像がランダムに表示されるようなコードを教えていただきたいです.
以下現在書いているコードです.
画像の配列の後にランダム関数を入れてピクチャーボックスに画像を表示させようとしているのですが,うまくいきません.
アドバイスをお願いします.

Private Sub start_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
Select Case Button
Case 1
Dim strPicture1(9) As String
strPicture1(0) = "C:\Users\Desktop\VBA\rr.jpg"
strPicture1(1) = "C:\Users\Desktop\VBA\rg.jpg"
strPicture1(2) = "C:\Users\Desktop\VBA\rb.jpg"
strPicture1(3) = "C:\Users\Desktop\VBA\gr.jpg"
strPicture1(4) = "C:\Users\Desktop\VBA\gb.jpg"
strPicture1(5) = "C:\Users\Desktop\VBA\gg.jpg"
strPicture1(6) = "C:\Users\Desktop\VBA\bb.jpg"
strPicture1(7) = "C:\Users\Desktop\VBA\br.jpg"
strPicture1(8) = "C:\Users\Desktop\VBA\bg.jpg"

Dim a As Variant a = Array("あか", "あお", "みどり") L = a(Int(Rnd() * 3)) Label7.Visible = True Label8.Visible = False Label7.Caption = L Label7.Font.Size = 100 Case 2

Dim b As Variant
b = Array("あか", "あお", "みどり")
M = b(Int(Rnd() * 3))
Label7.Visible = False
Label8.Visible = True
Label8.Caption = M
Label8.Font.Size = 100
End Select

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoichiSugiyama

2016/01/12 05:48

上手くいかないのは「ランダムに画像を選択する」ことなでしょうか、「ピクチャーボックスに表示する」ことなのでしょうか。 どう上手くいかないのか(どういう結果になってほしいのか)をもうちょっと具体的に書いてください。
thom.jp

2016/01/12 07:24

掲載いただいたコードにはPictureBoxが登場しません。 ラベルのキャプションをランダムで、あか、あお、みどりにするコードかと思いますが、そちらはうまくいきますか。 それとも、ラベルだとできるので、これのPictureBox版が欲しいという意味ですか。
guest

回答1

0

提示いただいたソースコードは"start"というオブジェクトのMouseUpイベントと思われますが、この処理の中で行われていることは、

マウス左ボタンだった場合 ・文字列配列(strPicture1)を作成し、画像ファイルパスの文字列を格納 ・ヴァリアント配列(a)を作成し、"あか","あお","みどり"の文字列を格納 ・a配列からランダムで値を取得し、Label7に表示 マウス右ボタンだった場合 ・ヴァリアント配列(b)を作成し、"あか","あお","みどり"の文字列を格納 ・b配列からランダムで値を取得し、Label8に表示

といった内容で、実質的にラベルの変更しか行われていません。
コード内に未登場のピクチャボックスの画像が変わることは、当然ですがありません。

改善案としては、まずはstrPicture1に格納した画像ファイルパスでピクチャオブジェクトのイメージソースを変更させてあげることです。
そして、おそらく左クリックのランダム値が"あか"、右クリックのランダム値が"あお"ならstrPicture1(2)のrb.jpgが適用されるような判断文も必要なのではないかと推測します。

一部推測も含まれていますので、見当違いでしたらすみません。

投稿2016/01/12 08:10

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IkumiFukiishi

2016/01/12 08:20

回答ありがとうございます. >>改善案としては、まずはstrPicture1に格納した画像ファイルパスでピクチャオブジェクトのイメージソースを変更させてあげることです。 ピクチャオブジェクトはImage1というものを作成していますが,そこにstrPicture1で格納した画像をどのようにランダムに表示させればよいかがわかりません. >>そして、おそらく左クリックのランダム値が"あか"、右クリックのランダム値が"あお"ならstrPicture1(2)のrb.jpgが適用されるような判断文も必要なのではないかと推測します。 表示される画像とラベルに表示される文字は関連性がなくて大丈夫です.(ランダムに表示されさえすればOK) ご教授よろしくお願いします.
jawa

2016/01/12 08:54

startオブジェクトがActiveXボタンコントロールのようでしたので、image1もActiveXイメージコントロールと仮定して回答させていただきます。 イメージに画像を割り当てる方法はググれば簡単に見つかると思いますが、以下のように行います。 ``` Image1.Picture = LoadPicture(画像ファイルパス) ``` label表示と連動する必要がないのであれば、strPicture1文字列配列(0~8)からランダムに1つを抽出し、LoadPictureしてあげればよいと思います。
IkumiFukiishi

2016/01/12 12:01

>>label表示と連動する必要がないのであれば、strPicture1文字列配列(0~8)からランダムに1つを抽出し、LoadPictureしてあげればよいと思います。 Image1.Picture = LoadPicture("C:\Users\Desktop\VBA\rr.jpg") ここまではわかるのですが,(もちろん画像も表示されます) ランダムに抽出してLoadPictureするというのがわかりません. 初心者ですみません.
IkumiFukiishi

2016/01/12 12:08

すみません!できました!!!!ありがとうございます!!!
jawa

2016/01/13 02:32

無事解決できたようでなによりです^^ 今回の質問は、他の方からも修正依頼が出ている通り、いろいろと情報が不足していたため推測で回答しなければならない部分が大きかったです。 回答してくれる人は、記載していただいた質問内容以上のことは推測でしか判断できません。 次回からは「やりたいこと」「自分でやったこと(環境なども)」「わからないこと」をできるだけ具体的に書いていただけると回答が付きやすいので心がけてみてください。
IkumiFukiishi

2016/01/14 02:22

修正依頼というものを今初めて見ました.使い方もわからず質問してしまい,申し訳ないです. 次回から心がけたいと思います.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問