[[20040924110912]] 『ifの数』(Null)  ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ifの数』(Null)
 VBAで
 IF 〜 Then
  IF 〜 Then
   IF 〜 Then

   END IF
  END IF
 END IF

 てやっていったときってIFの数に上限ってあるんですか?

 IFをひとつ抜くと動作するようになります。

 問題の部分は
 IF Instr(e.Value,"//") <> 0 then
  〜処理〜
 end if

 って感じなんですけど この条件ってなにか問題あるんですか?


 >IFをひとつ抜くと動作するようになります。
 抜かないとエラーでもでるのですか?

  (INA)


 処理を最後まで終えずに終わってしまいます。
 エラーもでません。
 ???
 なにか心当たりが・・・?
 (Null)

 単純に記述が間違っているだけでは?

  (INA)

 間違っていました
 If InStr(e.Value, "//") <> 0 Then
  locDat(UBound(locDat)) = " - " & Split(e.Value, "//")(1)
 END (はっ終わってる)
  locDat(UBound(locDat)) = ""
 End If

 ↓修正

 If InStr(e.Value, "//") <> 0 Then
  locDat(UBound(locDat)) = " - " & Split(e.Value, "//")(1)
 Else
  locDat(UBound(locDat)) = ""
 End If

 プログラムは間違ってませんでした。
 俺が間違ってただけだったようです_| ̄|○
 誰かがプログラムは思ったとおりに動くのではない・・・
 作ったとおりにうごくのだっていってました

 まさにそのとおりでした。^^

 てか テゲはずかしいです

 しょぼミスですいませんでした。
 (INA)さんこんなことにつき合わせてしまいすいませんでした
 & ありがとうございました。
 (Null)

 本題と関係ない質問で申し訳ないのですが
