- ベストアンサー
エクセルVBAで条件に応じたデータの判定方法とは?
- エクセルVBAで条件に応じたデータの判定方法について質問です。
- 特定の条件に合致するデータを判定するために、VBAのIF文を使用しています。
- しかし、条件が合わない場合に何もせずにNの値を増やして同じくIF文で判断する方法がわかりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 教えていただきましたプログラムで試してみましたがCells(n,3)に何も表示されません。 すみません、プログラムの中身までは見られていませんでした。 いったいこのプログラムで何をなさりたいんでしょう? A列にどんな値が入っていて、C列にどんな値が表示されて欲しいのですか? 現在のプログラムでは、Cells(n,3)に何も表示されなくて当然です。 01:Sub ボタン1_Click() 02:Dim a As String 03:Dim n as Long 04: 05:For n = 1 To 30 06:a = Val(Left(Cells(n, 1).Value, 1)) 07:If (a = "") Or (a <= Chr(30)) Or (a >= Chr(40)) Then 08:Else 09:Cells(n, 3).Value = a 10:End If 11:Next 12: 13:End Sub 何故かというと、06行目でセルAnに入っている文字列の一番左の文字を Val関数で数値として評価しています。 このとき、セルAnの一番左の文字が1~9でなければ、aには"0"が入ります。 ところが、If文で、セルCnにaの値が入るのは、 a=""でない場合、またはa≦chr(30)かつchr(40)≦aの場合、 つまり、chr(30)<=a<=chr(40)の場合であり、 chr(30)~chr(40)の値は (Null),(Null),(Null),(!),("),(#),($),(%),(&),('),(() です。したがって、aが必ず"0"~"9"になる06行目の書き方では、 09行目が実行されることはありません。 何をなさりたいのかはっきりさせてから もう一度プログラムを見直してください。 > よりたいことは、IF文の一行でも当てはまればなにもしないで次のNEXTを実行したいのですが。 については、前述の通り、 「Thenの後ろには何も書かない」 でOKです。
その他の回答 (1)
- nao-y
- ベストアンサー率58% (111/190)
> 以下のように条件が合わない場合、何もせずにNの値を増やして同じくIF文で判断する場合 ちょっと文章が分かり難いので、解釈を間違えていたら申し訳ありません。 ・何か処理を行いたいのは「aaa=""」「aaa<=chr(30)」「aaa>=chr(40)」を全て“満たさない”場合 ・その条件のいずれかを満たす場合(=If~Thenの後ろ)には何を書けばいいか? ということですよね? 答え:何も書かなくていいです。 ただし、 「aaa=""」「aaa<=chr(30)」「aaa>=chr(40)」を全て“満たさない”場合 と、条件を連ねる場合は If ~ Then … ElseIf ~ Then … ElseIf ~ Then … Else ~ End If と「ElseIf」を使って書きます。 また、どのThenの後ろも処理を書かないのであれば、条件文を"or"で結合することができます。 結果としてご質問のコードは以下のように書けます。 (ただ、動作検証していないので結果は保証できません) Sub ボタン1_Click() Dim a As String Dim n as Long For n = 1 To 30 a = Val(Left(Cells(n, 1).Value, 1)) If (a = "") Or (a <= Chr(30)) Or (a >= Chr(40)) Then Else Cells(n, 3).Value = a End If Next End Sub
補足
回答ありがとうございました。 説明が足りずにすみませんでした。 よりたいことは、IF文の一行でも当てはまればなにもしないで次のNEXTを実行したいのですが。 教えていただきましたプログラムで試してみましたがCells(n,3)に何も表示されません。 お手数ですが再度ご教授願います。
お礼
回答ありがとうございました。 やりたかったことは、6行目で取り出した値の一番最初のデータが数字(1~9)であった場合と数字以外の値であった場合の判断をして、それに伴い9行目以降にプログラムを追加していくつもりでした。 教えていただきましたプログラムで、そもそも数字以外は「0」であることを知りました。(0も数字ですが) そこで、単純に7行目でaが「0」の時とそうでない時の判断をすることでプログラムを進めることが出来ました。 因みに、chr(30)~chr(40)のif文は数字「1」から「9」以外の場合を判断するという目的で書いていました。しかし、chr(30)~chr(40)が数字「1」から「9」でないことも混乱させることになってしましたました。 本当にご面倒をおかけしました。 ありがとうございました。