1

文字「A」、「B」...「Z」で構成される文字列がたくさんあります(他にはありません)。典型的な文字列は のようになりABZYCます。ABC文字列は、のようなペアで私に与えられますABDC。一方の文字列が他方の文字列に含まれている場合 (つまり、2 つの文字列のいずれか一方に他方のすべてのアルファベットが含まれている場合)、文字列は比較可能です。文字列が表示される順序は重要ではありません。

この種の比較を行う Excel VBA の直接関数はありますか?

例:
ACBDAC- Match
ACBDCA- Match
ACBDADB- Match
ACABCD- Match
ABCABD-No Match

4

4 に答える 4

5

ワークブックのモジュールに次の関数を追加します。

Function allIn(str1, str2)
' check whether all elements of str1 occur in str2
' and vice versa
Dim l1, l2, ii As Integer
Dim isfound As Boolean

isfound = True

l1 = Len(str1)
l2 = Len(str2)

If l1 < l2 Then
' look for all the elements of str1 in str2
  For ii = 1 To l1
    If InStr(1, str2, Mid(str1, ii, 1), vbTextCompare) <= 0 Then
      isfound = False
      Exit For
    End If
  Next ii
Else
' look for all the elements of str2 in str1
  For ii = 1 To l2
    If InStr(1, str1, Mid(str2, ii, 1), vbTextCompare) <= 0 Then
      isfound = False
      Exit For
    End If
  Next ii
End If
allIn = isfound
End Function

これで、コード内の別の場所result = inStr("ABD", "BAD")から、-を使用して、またはスプレッドシート自体からこれを呼び出すことができます。スプレッドシートで、セルと=allIn(A3, B6)の文字列を比較するために入力します。A3B6

これを行ったときに何が起こるかを示します(=allIn(A1, B1)セルに入力しC1、数式を次の4行にドラッグしました)。

スプレッドシートのスクリーンショット

私はそれがあなたの問題を解決すると信じています。

編集:あなたの質問に対する@Philipのコメントに気づきました-私がそれを作成し始めたとき私はそれを見ていませんでしたが、私は彼の提案を実行したようです...しかしここにすべて同じ帽子の先端があります!

于 2013-03-12T17:21:44.087 に答える
1

Formula ソリューションが必要な場合は、Mr Excelフォーラム サイトのSchielrnというユーザーがこの崇高な傑作を思いつきました( ARRAY FORMULASを使用) 。

または、VBAが必要な場合は、これを試してください...

Sub compare()

Dim iIndx As Integer
Dim str1 As String
Dim str2 As String
Dim sLetter As String
Dim bFound As Boolean

Range("A1").Select
bFound = False

Do

    str1 = VBA.Trim(ActiveCell.Text)
    str2 = VBA.Trim(ActiveCell.Offset(0, 1).Text)

    For iIndx = 1 To Len(str1)
        If VBA.InStr(str2, VBA.Mid(str1, iIndx, 1)) <> "" Then
            ' found it
            bFound = True
        Else
            bFound = False
            exit for
        End If
    Next

    If bFound = False Then
    ' check the other way!
        For iIndx = 1 To Len(str2)
            If VBA.InStr(str1, VBA.Mid(str2, iIndx, 1)) <> "" Then
                ' found it
                bFound = True
            Else
                bFound = False
            exit for
            End If
        Next
    End If

    If bFound = True Then ActiveCell.Offset(0, 2).Value = "MATCHED!"

    ActiveCell.Offset(1, 0).Select
Loop While Not ActiveCell.Offset(1, 0).Text = ""

End Sub
于 2013-03-12T17:41:38.883 に答える
1

INSTR は、文字列内の部分文字列を検索します。

Typical_String = "ABZYC"

if instr(Typical_String,"ABC") > 0 then
于 2013-03-12T15:28:57.600 に答える
0

投稿読み間違えた!

使用機能EXACT

2 つのテキスト文字列を比較し、まったく同じ場合は TRUE を返し、そうでない場合は FALSE を返します。EXACT では大文字と小文字が区別されますが、書式の違いは無視されます。

私は通常、関数 UPPER を追加します。

A1 = Some Place
B1 = some place

=EXACT(UPPER(A1),UPPER(B1)) = EXACT(SOME PLACE, SOME PLACE) = TRUE

アッパーなし

=EXACT(A1,B1) = EXACT(Some Place, some place) = FALSE
于 2014-10-03T14:43:51.847 に答える