2016-09-13 6 views
0
Public Function SameStuff(s1 As String, s2 As String) As Boolean 
    Dim bad As Boolean 

    SameStuff = False 
    ary1 = Split(Replace(s1, " ", ""), ",") 
    ary2 = Split(Replace(s2, " ", ""), ",") 

    Length1 = UBound (ary1) 
    Length2 = UBound(ary2) 

    k=1 
    If Length1<= Length2 and Length1<>0 then 
     for i=0 to Length1-1 
     If ary1(i) = ary2(i) then 
      ary3(k,i) = ary1(i) 
     End If 
     Next i 
     k=k+1 
    else 
     Exit function 
    End If 
End Function 

ここでは、Range( "A1") - (3ワード)とRange( "A2") - (4ワード)の値を取ります。単語間のスペースを見つけて配列に格納して、それらを分割します。一方の配列の長さが3で他方が4であれば、両方の配列から3ワードが比較されます。 3つの単語が同じであると判明した場合、Range( "B1")とRange( "B2")は共に3つの単語名、すなわちRange( "A1")を持たなければならない。私はこの論理が、A1の "ABC DEF HIJ"やA2の "ABC DEF HIJ Limited"のような類似の名前を見つけるのにうまく機能すると思います。複数の同様の値を単一の値に置き換える方法

コードに入力できません。

ワードの長さは3,4と同じになりません。

+0

結果、ary3で何をしたいですか?最初の3つの単語が一致すれば、より小さな3ワードセルを長い4ワードセルに置き換えていますか? –

答えて

1

辞書を使うのは簡単な方法です.exexメソッドを使用すると、配列(split()の結果)を辞書に転送する必要がありますが、それはループです。あまりにもトリッキー。または、inputasの1つを文字列として残して1だけを分割し、if strStringLeftAlone like "* " & strSection(x) & " *"を使用するか、または" " & strSection(x) & " "と同じアイディアでinstrを使用することができます。

+0

最初に読んだことがありますか、次に質問してください:) –

+0

@ Nathan Dictionaryオブジェクトを提案してくれてありがとうございました。あなたが言及するまでそれを知らなかった。コードは今正常に動作します – Prakash

1

これは配列の長さ比較する文字列のそれぞれにいくつの単語(およびスペース)があるかを指定します。コード内で目的を果たさなかったので、k変数を削除しました。しかし、この解決策では、2つの文字列の最後の単語だけが異なることを前提としています。

Public Function SameStuff(s1 As String, s2 As String) As Boolean 

    Dim sameBool As Boolean 
    Dim i As Long, Length1 As Long, Length2 As Long 
    Dim tempArr1 as String, tempArr2 as String 
    Dim ary1 as Variant, ary2 as Variant 

    ary1 = Split(Replace(s1, " ", ""), ",") 
    ary2 = Split(Replace(s2, " ", ""), ",") 

    Length1 = UBound (ary1) 
    Length2 = UBound(ary2) 

    If Length1 <= Length2 and Length1 > 0 then 

     For i=0 to Length1-1 
     tempArr1 = tempArr1 & ary1(i) 
     tempArr2 = tempArr2 & ary2(i) 
     Next i 

     If tempArr1 = tempArr2 then sameBool = True 

    End If 

    SameStuff = sameBool 

End Function 

編集

それ以外のコードはモジュールの上部にOption Explicitでは動作しないだろう、私は忘れていたコードにいくつかの変数宣言を追加しました。

関連する問題