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

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

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

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

Q&A

解決済

1回答

1370閲覧

ExcelVBAについての質問です。

koarakko

総合スコア22

VBA

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

0グッド

0クリップ

投稿2017/12/09 04:19

編集2017/12/09 11:31

ExcelVBAの質問なんですけど、usereform1のcheckboxがTrueだったら、userform2のcommandbuttonを押すと、sheetのA1からA26のセルに入ってる文章をランダムで一つ、userform2のlabelに表示する、というプログラムを見よう見まねでかいてみたのですが、上手く行きません。エラーは出てこないのですが、commandbuttonを押しても何も起こりません。何が間違っているのでしょうか?

Private Sub CommandButton10_Click()
Dim i As Long
Dim x As Long
Dim y As Long
If UserForm1.CheckBox4.Value Then
With Worksheets("Sheet2").Range("A1:A26")
i = Application.RandBetween(1, .Count)
UserForm2.Label6.Caption = .Cells(i).Value
Label7.Caption = "危険物に関する法令"
End With
End If
If UserForm1.CheckBox5.Value Then
With Worksheets("Sheet2").Range("A27:A40")
x = Application.RandBetween(1, .Count)
UserForm2.Label6.Caption = .Cells(x).Value
Label7.Caption = "基礎的な物理及び基礎的な化学"
End With
End If
If UserForm1.CheckBox6.Value Then
With Worksheets("Sheet2").Range("A41:A50")
y = Application.RandBetween(1, .Count)
UserForm2.Label6.Caption = .Cells(y).Value
Label7.Caption = "危険物の性質並びにその火災予防及び消火の方法"
End With
End If
End Sub

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

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

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

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

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

guest

回答1

0

ベストアンサー

CommandButton10_Clickにブレークポイントを設定して、実際に呼び出しが行われているか確認してみてください。

呼び出しが行われていてうまく動作しない場合は、UserForm1UserForm2が意図したフォームを指しているのか確認してみてください。

また、今回の処理はUserForm2の中に書いていると思います。その場合、UserForm2の代わりにMeキーワードを使用するとより堅牢になります(UserForm2では意図したものを取得できない場合があります)。

その他記述内にミスもありますが、動作すればわかるかと思いますので割愛します。

投稿2017/12/09 05:09

imihito

総合スコア2166

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

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

koarakko

2017/12/09 11:30

解答ありがとうございます。変数のところのミスを直してブレークポイントを使って、 If UserForm1.CheckBox4.Value Then With Worksheets("Sheet2").Range("A1:A26") i = Application.RandBetween(1, .Count) UserForm2.Label6.Caption = .Cells(i).Value Label7.Caption = "危険物に関する法令" End With End If だけ実行してみたのですが、どうやらiに代入されてるのが数字の4とか8が代入されてて、これがセルの指定になってないのではないかと考えるのですがどうでしょうか? これをセルをしていできるようにA4とかA8とかをiに代入されるようにすればいいのでしょうか?
koarakko

2017/12/09 11:36

できました!! ありがとうございます
koarakko

2017/12/09 11:44

ああ、すいません。 一つ目の If UserForm1.CheckBox4.Value Then With Worksheets("Sheet2").Range("A1:A26") i = Application.RandBetween(1, .Count) UserForm2.Label6.Caption = .Cells(i).Value Label7.Caption = "危険物に関する法令" End With は実行できたのですが、二つ目の If UserForm1.CheckBox5.Value Then With Worksheets("Sheet2").Range("A27:A40") x = Application.RandBetween(1, .Count) UserForm2.Label6.Caption = .Cells(i).Value Label7.Caption = "基礎的な物理及び基礎的な化学" End With が型が一致しませんとでてきて、x = Application.RandBetween(1, .Count)のところがマークされます。これは、どういうことなのでしょうか?
koarakko

2017/12/09 11:46

いや、わかりました。お騒がしてすみませんm(_ _)m
koarakko

2017/12/09 11:57

上手く言った一つ目はセル内の文章が英字だったのにたいし、二つ目のセル範囲にある文章は数字にしてみました。だからエラーがおきたとわかったのですが、Rangeが関係しているのでしょうか。。。
imihito

2017/12/09 16:08

他の質問に移っていますが念のため `2017/12/09 20:31`時点の処理から直すところはないはずです > どうやらiに代入されてるのが数字の4とか8が代入されてて、これがセルの指定になってないのではないかと考えるのですがどうでしょうか? これをセルをしていできるようにA4とかA8とかをiに代入されるようにすればいいのでしょうか? 直す必要はありません。 `.Cells(i).Value`で問題なくセルの値を取得できます。 ところで、解決した質問は解決済みにしてもらえないでしょうか? 似たような質問を何度かされているので、すでに回答したものなのか、新しい質問なのかしっかり見ないと区別がつかず検索のノイズとなっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問