• ベストアンサー

EXCEL 文字列比較

EXCELを使ってA1とA2文字列を比較してA3にA1とA2で同じ文字はそのまま出力して間違っている文字の部分だけXに置き換えて出力することは可能ですか? 例) A1 ABCDEFG 比較セル A2 ABDCEFG 比較セル A3 ABXXEFG 比較したものを出力するセル

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

public function TextGroupCompare(byval a1 as variant, a2 as variant) as string  dim i as long, j as long  dim res() as variant  dim res1 as variant, res2 as variant  res1 = split(a1, " ")  res2 = split(a2, " ")  on error goto errhandle  redim res(application.max(ubound(res1), ubound(res2)))  for i = 0 to application.min(ubound(res1), ubound(res2))   res(i) = iif(res1(i) = res2(i), res1(i), string(application.max(len(res1(i)), len(res2(i))), "X"))  next i  for j = i to ubound(res)  if ubound(res1) > ubound(res2) then   res(j) = string(len(res1(j)), "X")  else   res(j) = string(len(res2(j)), "X")  end if  next j  textgroupcompare = join(res, " ") errhandle: end function #スペースで区切られたグループ数、グループごとの要素の文字数が異なっていても処理します。が、それに伴い例えばスペースが2つ続いたみたいなのも厳密に処理します。 >もしかしてこんな感じにも出来ますでしょうか まぁ「ついでに聞いちゃえ」と思いついてかるーい気持ちで書き込んじゃうヒトは実際大勢いるんですが、そーいうのは新しいご相談として新たに投稿し直して下さい。元のご相談内容が「解決しない」ので状況を補足するのは構いませんが、「ついで」で新しい内容を質問されても、付き合わされる方は迷惑に感じていることに気が付いてください。て指摘すると、とたんにムクレてぷいっといなくなっちゃう人も多いんで、気が付いてねって指摘の仕方にまで気を遣うんですけどね。

hsjjbkqsj
質問者

お礼

返信ありがとうございます。 わざわざ関数にしていただきありがとうございます。 >>まぁ「ついでに聞いちゃえ」と思いついてかるーい気持ちで書き込んじゃうヒトは実際大勢いるんですが、そーいうのは新しいご相談として新たに投稿し直して下さい。元のご相談内容が「解決しない」ので状況を補足するのは構いませんが、「ついで」で新しい内容を質問されても、付き合わされる方は迷惑に感じていることに気が付いてください。て指摘すると、とたんにムクレてぷいっといなくなっちゃう人も多いんで、気が付いてねって指摘の仕方にまで気を遣うんですけどね。 確かにその通りです。 以後気をつけます。

その他の回答 (4)

  • Nebusoku3
  • ベストアンサー率38% (1466/3827)
回答No.5

A1 ABCDEFG 比較セル A2 ABDCEFG 比較セル A3 ABXXEFG 比較したものを出力するセル と言う事で A3に関数で少し長いかもしれないですが作ってみました。 A3 =IF((A1=A2),A1,IF(MID(A1,1,1)=MID(A2,1,1),MID(A1,1,1),"X")&IF(MID(A1,2,1)=MID(A2,2,1),MID(A1,2,1),"X")&IF(MID(A1,3,1)=MID(A2,3,1),MID(A1,3,1),"X")&IF(MID(A1,4,1)=MID(A2,4,1),MID(A1,4,1),"X")&IF(MID(A1,5,1)=MID(A2,5,1),MID(A1,5,1),"X")&IF(MID(A1,6,1)=MID(A2,6,1),MID(A1,6,1),"X")&IF(MID(A1,7,1)=MID(A2,7,1),MID(A1,7,1),"X")) もっと式を簡単に出来るかもしれないですが直接的でわかりやすいでしょう。 = 以下をコピーして A3 に入れてみてください。 8桁ある場合は &IF(MID(A1,8,1)=MID(A2,8,1),MID(A1,8,1),"X") を 最後の ))  の間にコピーしてあげれば動きます。

hsjjbkqsj
質問者

お礼

新しく解答有難うございます。 keithinさんの言うとおり新規で質問するべきでした。 申し訳ありません。 せっかく作っていただきましたので、ぜひ使用させていただきます。 質問にお付き合いしていただきありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.1です。 続けて横からお邪魔します。 No.2さんの補足を拝見させていただいて・・・ 今回もユーザー定義関数ではなく、単なるマクロになります。 A1・A2セルは半角スペースで区切られた文字が一塊だとして、 両セルとも同じ塊数、一塊の文字数は同じだという前提です。 Sub Sample2() Dim k As Long, cnt As Long, str As String, myArray1, myArray2 myArray1 = Split(Range("A1"), " ") myArray2 = Split(Range("A2"), " ") Range("A3").ClearContents For k = 0 To UBound(myArray1) If myArray1(k) = myArray2(k) Then str = str & myArray1(k) & " " Else str = str & WorksheetFunction.Rept("X", Len(myArray1(k))) & " " End If Next k Range("A3") = Trim(str) End Sub ※ あくまで参考程度で・・・m(_ _)m

hsjjbkqsj
質問者

お礼

返信有難うございます! わざわざ有り難うございます。 無事出来ました^^ これで作業効率が上がります。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ふつーの関数では勿論そういう事ができるのは無いので、次の通りにするとさくっと出来ます。 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける public function TextCompare(byval a1 as variant, a2 as variant) as string  dim i as long  for i = 1 to application.max(len(a1), len(a2))  textcompare = textcompare & iif(mid(a1,i,1) = mid(a2, i, 1), mid(a1, i, 1), "X")  next i end function ファイルメニューから終了してエクセルに戻る A3セルに関数として =textcompare(A1,A2) と記入して計算させる。

hsjjbkqsj
質問者

補足

うおーすごい! ありがとうございます! これでもとても満足なのですが もしかしてこんな感じにも出来ますでしょうか A1 ABAB CD EF GHJG 比較セル A2 ABAB GD EF GHJG 比較セル A3 ABAB XX EF GHJG 比較したものを出力するセル このようにペアーにしてペアーの中の文字が1つでも違った場合でもペアーごとXにすることも可能ですか?

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! A1セルとA2セルの文字数は一緒だという前提になりますが・・・ VBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim k As Long With Range("A3") .ClearContents For k = 1 To Len(Range("A1")) If Mid(Range("A1"), k, 1) = Mid(Range("A2"), k, 1) Then .Value = .Value & Mid(Range("A1"), k, 1) Else .Value = .Value & "X" End If Next k End With End Sub 'この行まで ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。m(_ _)m

hsjjbkqsj
質問者

お礼

丁寧な解答有難うございます! tomさんは最初からセルの番号をコードに打つタイプですね^^ こちらも参考にさせていただきます!!

関連するQ&A