2017-05-15 26 views
1

ダッシュボードを作成する必要がありますが、列Cには、短い名前として知られる満期の異なる派生商品があります。例IR​​S 7月18日VBAネストされた文字列ifステートメント

場合によっては、列cに下位または上位文字のトレードショートネームを付けることができます。

一部の文字が大文字または小文字の場合にのみ機能し、一部で機能するifステートメントを作成しました。したがって、このバリエーションをif文に追加する必要があります。第2に、製品がリストされていない短い名前を取り上げていない。

これは、文字のみを検索し、大文字と小文字を無視するようにすることができます。

私の最後のelse文は、新しいファミリにショートネームが追加された場合、私はそれを拾うことが大切です。どのように私はこれを更新することができますか?

DerivativeID = LCASE(DerivativeID設定し

:代わりに、私は

If DerivativeID Like "*irs *" Then 
    DerivativeFamily = "Interest Rate Swap " 
ElseIf DerivativeID Like "*cds *" Then 
    DerivativeFamily = "credit default swap " 
Else 
    DerivativeFamily = "Add to List" 
End If 
+0

を小文字にテスト値を変換した後、下部ケースと比較: '場合LCASEの$(DerivativeID) "* CDS *" のように続いて。 ..' –

答えて

1

非常に小さい

例それを保った完全なリストを与えるの

はLCASEまたはUCase関数のような

何かを機能お試しください)

if ... Then

+0

' Set'キーワードは、オブジェクト参照*を割り当てるために使用されます。文字列はオブジェクト参照ではありません。 –

+0

これは非常に良い回答ですが、大文字と小文字を無視したいが、成功する文字と一致する限り、文字にもっと集中してほしい。私はカウンターを作成したので、列cの各セルをifステートメントにループし、派生ファミリーに関する出力を与えます。 – user3287522

+0

あなたのコメントをいただき、ありがとうございました。私の問題を解決した何かを見つけたばかりです。Option Compare Text – user3287522

2

Option Compare Textをモジュールの上部に指定します。デフォルトの文字列比較モードはBinaryであり、"A"は文字列比較で"a"と等しくありません。 =演算子を使用して直接比較を行うとき

、あなたもOption Compare設定上書きするために、VBA.StringsモジュールからStrComp機能を使用することができます。

Debug.Print StrComp("A", "A", vbBinaryCompare) 'prints 0 
Debug.Print StrComp("A", "a", vbBinaryCompare) 'prints -1 

Debug.Print StrComp("A", "A", vbTextCompare) 'prints 0 
Debug.Print StrComp("A", "a", vbTextCompare) 'prints 0 

を他の答えが示すように、あなたはまた、変換することができあなたの弦のケーシング。しかし、あなたはいくつか知っておくべきことをやって中:(ループ内で例えば)を複数回、非常に大きな文字列を比較する場合

  • 、パフォーマンスは、あなたが使用しているLCaseUCaseを使用している場合
  • を低下しますVariant - 返送エイリアスは、String - 返品相手、LCase$およびUCase$を使用して簡単に回避できる追加の暗黙的な型変換オーバーヘッドを招きます。
+0

良い選択肢ですが、意図しないモジュール全体の比較動作が変わってしまいます。 – Holger

+0

@Holger correct。うまく設計されたコードでは、同じモジュール内で200個ものことは起こっていません。 –

3

SELECT ... CASEの仕事のように聞こえます。これを試してみてください:

DerivativeID = UCase(DerivativeID) 

Select Case True 
    Case DerivativeID like "*IRS*" 
     DerivativeFamily = "Interest Rate Swap " 
    Case DerivativeID like "*CDS*" 
     DerivativeFamily = "Credit Default Swap " 
    Case Else 
     DerivativeFamily = "Add to List" 
End Select 
+0

両方を修正しました。ありがとう! VB.NETとVBAの微妙な違いを忘れないでください。 UCaseとLIKEは.ToUpperと.Containsの代わりにここで動作するはずです。 – TesseractE

+0

あなたのアプローチでは、元の変数を変更します。 – Holger

+0

OPの他の場所で使用されていることはありませんでした。元の文字列を大文字と小文字の区別なくプログラム内の他の場所で使用する必要がある場合は、この変数に新しい変数を使用できます。 – TesseractE

2

使用だけLCase機能:

If LCase$(DerivativeID) Like "*irs *" Then 
    DerivativeFamily = "Interest Rate Swap " 
ElseIf LCase$(DerivativeID) Like "*cds *" Then 
    DerivativeFamily = "credit default swap " 
Else 
    DerivativeFamily = "Add to List" 
End If 
関連する問題