
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ステートメントみたいに)
よろしくお願いします。
No.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
アクセスのvbaです。
なんだか初心者過ぎて訳わかってません 泣
せっかく丁寧なご回答をいただいたのですが
理解するのに時間がかかりそうです。
でもがんばって解読してみます。
有難うございます。
No.2
- 回答日時:
A配列とB配列は同じ数ですか?
UBound(A配列)で、
≪以下ヘルプから引用≫
配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。
For i = 0 To UBound(A配列)
・・・A配列(i)・・・・・B配列(i)・・・
Next
といった感じにできます。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- マウス・キーボード Google検索の英語キーボード 英語のキーボードの配列が元に戻らなくなりました まえの配列は左上に 1 2022/06/19 11:41
- Visual Basic(VBA) Vba 配列の中の特定文字列の位置の調べ方 9 2022/05/23 17:46
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) ワークシートチェンジで曜日を表示する方法 1 2023/03/04 21:51
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列の値を置換するにはどうす...
-
vbsでテキストファイル内の文字...
-
VC++について (VBで言うところ...
-
VB.NET 2つの配列を連動して並...
-
Rubyでforループの中のハッシュ...
-
数値を浮動小数点32bitHEXコー...
-
エクセル、この関数の意味は?
-
excelの、ある数式内の{}の意...
-
エクセルへのデータの貼付時に...
-
これ以上省略することは出来な...
-
COLUMN(1:1)の意味を教え...
-
初心者プログラミング
-
○桁にある数値を取得する VB.N...
-
VBAのWorksheetFunctionの引数...
-
複数ディレクトリの監視(VB.NET...
-
VB.NET 2次元配列
-
VBAでダブルコーテーション入り...
-
フォームを開くときに、コンボ...
-
テキストボックスの値を変数に...
-
VB6.0-整数と余りを求める
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの、ある数式内の{}の意...
-
配列の値を置換するにはどうす...
-
vbsでテキストファイル内の文字...
-
VBAのWorksheetFunctionの引数...
-
エクセル、この関数の意味は?
-
COLUMN(1:1)の意味を教え...
-
数値を浮動小数点32bitHEXコー...
-
エクセルへのデータの貼付時に...
-
○桁にある数値を取得する VB.N...
-
VB6で配列を文字列に変換する方...
-
VBAで配列に文字列が入らない?
-
RichTextBoxの改行を認知してく...
-
copyRecordsetの数値16桁以上に...
-
【エクセル】 関数による電子...
-
複数ディレクトリの監視(VB.NET...
-
VBSで特定の文字列が含まれる場...
-
VB.NET 2つの配列を連動して並...
-
Javaのプログラムをルビー言語に。
-
VB 配列の内容をファイルに書...
-
ruby on railsのscaffoldで配列...
おすすめ情報