dポイントプレゼントキャンペーン実施中!

IF文をvbaで記載しているのですが
もっと省略できないか?と思っています。
配列は0から14まで格納済みです。
下記のコードは正常に動きます。(一部のみの記載ですが)

置換 = _
IIf(文字列 Like "*" & A配列(0) & "*", "" & B配列(0) & "", _
IIf(文字列 Like "*" & A配列(1) & "*", "" & B配列(1) & "", _
IIf(文字列 Like "*" & A配列(2) & "*", "" & B配列(3) & "", _
IIf(文字列 Like "*" & A配列(3) & "*", "" & B配列(3) & "", _
IIf(文字列 Like "*" & A配列(4) & "*", "" & B配列(4) & "", _
IIf(文字列 Like "*" & A配列(5) & "*", "" & B配列(5) & "", _
IIf(文字列 Like "*" & A配列(6) & "*", "" & B配列(6) & "", _
IIf(文字列 Like "*" & A配列(7) & "*", "" & B配列(7) & "", _
IIf(文字列 Like "*" & A配列(8) & "*", "" & B配列(8) & "", _
IIf(文字列 Like "*" & A配列(9) & "*", "" & B配列(9) & "", _
IIf(文字列 Like "*" & A配列(10) & "*", "" & B配列(10) & "", _
IIf(文字列 Like "*" & A配列(11) & "*", "" & B配列(11) & "", _
IIf(文字列 Like "*" & A配列(12) & "*", "" & B配列(12) & "", _
IIf(文字列 Like "*" & A配列(13) & "*", "" & B配列(13) & "", _
IIf(文字列 Like "*" & A配列(14) & "*", "" & B配列(14) & "", _
"")))))))))))))))


規則としては配列(i)を1つづつ増やすだけなので
どうにか省略できないでしょうか?
(withステートメントみたいに)
よろしくお願いします。

A 回答 (3件)

こんにちは。



>IF文をvbaで記載しているのですが

これは、何のVBAでしょうか。IF文ではなくて、IIf関数を使っているわけで、VBAの場合は、IIf を使ったら、IIf 関数内のエラーは回避できません。また、IIf 関数内の判定をすべてが通っていきますから、ExcelのワークシートのIF関数とは違います。だから、VBAでは、確実で簡単な内容でなければ、IIf は多用できません。また、深いネストは、処理しにくいので、VBAでは使いません。

初心者の方のようですから、あまり追及しませんが、変数に、2バイト文字はなるべく使わないようにしてください。

なお、この種のコードでは、配列の添え字については、Ubound と同時に、Lbound も付け加えたほうが安全のような気がします。しかし、あえて、配列変数を使わなくても、Mid 関数でループしても十分だと思います。
'-------------------------------------------
Sub MacroTest()
  Dim mStr As String '文字列 mは、ローカル,Str は、String の略
  Dim ret As String '置換 ret は、Return の略
  Dim i As Long 'i は、increment の頭文字
  Dim ar_A As Variant 'A配列 ar は、Array の略
  Dim ar_B As Variant 'B配列
  '-------------------------------------------
  ar_A = Split("A,B,C,D,E,F,G,H,I,J,K,L,M,N", ",")
  ar_B = Split("1,2,3,4,5,6,7,8,9,10,11,12,13,14", ",")
  '-------------------------------------------
  mStr = "BBC" '文字列
  For i = LBound(ar_A) To UBound(ar_A)
    If InStr(1, mStr, ar_A(i), 0) > 0 Then
      ret = ar_B(i)
      Exit For
    End If
  Next i
  MsgBox ret
End Sub
    • good
    • 0
この回答へのお礼

アクセスのvbaです。
なんだか初心者過ぎて訳わかってません 泣
せっかく丁寧なご回答をいただいたのですが
理解するのに時間がかかりそうです。
でもがんばって解読してみます。
有難うございます。

お礼日時:2009/10/20 21:52

A配列とB配列は同じ数ですか?



UBound(A配列)で、
≪以下ヘルプから引用≫
配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。

For i = 0 To UBound(A配列)
 ・・・A配列(i)・・・・・B配列(i)・・・
Next

といった感じにできます。
    • good
    • 0
この回答へのお礼

>A配列とB配列は同じ数ですか?

そうです。
ありがとうございました。参考になりました。

お礼日時:2009/10/18 23:15

VBA詳しくないのですが、単純に考えてFOR NEXTで可能なのでは?



http://sigoto.co.jp/excel/statement/state06.htm
    • good
    • 0
この回答へのお礼

有難うございます。使ってみます。

お礼日時:2009/10/18 22:57

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