アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A3 ABXXEFG 比較したものを出力するセル

A 回答 (5件)

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つ続いたみたいなのも厳密に処理します。






>もしかしてこんな感じにも出来ますでしょうか

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

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

確かにその通りです。
以後気をつけます。

お礼日時:2014/02/04 23:23

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") を 最後の ))  の間にコピーしてあげれば動きます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/02/04 23:26

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/02/04 22:59

ふつーの関数では勿論そういう事ができるのは無いので、次の通りにするとさくっと出来ます。



手順:
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)
と記入して計算させる。

この回答への補足

うおーすごい!
ありがとうございます!
これでもとても満足なのですが

もしかしてこんな感じにも出来ますでしょうか
A1 ABAB CD EF GHJG 比較セル
A2 ABAB GD EF GHJG 比較セル

A3 ABAB XX EF GHJG 比較したものを出力するセル
このようにペアーにしてペアーの中の文字が1つでも違った場合でもペアーごとXにすることも可能ですか?

補足日時:2014/02/04 21:01
    • good
    • 0

こんばんは!



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/02/04 21:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!