2016-05-26 4 views
0

たとえば、文字列がA-456-BC-123;DEF-456;GHI-789です。そして、私は第2部:DEF-456をキーワード456で検索する必要があります。潜在的な問題は、最初の部分A-456-BC-123にもキーワード456があることです。現在のところ、私のロジックはsplitです。最初に;splitの文字列を使用しています。もう一度-を使用し、Arrayの最後の項目を検索キーワード456にします。もう1つは、DEF-456のような完全なキーワードマッチをしたくないということです。私は456をキーワードとして使用してDEF-456を探したい、つまり456を、必要な文字列の最後のセグメントにする必要があります。ここで配列の最後の項目を取得しようとすると、添え字が範囲外になる

は私のコードです:?

FirstSplit= split("A-456-BC-123;DEF-456;GHI-789",";") 

For each code in FirstSplit 
    SecondSplit = split(FirstSplit,"-") 
    'get Array Count 
    Count = Ubound(SecondSplit) 
    'get the last item in Array 
    If SecondSplit(Count-1) = "456" Then 
     'doing something 
    End if 
Next 

現在、エラーが"Subscript out of range: '[number: -1]'"

は、誰かがそれを修正する方法を教えてもらえと言って、SecondSplit(Count-1)で生成されますか。

答えて

3

本当の問題はここにある:

SecondSplit = Split(FirstSplit, "-") 

あなたはあなたのFor Eachループから変数codeに保存されてきたあなたの要素を分割する必要があります。配列を分割しようとすると、Type Mismatchのエラーが発生するはずですが、おそらくvbscriptは0要素の配列を返したり戻したりするのに十分寛容です。とにかく:

SecondSplit = Split(Code, "-") 

はまた、最後の要素を見て、単に使用します。

If secondSplit(Ubound(SecondSplit)) = "456" Then 

uboundから1を減算すると、あなたの最後の要素に2番目になるだろう。

2

あなたは二回、それを分割する必要はありません - あなたが探していることはRight()次のとおりです。

FirstSplit = split("A-456-BC-123;DEF-456;GHI-789",";") 

For each code in FirstSplit 
    If Right(code, 3) = "456" Then 
     ' do something 
    End If 
Next 

これもABC-1456のようなエントリが一致しますけれども。 -シンボルが必須の区切り文字の場合は、If Right(code, 4) = "-456"と言う必要があります。

+1

また、 'Right()'から返される文字数をハードコーディングする代わりに、 'InStr(1、StrReverse(code)、" - ")'のようなものを使用してください。 – Lankymart

関連する問題