• 締切済み

うまくVBが組めません

会社でエクセルを使ってデータをまとめているのですがVBのユーザーフォームで作ろうとしています。今困っていることはoptionbuttonを4個使い選択式にし、選択したら「OK」buttonを押すことで各optionbuttonに対応したsheetへ飛ぶようにしたいのですがうまくいきません。 現状ですが Private Sub CommandButton1_Click() dim str as string str=optionbutton1.caption select case str case "****" sheets("1234").select ・    ・    ・ end select End Sub としています。 根本的に違うかもしれないので指摘してください。 ちなみに3日前に始めてVBを教えてもらいました。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

3日前のVBA開始者には、技巧が2,3詰まっていて難しいかもしれないが 非常にコードが少なくなります。ボタン3つに省略。 Private Sub UserForm_Click() sn = Array("", "Sheet1", "Sheet2", "Sheet3") For i = 1 To 3 If UserForm1.Controls("Optionbutton" & i) = True Then Worksheets(sn(i)).Select End If Next i End Sub 上記はフォームのクリックで動きます。コマンドボタンで動かすなら そのボタンのクリックイベントに入れてください。 >Array("", "Sheet1", "Sheet2", "Sheet3") は実際のシート名を並べてください。ボタンと対応する順序で、実情の名前に合わせてください。 ーー 上記はオプションボタンの名前の部分が、共通の名称+順番の数字(1,2,3...半角)とつけてある場合の例です。そうすることで、擬似コントロール配列を使えます。VBのコントロールを参考までに「教えてもらった先生」に聞いてください。 Optionbutton"ー>別の名前、にしたなら"Optionbutton" の部分を変えてください。 ーーー >VBが組めません 内容的に、VBAの課題です。VBと(エクセル)VBAと、その違いも、「教えてもらった先生」に聞いてください。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 まず、質問に書かれたコードの意味は分かるけれども、入門レベルでは、まだ、書かないほうがよいかもしれませんね。ワークシートから値を取るなどのコードを学んでからのほうが良いです。いきなり、UserForm では、少し、難しいです。UserForm は、イベントということを学ばなくてはなりません。また、いきなり実務に利用しようとすると、挫折してしまうかもしれません。 ボタンで行う方法。 Private Sub CommandButton1_Click()  For i = 1 To 4   If Controls("OptionButton" & i) Then    Worksheets("Sheet" & i).Select   End If  Next i End Sub  Worksheets(i).Select (この場合は、Sheets(i) は、使わないほうがよいです。) Index で取る方法もあります。通常、OptionButton は、ひとつしか、True になりません。また、コード上では、True は、省略します。 もし、基本を言うのであれば、 Private Sub OptionButton1_Click()  If OptionButton1 Then   Worksheets("Sheet1").Select  End If End Sub Private Sub OptionButton2_Click()  If OptionButton2 Then   Worksheets("Sheet2").Select  End If End Sub Private Sub OptionButton3_Click()  If OptionButton3 Then   Worksheets("Sheet3").Select  End If End Sub Private Sub OptionButton4_Click()  If OptionButton4 Then   Worksheets("Sheet4").Select  End If End Sub このように書きます。OptionButton を選択したら、ワークシートを選択できます。時々、初心者の方で、面倒くさいという人がいますが、コピペで書き換えていきます。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

本やWEBでもう少し勉強しては 初歩の初歩ですよ --------------------------------------------------- Private Sub CommandButton1_Click() If OptionButton1.Value = True Then sheets("1234").select If OptionButton2.Value = True Then sheets("2345").select If OptionButton3.Value = True Then sheets("3456").select If OptionButton4.Value = True Then sheets("4567").select End Sub ----------------------------------------------------- のように普通はcaptionの値ではなく、Valueで選択されているか、いないかを求めます

