• ベストアンサー

エクセル2002VBAでselect caseについてご教授ください

Sub macro() x = Application.InputBox("数値を入力! 1=東京、2=大阪", Type:=1) Select Case x Case 1 指定フォルダにある別ブック「東京」を開き、そのブック内の   シート名「東京」に関しての処理   Case 2  指定フォルダにある別ブック「大阪を開き」、そのブック内の    シート名「大阪」に関しての処理 End select  「そのあとの作業」がつづきます End sub  このようなマクロを組んでいます インプットボックスで 1または2を入れると それに応じた作業をしてくれますが それ以外の数字を入力すると エラーが起きます (指定フォルダ内に「東京、「大阪」以外のブックが存在しないので) これを避けるため「1」「2」以外の数字を入力した場合に 再度インプットボックスに戻って入力を促すように 組みたいのですが どうしたらよろしいでしょう?

  • ennkai
  • お礼率54% (284/525)

質問者が選んだベストアンサー

  • ベストアンサー
  • lasichi
  • ベストアンサー率31% (122/389)
回答No.1

Select Case x Case 1 指定フォルダにある別ブック「東京」を開き、そのブック内の   シート名「東京」に関しての処理   Case 2  指定フォルダにある別ブック「大阪を開き」、そのブック内の    シート名「大阪」に関しての処理 case else exit sub End select  「そのあとの作業」がつづきます End sub  でいいんじゃないでしょうか?

ennkai
質問者

お礼

失礼しました 質問文の内容を間違っていました 改めて質問させていただききます 一度締め切らせていただき 回答順にポイントをおつきいたします 大変失礼いたしました

ennkai
質問者

補足

さっそくの回答ありがとうございます 補足いたします 必ず1か2の数字を入力させたいのですが 誤解を招く質問をしてしまい、言葉足らずで申し訳ありませんでした。

その他の回答 (2)

  • to_suzu
  • ベストアンサー率40% (2/5)
回答No.3

Select Case x Case 1 指定フォルダにある別ブック「東京」を開き、そのブック内の   シート名「東京」に関しての処理 Case 2  指定フォルダにある別ブック「大阪を開き」、そのブック内の    シート名「大阪」に関しての処理 Case Else   「ここでメッセージボックス」を出して、   入力を促す。   call macro ← もう一度このサブルーチンを呼び出す。 End select  「そのあとの作業」がつづきます End sub でいいんじゃないでしょうか?

ennkai
質問者

お礼

失礼しました 質問文の内容を間違っていました 改めて質問させていただききます 一度締め切らせていただき 回答順にポイントをおつきいたします 大変失礼いたしました

  • lasichi
  • ベストアンサー率31% (122/389)
回答No.2

No1です。 case else msgbox "正しい値を入力してください" exit sub ではどうですか? 必ず1か2を入力させたい→1か2以外の場合は処理をしないという感じで理解していました。。。