「テゲはずかしい」……「テゲ」ってなんでしょう?
ちょ〜、と同じなのかな。初めて聞きましたもので…(汗  (流行に疎い・る〜)


 えーっと
 てげを つかうならそこだけじゃおかしいですねぇ

 テゲハジィ で 「すごくはずかしい」って意味です。

 流行っていうか 方言だとおもいます。

 (Null)

 「テゲ」に反応!!
 Nullさんのおっしゃる通り、「すごく」とか「たくさん」という意味です。
 でも自分は「テゲはずかしい」って言ってました。場所場所で違うのかな?

 ちなみに「テゲテゲ」と2回繰り返すと全く違う意味になります。
 「適当に〜」とか「だいたい」とかって感じですね。

 つい、久しぶりに聞いた(目にした)ので思わず反応してしまいました。
 変なレス、すみません。
 (gloomy)

 どこの言葉なのですか?
 初耳なので知りたいです。
 (ひよっぴ)


 > しょぼミスですいませんでした。
 よくあることです。
 予想外の動作をしたときは、F8キーでステップ実行するのがよいでしょう。

  (INA)

 (INA)さん F8便利ですねぇ いままでは ステップをクリックしてました;;
 修行がたりんですなぁ
 あと(Gloomy)さんは 宮崎県民ですかな?
 PS テゲ → 宮崎
   デラ → 愛知
   ワッゼ → 鹿児島?
   デージ → 沖縄
   全部同じ意味です。「管理人殿大量の私用をおゆるしください」
 (Null)


 ちなみに途中の行からステップしたいときは、
 ブレークポイントを設定しておき、 
  F5で実行 →ブレークポイントで停止 → F8 でステップ実行
 とするのが楽です。

  (INA) 

 すっすごい ブレイクポイントって動いたんですねぇ
 ってσ

 もしかしたこれってもっと早い段階でしっとかなきゃいけないことのような・・・

 ( *‐∀)っ旦~ウメェ…

 (Null)

 話をぶり返して申し訳ありませんが、質問されましたので回答のみ・・。
 Nullさんのおっしゃる通り、宮崎県民です。
 (現在は違う場所に住んでいますが・・・)
 (田舎者gloomy)

 若者言葉ではなく方言でしたか。これはこれは大変失礼をば…
詳しく説明していただきありがとうございました^^(る〜)


 >もしかしたこれってもっと早い段階でしっとかなきゃいけないことのような・・・

 VBEの機能はいろいろ知っておいた方が、開発効率が全然違いますよ。
 Excelのツールバー同様に、便利なボタンはツールバーに配置しておいた方が楽です。

 私は自作のアドインで、VBEのメニューから以下のようなメニューを作ってあります。

 1.VBA定型文一覧 (よく使うコードを選択して貼り付けできる)
 2.列記号→列番号比較表
 3.カラーコード一覧
 4.コードウィンドウ&ユーザーフォームウィンドウをすべて閉じる。
   (保存時ファイルサイズを小さくするため)
 5.各モジュール行数&ブック合計行数の表示
 6.ブック内の各モジュールごとのプロシージャ名と行数の表示
 7.ブック内のモジュールの自動エクスポート&インポート
  (ファイルサイズを小さくするため)
 8.配布ブック用の圧縮  (コメント&インデント&空白行の削除)

  (INA)

 >私は自作のアドインで、VBEのメニューから以下のようなメニューを作ってあります。

 自作のアドインってどうやってつくればいいんですか?
 アドイン → アドインマネージャーという項目はありましたが
 何も表示されないし 使い方もわかりません;;

 どうか ご教授を・・・

 (Null)


 アドインは個人用マクロブックと同じようなもので、
 EXCEL起動時にシート非表示で自動的に開かれるブックのことです。
 そのブックのOpenイベントにツールバー制御のマクロなどを書いておくと便利です。

 アドインは Xla 形式で保存して、
 Excelメニューの ツール アドイン から参照してチェックを入れるだけです。

  (INA)

 (INA)さん ありがとうございます
 なんとなくはわかりました 
 後はちょっとずつ使っていけばそのうち覚える「はず」ですよね

 では

 なんとなく理解した気がする(Null)


 Excelのツールバー設定は、以下のようなコードをアドインに書いてます。
 ご参考までに・・。

 Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Formatting").Reset
    Application.CommandBars("Standard").Reset
 End Sub

 Private Sub Workbook_Open()
    With Application.CommandBars("Formatting").Controls
        .Add Type:=msoControlButton, ID:=403, Before:=3
        .Add Type:=msoControlButton, ID:=404, Before:=4
        .Add Type:=msoControlButton, ID:=798, Before:=21
        .Add Type:=msoControlButton, ID:=800, Before:=22
        .Add Type:=msoControlButton, ID:=151, Before:=23
        .Add Type:=msoControlButton, ID:=149, Before:=24
        .Add Type:=msoControlButton, ID:=1704, Before:=25
    End With

    With Application.CommandBars("Standard").Controls
        .Add Type:=msoControlButton, ID:=292, Before:=14
        .Add Type:=msoControlButton, ID:=293, Before:=15
        .Add Type:=msoControlButton, ID:=294, Before:=16
        .Add Type:=msoControlButton, ID:=444, Before:=24
        .Add Type:=msoControlButton, ID:=445, Before:=25
        .Add Type:=msoControlButton, ID:=298
    End With

    Application.CommandBars("Control Toolbox").Visible = True
    Application.CommandBars("Forms").Visible = True
    Application.CommandBars("Visual Basic").Visible = True 
 End Sub

   (INA)

 解決されている様ですが…
一応If文のネストは7階層までが限界のはずです。
自分でそこまで書いて試した事は無いけど…知識として、記憶が確かならば。
(ご近所PG)


 素朴な疑問・・・
 Do 
  if 
   Do
    If 
     For
      If
       Do
          〜処理〜
       loop
      end if
     next
    end if
   loop
  end if
 loop

 って場合はどうなるんですかねぇ?
 (Null)

 と、書いてから気になって試して見たけど、別に7階層以上いっても平気だったなぁ…
追記:
7階層については記憶違いか、他の言語仕様だったと私的に決着。でもどっかで見たんだけどなぁ…
 (Null)さんのは、入れ子の数え方は、共通なのか別なのかって事でしょうけど、不明。
動くならそれでいいのかも。
ただ、コード書くときは、出来るだけ階層が深くならないように気をつけて作るという姿勢が大事、って事で。
(ご近所PG)

 参考までに、7階層は一般関数でのネスト数ですね。
 (川野鮎太郎)

 (ご近所PG)さんへ
 >7階層については記憶違いか、他の言語仕様だったと私的に決着。でもどっかで見たんだ
 これに関しては俺も7階層までとおもっていたのですが・・・
 動かなくなったときに階層を数えたら7階層以上あったのでこのスレを立てました

 コード書くときは、出来るだけ階層が深くならないように気をつけて作るという姿勢が大事、って事で。
 たしかに俺の組んだものはみずらいってよく言われます。
 自分でも昔くんだやつの手直しできなくなったりとか_| ̄|○

 簡素化は大切ですよねww(できてれば苦労しないですけど・・・)

 (川野鮎太郎)さんありがとうとざいます。

 PS (川野鮎太郎)さんは 会社でちょっとした話題のひとだったり・・・

 (Null)

 7階層は、セルの中に直接書いたときに、Ifが7階層までだと思いました。
 VBA(VBE?)でやればそれはまた別問題だと思うので。(Σ)

 その後色々探して見たけど、やっぱり川野さんやΣさんが言うように
「Excel関数として7階層」という情報ばかりですね。
一応試したら以下でエラー。
=IF(TRUE,IF(TRUE,IF(TRUE,IF(TRUE,IF(TRUE,IF(TRUE,IF(TRUE,IF(TRUE,IF(TRUE,"a",""),""),""),""),""),""),""),""),"")
一個取ると動く。

 VBAは無関係らしいですね。
試しに1200階層くらいにしてみた(←あほか)けどOKでした。
(ご近所PG) それでもどっかで見た気がしてならない…


 >If...Then...Else ステートメントは、必要なレベルまで任意に入れ子にできます
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcn7/html/vaconusingifthen.asp
 
 まさか無限・・? 

 必要なレベル=理解出来る階層数 だとすれば5階層もいらないけど。

  (INA)

 Σ(゚ロ゚ノ)ノ?! 会社で話題って・・・・_/ ̄|○ il||li
 IFのネスト数よりそっちが気になって寝れないやん_/ ̄|○ il||li
 (川野鮎太郎)

 会社で誰かがエクセルにこまっていると
 どこからともなく
 (鮎太郎)さんに聞いてみようコールが・・・

 条件分岐ってやりたいことが増えるとどんどんふえていきますよねぇ

 炭素化する手段としてセオリーみたいなのってあるんですか?
 ご教授ください。
 (Null)

 o。(-。-;)ホッ…! そんなことなら安心しました(^_^A;
 てっきり私の会社の人間に素性がばれたのかとあせってしまった(T▽T)アハハ!
 ※セオリー・・・・ 私に難しいことは聞かないで(ノ_・。)
 その辺は、I○Aさんや、○AMIYAさん他詳しい方にお願いしましょう(^_^A;
 (川野鮎太郎)


 >炭素化する手段としてセオリーみたいなのってあるんですか?
   ↑
 燃やすことかな!?

 リンク先に以下のように書いてあります。

 「ただし、If...Then...Else ステートメントを複数のレベルで入れ子にしたり、
 ElseIf ステートメントをたくさん使用するより、Select...Case ステートメントを
 使った方がわかりやすくなります。」

   (INA)

 Select・・Caseって
 IF C Like "B[0-9]" Then

 いたいな条件の設定のしかたってできますか?
 調べてみましたがみつけられませんでした;;
 (Null)

 Like演算子はSelect Caseでは使えまへん、と書いてありますワ。
        (弥太郎)


 select case
  case  アルファベットなら 
      〜処理1〜

  case  ひらがななら 
      〜処理2〜

 end select

 って感じの処理は可能でしょうか?

 (Null)

 もしこれをこのままselect caseで処理するんやったら

  n = Range("a1") Like "*[A-Z]*"

    f = Range("a1") Like "*[あ-ん]*"
    data = IIf(n, flag = True, flag = False)

    Select Case Range("a1")
        Case flag
            [b2] = "A"
        Case Else
            [b2] = "あ"
    End Select
 っちゅうた塩梅でいけまっしゃろけど、If文でそのままLike演算子を組み込んだ方
 が簡単ですわなぁ。

 少し遡って分岐が多くて
 >"B[0-9]" 
 のようなデータが数多く存在しとってそれを分岐したいばやいは
     For i = 1 To Len(Range("a1"))
        On Error Resume Next
        If Not IsError(Mid(Range("a1"), i, 1) * 1) Then
        For n = 0 To 9
            If n = Mid(Range("a1"), i, 1) * 1 Then
                data = n
                Exit For
            End If
        Next n
        End If
    Next i

    Select Case Range("a1")
        Case "B" & data

            [c1] = "○"
        Case "C" & data
            [d1] = "○"
    End Select
 みたいにしたらどうでせう?
     (弥太郎)

 こんな感じでもできると思います。 (wizik)

 Sub trw()
     Select Case Cells(1, 1).Value
         Case "A" To "Z"
             MsgBox "半角アルファベット 大"
         Case "a" To "z"
             MsgBox "半角アルファベット 小"
         Case "あ" To "ん"
             MsgBox "ひらがな"
         Case "ア" To "ン"
             MsgBox "全角カタカナ"
     End Select   
 End Sub

 Nullさんを惑わしとんかも?
 下のコードですけど"B[0-9]"はB&0-9で分岐するということでっしゃろ?
 ですから Case "B" & data
                select case data
                      case 1,4,5
                          [c1]=data
                      case 6 to 9
                          [d1]=data
                      case else
                          [e1]=data
                end select
           Case "C" & data
               select case data
                     case 1,3,5
                      ......
 と言う風に処理でけます、と言う事ですけどナ。
 ご理解いただけたんかしら・・・。
 wizik さん、どっかおかしいとこおまっしゃろか?
 別にCase "B"だけでも別状おまへんねんけどナ。
       (弥太郎)

 wizikさん、教えてくれへん。又呑み歩いとんやろか。(笑)
 わたしゃ本丸は"B[0-9]"の方にあると思うてレスつけましたんやけどなぁ。
 見当違いでしたんやろか?
     (弥太郎)

 おっ いつのまにか
 レスが増えてるっ
 (wizik)さん (弥太郎)さん こんばんわですv

 条件分岐の方法っていろいろあるんですなぇ

 めちゃくちゃ参考になりましたありがとうございます。

 質問ばっかですいませんが

 Case A to Z 

 ってあった場合アルファベット二文字+数字1文字〜
 っていう条件は可能ですか

 Select Case データ

    Case ・・・

 End Select

 データの範囲は AA1 〜 ZZ999 までです。

 わかりずらくてすいません。

 最初のスレからずれてきているきのする(Null)


 Select Case単体ではあまり複雑な条件判断はできないと思います。
 こんなのも利用できるよということで。
 (ramrun)

[[20031228061804]] 『文字列から数値を抽出』(澄男)

正規表現による Visual Basic Scripting
http://www.microsoft.com/japan/msdn/columns/scripting/scripting051099.asp

 >wizik さん、どっかおかしいとこおまっしゃろか?
 弥太郎さんのマクロがですか?わたしはエクセルを使わないので
 よくわかりませんが、特にないんじゃないでしょうか。 (wizik)

 ボンッ プシュー

 ムズイ・・・

 ありがとうございます。
 いろいろと参考になりましたぁ
 精進精進

 オーバーヒート中の(Null)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.