電子書籍の厳選無料作品が豊富!

エクセルVBAで
■Select...Caseの構文は、次(構文1)のようになっているとのことですが、
構文2のような、意味でネストして使う使い方は許されているのでしょうか。
(参考 QNo.1965604 の#7に,#8に関係したところをお聞きします。)

(構文1)
Select Case 変数
 Case 値1
   変数が値1の時の処理
 Case 値2
   変数が値2の時の処理
 Case Else
   他のCaseに合わない場合(その他)の処理
End Select

(構文2)
Select Case 変数a
 Case 値1
   変数aが値1の時の処理
      Select Case 変数b
           Case 値1
           変数bが値1の時の処理
           Case 値2
           変数bが値2の時の処理
      Case Else
       変数bが、他のCaseに合わない場合(その他)の処理
End Select

 Case 値2
   変数aが値2の時の処理
 Case Else
   変数aが、他のCaseに合わない場合(その他)の処理
End Select

A 回答 (10件)

質問 1965604 で回答したものです。

「メチャメチャになっている」と書いた箇所があり、そのことと本質問が関連しているのかもしれません。もしそうなら、言い訳になりますが、
OKWAVEの補足をパッと見て、OKWAVEではインデントが崩れるのでネストを見抜けず、SelectCaseの視点(変数)が変わっていたので誤解したようです。Case分のネストも最近使わなかったので。
CASE文のネストが可能かどうかは、既出回答でお分かりになったと思います。
複数視点からの判別はプログラム表現(コーディング)上難しいもののように思ってます。
それぞれ(変数aと変数b)を個別に条件を満たすかどうかのサイン(フラグ)0,1を作って(するとサインの組み合わせができますが)、11、10、01、00の各パターンを判別(例えばネストなしのCASE文で)して、処理を変えたような経験もあります。
質問 1965604 では、他の箇所の補足振りから見て、CASE文のネストまで使われるレベルの方とは思わず、失礼しました。
    • good
    • 0
この回答へのお礼

>インデントが崩れるのでネストを見抜けず

きちんと書かなければ、伝わらないですよね。失礼しました。
ごていねいに、フォローありがとうございました。

お礼日時:2006/02/20 09:14

>どうもされてないと思いますが、これは、どう確認するのですか。


>あるいは、どうやってインストールしますか。
VBE(ワークシートからはALT+F11)の画面で
"case"の文字の上でF1キーを押してもヘルプ画面がでてこないのであれば、おそらく、インストールがされていないのだと思います。
ただ、(私は既にインストールしてあるので未確認ですが)エクセルに於いては、インストールされていない機能を使用しようとすると、アプリケーションCDを挿入してインストールを促すメッセージがでたと思います。(メッセージにしたがってCDを挿入し、エクセルの機能の中からVBAのヘルプのインストールを選ぶ)
そうでなくても、アプリケーションCDを挿入することで、現在インストールされている状況を調べて、機能を追加インストールするようなインストールプログラムが起動したと思います。
    • good
    • 0
この回答へのお礼

>case"の文字の上でF1キーを押してもヘルプ画面がでてこないのであれば、

失礼、でました。こうやってでるんですね。初めて知りました。
どうもごていねいに、とても感謝しております。

お礼日時:2006/02/20 09:19

こんにちは。

 Wendy02です。

私は、表立っては、掲示板などでは言いませんが、

>構文上だめみたいな説明があったのでお聞きしたのです。

それは、コーディング・ルール(プログラミング作法)ではダメ(違反)だということです。ただし、それは、プロの世界の話です。

それと、コーディング・ルールは、元々はVBからの話であって、VBとVBAでは、そのルールが若干違ったりします。

ただ、VBAは、個人が個人の範囲で使うものですから、スパゲティでも、マカロニでも、通れば文句ないだろうって、開き直られたり、逆切れされたりする世界だから、コーディング・ルールは通用しないっていうだけです。

同様のものに、With ステートメントのネストがあります。
    • good
    • 0
この回答へのお礼

いろいろ教えていただきありがとうございました。

お礼日時:2006/02/20 09:20

>検索キーワードは何にするとでてきますか。


Select case
の"case"にカーソルがある状態でF1キーを押します。

(VBAのヘルプ自体はインストールされていますよね。)

この回答への補足

VBAのヘルプ自体はインストールされていますよね。
どうもされてないと思いますが、これは、どう確認するのですか。
あるいは、どうやってインストールしますか。

補足日時:2006/02/16 14:30
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございました。

お礼日時:2006/02/20 09:21

>検索キーワードは何にするとでてきますか。


私はこのような場合でも質問タブのところに入れます。
「SELECT CASE」と。手っ取り早いです。
アシスタント適用ならそれに聞きます。
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございました。

お礼日時:2006/02/20 09:22

>構文上だめみたいな説明があったのでお聞きしたのです。


??
当方EXCEL2000
HELPからの抜粋です。
Select Case ステートメントはネスト (入れ子) 構造にすることができま
す。このとき、各 Select Case ステートメントには、それぞれ対応する
End Select ステートメントが必要です。
・・・とあり、はっきりと「出来る」と書かれていますが??

この回答への補足

当方EXCEL2000
HELPからの抜粋です。
自分でもVB及びEXCEL2000ヘルプを探したのですが見つからなくて、
検索キーワードは何にするとでてきますか。それとも
私のヘルプがおかしいのでしょうか。

補足日時:2006/02/16 11:50
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございました。

お礼日時:2006/02/16 11:53

Select Case ~ End Select


がちゃんと対応したブロックになっていたらネストは可能です。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/02/16 11:53

皆さんのご回答の通り、問題なく使えます。


こんなのは一度実行してみればわかるはずです。
ただ select case の入れ子はネストが深くなるのであまりお勧めはしません。
僕はソースが見づらくなるのでやりませんね。
IF文をうまく活用することです。
例えば case が2つしかないなら、IF文の方がいいでしょう。
    • good
    • 0
この回答へのお礼

もちろん正常に動いたことは確認していましたが、構文上だめみたいな説明があったのでお聞きしたのです。ご回答どうもありがとうございました。

お礼日時:2006/02/16 11:28

自分でテストしてみるのが一番に納得がいきます。



Private Sub CommandButton1_Click()
  Dim A As Integer
  Dim B As Integer
  
  A = InputBox("A=")
  If A = 1 Then
    B = InputBox("B=")
  End If
  Select Case A
    Case 1
      Select Case B
        Case 1
          MsgBox "B=1"
        Case 2
          MsgBox "B=2"
        Case Else
          MsgBox "B=ELSE"
      End Select
    Case 2
      MsgBox "A=2"
    Case Else
      MsgBox "A=Else"
  End Select
End Sub
    • good
    • 0

>QNo.1965604 の#7に,#8に関係したところをお聞きします。


リンクがなければ探し難いのでみません。
ここに書いてある質問だけでの解答ですが、可能です。
何故ここまで書いているのに自分で試してみないのでしょうか?
単純なテストなので聞くまでもないと思いますが?
    • good
    • 0
この回答へのお礼

試しを問題にしているのでなく、許されているか否かを聞きたかったのです。ご回答どうもありがとうございました。

お礼日時:2006/02/16 11:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!