関連するQ&A

  • エクセルのマクロ selectcase について(訂正分です)

    Sub macro() x = Application.InputBox("数値を入力! 1=東京、2=大阪", Type:=1)  Select Case x   Case 1   「指定フォルダにあるブック」を開きます、   そのブック内の「東京」シートを開き   その決まった部分を選択   Case 2    「指定フォルダにあるブック」を開きます、   そのブック内の「大阪」シートを開き   その決まった部分を選択  End select 選択した部分をmacroがあるブックのシートに コピー・ペーストした後で 「指定したフォルダ内にあるブック」をクローズ End sub  このようなマクロを組んでいます インプットボックスで 1または2を入れると それに応じた作業をしてくれますが それ以外の数字を入力すると エラーが起きます (「指定フォルダにあるブック」内には 「東京、「大阪」以外のシートが存在しないので) これを避けるため「1」「2」以外の数字を入力した場合に 再度インプットボックスに戻って入力を促すように 組みたいのですが どうしたらよろしいでしょう? (開くブックはインプットボックスの共通です  実際は入力できる数字はもっとたくさんあり  それに対応しているシートもたくさんあります  わかりにくい書き方でしたら 補足要求くだされば  補足をさせていただきます よろしくおねがいします。)

  • エクセルVBA Select Case いついて

    現在時間を判断してあいさつを出すVBAを書こうとしましたがうまくいきません。 どこが悪いのかご教示くださいませ。 Sub メッセージ() Dim MG As String Select Case Time Case Time < "16:00:00" MG = "こんにちは。" Case Time < "12:00:00" MG = "おはようございます。" Case Time >= "16:00:00" MG = "こんばんは。" End Select MsgBox MG End Sub

  • VBA、このようなケースはどうしたらよいでしょうか?

    すみません。VBA初心者なので質問がちぐはぐになるかと思いますが、よろしく お願いいたします。 Sub セル番地() Worksheets("Sheet1").Select Cells(2, 2).Select Range(Selection, Selection.End(xlDown)).Select rnum = Selection.Rows.Count - 1 MsgBox rnum End sub 上のVBAでシート1に数字入力されているセルの数を判断します。 Sub sheetcopy() For X = 3 To 100 If Cells(X, 2) <> "" Then Cells(X, 2).Copy Destination:=Worksheets("Sheet1").Cells(X + rnum, 2) ElseIf Cells(X, 2) = "" Then Exit For End If Next End sub このVBAは、選択しているシートに入っている数字をシート1へコピーするものです。 ”セル番地”で判定した変数rnumを、”sheetcopy”に記載されている変数rnum へ渡すためにはどのようにしたらよいでしょうか? 引数付きプロシージャの説明を読んでみたのですが、いまいちわかりませんでした。最終的には、各シートに入力されている数値をシート1のあいているセルへどんどんコピーさせたいのです。ひとつのプロシージャに書けば、問題なく動くのですが、見た目をすっきりさせたいと思います。 イメージとしてはこんな感じです。 sub sheetcomplete () call セル番地 Worksheets("Sheet2").Select call sheetcopy call セル番地 Worksheets("Sheet3").Select call sheetcopy ~ ~ End sub そもそも、よくわかっていないので滑稽に見えると思いますが、よろしくご指導ください。

  • Select Caseでorは使えないのでしょうか?

    Sub TEST() 文字 = "あ" Select Case 文字 Case "あ" Or "い" MsgBox "「あ」もしくは「い」です。" End Select End Sub これだとエラーになるのですが ケースが「あ」もしくは「い」の場合は同じ処理をしたい場合はどうすればいいのでしょうか? Sub TEST() 文字 = "あ" Select Case 文字 Case "あ" MsgBox "「あ」もしくは「い」です。" Case "い" MsgBox "「あ」もしくは「い」です。" End Select End Sub このコードをまとめるはどうすればいいのでしょうか? よろしくお願い致します。

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • VBA Select Caseについて

    エクセルVBAでLike演算子とSelectCase構文を組み合わせたいのですが、以下ではエラーになってしまいます。 どう修正すればいいのでしょうか? ABCを含む文字列、DEFを含む文字列、その他、についての処理の分岐方法です。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Value Case Like "*ABC*" `処理A Case Like "*DEF*" `処理B Case Else `処理C End Select End Sub

  • ExcelのVBAで教えてください。

    Private Sub Worksheet_Changeについて教えて下さい。 まず初歩的なご質問ですが、Private Sub Worksheet_Changeを1つのシートモジュールに1個以上組むことは可能なのでしょうか? 例えばネットで以下のようにsheet1に Private Sub Worksheet_Change Private Sub Worksheet_Change_1 _1を付けてるのを見たことがあったので試してみましたが動作しませんでした。 今回行いたいのは1つが、指定したセルが変更されると次の指定セルに移動する。 以下がマクロです。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Select Case Target.Address(0, 0) Case "E14" [E15].Select Case "E15" [E26].Select Case "E26" [E22].Select Case "E22" [E25].Select Case "E25" [E29].Select Case "E29" [E20].Select Case "E20" [E21].Select Case "E21" [E16].Select Case "E16" [E17].Select Case "E17" [E27].Select Case "E27" [E23].Select Case "E23" [E24].Select Case "E24" [E28].Select Case "E28" [E18].Select Case "E18" [E19].Select End Select End Sub もう一つが、あるセルに数値をいれると他のブックのシートからそのシートの指定した行のセルの 数値を読み込んできて、元のブックのシートに数値を書き込むといったもです。 以下がマクロです。 Private Sub Worksheet_Change_1(ByVal Target As Excel.Range) Dim w As Workbook Dim c As Range On Error Resume Next Set xCur = Selection If Application.Intersect(Target, Range("F3")) Is Nothing Then Exit Sub If Range("F3") = "" Then Exit Sub Application.ScreenUpdating = False '転記元のブックを開いて逆順で検索する Set w = Workbooks.Open("V:\新3係(FIA・iPot)\(2)新4係(iPot)\ipot進捗\履歴管理\(9)KBB39360 X8 imm1.35 G1履歴、本体履歴 .xls") Set c = w.Worksheets("対物").Range("B:B").Find(what:=Range("F3").Value, LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious) '見つけた(一番下の)セルを基準に転記する If Not c Is Nothing Then Range("F4").Value = c.Offset(0, 1).Value End If w.Close False Application.ScreenUpdating = True End Sub ともに1つずつなら問題なく動作するのですが、2個のマクロを組むと片方しか動作しません。 多分ものすごく初歩的な事だとは思いますが、御指導の程宜しくお願いします。

  • エクセルVBAの Select Case構文

    Range("A1")に数式が入っています。 Select Caseで エラーだった場合 計算結果が正数だった場合 計算結果が負数だった場合 計算結果が"特定の文字"だったばあい その他 で分岐したいのですが、どのように記述すればよいのでしょうか? 以下、わたしの失敗例です。AAAでもプラスと出てしまいます。エラー値の判別がわかりません。 Sub TEST() Select Case Cells(1, 1) Case Is > 1: MsgBox "プラス" Case Is < 0: MsgBox "マイナス!" Case "AAA": MsgBox "AAA" Case Else: MsgBox "やり直し" End Select End Sub

  • Select Case文についてご教授お願いします。

    助けて下さい。Select Case文についてご教授お願いします。現在VB2008にてプログラムを作成しているのですが、どうにも煮詰まってしまいました。 作成内容は、Excelの任意のSheetから文字をVB上のTextBox1~50に呼び出し、その内いくつかをCheckBoxとButtonを使用してRichTextBox1に表示させると共に、TextBox51に入力した文字をExcelから呼び出した任意の文字に対応したセルへ保存というものです。Excelからの呼び出しにIf文を使用しているため、同一プロシージャ内で別のIf文を使用してしまうと、先のIf文で決めた変数が反映されないためSelect Case文を使用して保存をさせようとしているのですが上手くいきません。以下に現在のコードを記載しますのでよろしくお願いいたします。 Private Sub Button1_Click~ Excel取得コード If RadioButton1.Checked = True AndAlso RadioButton13.Checked = True Then 'Sheetと列を選択 tuki = CType(Book.Worksheets.Item(2), Microsoft.Office.Interop.Excel.Worksheet) 'Sheet情報 COLUMN1 = "B" '列1情報 COLUMN2 = "F" '列2情報 ・ ・ ・ End If 'ここから先は指定したTextBoxをRichTextBoxに表示(先のIf文内の変数は未使用) RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True ThenIf RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ End If 'ここから保存指示=エラー箇所 Select Case tuki.Range(COLUMN1 & "3").Value Case RichTextBox1.text = tuki.Range(COLUMN1 & "3").Value tuki.Range(COLUMN2 & "3").Value = TextBox51.Text Book.Save() という感じで作成しているのですが「String "" から型 'Boolean' への変換は無効です」と表示されます。 他のケースではIf文の変数をSelect Caseに対応できたので、この方法を選択しました。 基本的にSelect Caseの使い方が誤っていると思うのですが解決策が見つかりませんでした。 他の方法も含めて、良い案がありましたらご教授お願いいたします。 長文申し訳ありません。

  • Excel Select Case で変数を使うと表示されない。

    Sub test1() Dim Fruits As String Dim Iro As String Sheets("Sheet1").Select Fruits = Range("A1").Value Iro = Range("B1").Value Select Case Fruits Case Is = "みかん" Iro = "オレンジ" End Select End Sub とすると、何の反応もありませんが、 Iro = "オレンジ" の箇所を Range("B1") = "オレンジ" とするときちんと表示されます。 なぜ変数ではダメなのでしょうか?

専門家に質問してみよう