関連するQ&A

  • エクセルのVBユーザーフォームがうまく組めません

    会社でエクセルを使ってデータをまとめているのですがVBのユーザーフォームで作ろうとしています。今困っていることはoptionbuttonを4個使い選択式にし選択したら「OK」buttonを押すことで各optionbuttonに対応したsheetへ飛ぶようにしたいのですがうまくいきません。 現状ですが Private Sub CommandButton1_Click() dim str as string str=optionbutton1.caption select case str case "****" sheets("1234").select ・    ・    ・ end select End Sub としています。 間違いがありましたら指摘してください。 ちなみに3日前に始めてVBを教えてもらいました。

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • VB6 Form内のDragDrop

    VB6でForm内にCommandButtonがいくつか有ります。 各CommandButtonはClickするとShellオブジェクトでファイルを開く様になっています。 やりたいことは 2つのCommandButton間をDragDrop?によりCaptionを入れ替えたいです。 (CommandButton間をマウスDragDropでCaption名入れ替え) MouseDownとDragDropイベントで何とかなると思いましたがうまくいきません。 Dim dd As Integer Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then dd = 1 'CommandボタンNo, End If End Sub Private Sub Command2_DragDrop(Source As Control, X As Single, Y As Single) Dim cn As String cn = Command2.Caption Command2.Caption = Controls("Command" & dd).Caption Controls("Command" & dd).Caption = cn End Sub CommandButtonプロパティでDragModeを自動にするとShellオブジェクトでファイルが開かないし サイトで調べたところファイルの移動やコマンド自体の移動などで分かりませんでした。 ご教授お願い致します。

  • このような使い方は間違っているのでしょうか?(VB.NET2002)

    このような使い方は間違っているのでしょうか?(VB.NET2002) Dim count As Int16 Private Sub JOB(ByVal x) x = x + 1 TextBox1.Text = x End Sub Private Sub Button1_Click(・・・・ JOB(count) End Sub

  • [Q:VBA] 現在のオブジェクトの参照(JavaScriptのthisキーワードに相当するもの)

    こんにちは。 Excel VBAで現在のオブジェクトの参照をすることはできますでしょうか?(JavaScriptのthisキーワードに相当するものはあるのでしょうか?) 下記のようなことをしたいのですが(コード自体に意味はありません。検証用です)。 よろしくお願い致します。 -- Private Sub CommandButton1_Click() キャプション = CommandButton1.Caption MsgBox(キャプション) End Sub Private Sub CommandButton2_Click() キャプション = CommandButton2.Caption MsgBox(キャプション) End Sub ・・・×数十個 ↓↓↓ Private Sub CommandButton1_Click() funcCaption End Sub Private Sub CommandButton2_Click() funcCaption End Sub ・・・×数十個 Sub funcCaption() キャプション = this.Caption MsgBox(キャプション) End Sub

  • エクセルVBAについて

    エクセルのVBAについて、質問させて下さい。 下記コードはform上に記述しました。 オプションコマンドのオブジェクト数をcaseで選択し、その選択したものを格納しています。 Private Sub CommandButton1_Click() Dim i As Long lngData(1) = 0 For i = 1 To 12 If Me.Controls("OptionButton" & i).Value Then lngData(1) = i Exit For End If Next Select Case lngData(2) '←次のUserForm Case 1 Unload Me UserForm2.Show ・・・・ End Select End Sub でまた別form上で呼び出しているのですが、 この時にオプションコマンドcaptionを格納するにはどういったコードになるのでしょうか? またそれに際してコードに変更がある場合も教えてください。 素人質問ですので、そもそもオプションボタンのcaptionは格納なんてできないのなら諦めます。 では、よろしくお願い致します。 以上

  • VB2008 comboboxの内容をSelectCaseで使いたい

    VB2008 comboboxの内容をSelectCaseで使いたい いつもお世話になってます。 初めてComboboxを使っています。 リストには 「メロンパン」 「コロッケパン」 「ハンバーガー」 と入っていて、 デバックしそれぞれを選択すれば、無事に指定欄に表示されるようにまではなりました。 ここでストップしてしまいまして、 Selectcase(今週習った)で、 case 1 (メロンパンは120円なので) en=個数x120 case 2 … というようにしたいのですが、 "Select Case ○○"の○○を何にすればいいのか分からないのと、 caseのあとの数字は(リストの上から)0,1,2というように聞いた気がしたのですがそれでよいのかどうか。 見ていただけないでしょうか。 未完成のぼろぼろですが、コードをおのせします。 Public Class Form1 Dim cm, a As String Dim kosu, en As Integer Private Sub ShapeComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShapeComboBox.SelectedIndexChanged txtKaimono.Text = ShapeComboBox.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kosu = TextBox1.Text Select Case ShapeComboBox Case 0 en = kosu * 120 Case 1 en = kosu * 180 Case 2 End Select End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub End Class

  • VBで、教えて下さい。

    現在、VBを使っていろいろと作成しておりまして・・・。 Private Sub CommandButton1_Click() Worksheets("Sheet1").Activate ActiveSheet.Range("A1").Select End Sub で、シートの移動は出来るのですが、 ”他のファイル(BOOK)”へ移動するには、どのように、書けば良いか教えて頂けないでしょうか? 仕事で、今日中に仕上げろと指示が御座いまして、困っております。

  • VB2008改行できません

    VB2008改行できません お願いします。 メロンパン 3個 240円 コロッケパン 2個 … という風にしたいのですが、 一行目が表示され、2行目の「コロッケパン」を入れた瞬間、 1行目が消え、 コロッケパンのみが表示されます。 なぜでしょうか。 正しいコードと、どのような理屈でそうなるのか頂けると嬉しいです。 Public Class Form1 Dim cm, a As String Dim kosu, en As Integer Private Sub ShapeComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShapeComboBox.SelectedIndexChanged cm = ShapeComboBox.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kosu = TextBox1.Text Select Case ShapeComboBox.SelectedIndex Case 0 en = kosu * 120 Case 1 en = kosu * 180 Case 2 en = kosu * 240 End Select txtKaimono.Text = cm + kosu.ToString(" ##個") + en.ToString(" #,###円") + vbCrLf End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub End Class

  • どなたか教えてください。

    Public myop As Integer 'オプション選択保持用 Private Sub CommandButton1_Click() Dim row As Integer Dim mykey As String '比較キー '選択したオプションボタンにより '比較キーと選択保持用変数に各値を代入 Select Case True Case OptionButton3: mykey = ("A2:A11"): myop = 1 Case OptionButton4: mykey = ("B2:B11"): myop = 2 Case OptionButton5: mykey = ("C2:C11"): myop = 3 Case OptionButton6: mykey = ("D2:D11"): myop = 4 Case Else: myop = 0 End Select If myop = 0 Then Exit Sub For row = 1 To 65535 If ActiveSheet.Cells(1, row).Value Like mykey Then ActiveSheet.Cells(1, row) = "#####" End If Next row End Sub で、For row = 1 To 65535でエラーがでます。 どうしてなのでしょうか・・・?

専門家に質問してみよう