- ベストアンサー
VBAで文字列の置換を省略する方法はありますか?
- VBAで文字列の置換を行う際、配列を一つずつ増やしていく方法で行うことができます。
- ただし、より効率的な方法を模索するのも一つの手段です。
- 省略する方法を探すために、withステートメントのような構文を使用することもできるでしょう。
- みんなの回答 (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
その他の回答 (2)
- xls88
- ベストアンサー率56% (669/1189)
A配列とB配列は同じ数ですか? UBound(A配列)で、 ≪以下ヘルプから引用≫ 配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。 For i = 0 To UBound(A配列) ・・・A配列(i)・・・・・B配列(i)・・・ Next といった感じにできます。
お礼
>A配列とB配列は同じ数ですか? そうです。 ありがとうございました。参考になりました。
- takepon256
- ベストアンサー率41% (391/936)
VBA詳しくないのですが、単純に考えてFOR NEXTで可能なのでは? http://sigoto.co.jp/excel/statement/state06.htm
お礼
有難うございます。使ってみます。
お礼
アクセスのvbaです。 なんだか初心者過ぎて訳わかってません 泣 せっかく丁寧なご回答をいただいたのですが 理解するのに時間がかかりそうです。 でもがんばって解読してみます。 有難うございます。