[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『2つのセルに入った文字列の共通部分を抜き出し』(unk)
いろいろ調べてみたのですが、わからなかったので質問させていただきます。
2つの文字列の共通部分を抜き出したいのですが、良い方法はありませんでしょうか。たとえば、
A B 1 ABC1 abcd1234 2 ABC2 abcd3456
とあったときに、A1,A2の共通部分のABC、B1,B2の共通部分のabcd、
という風に標準関数の組み合わせだけで出したいです。
よろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
先頭から探すとして。 また、大文字・小文字を区別するとして。 A3セルに =LEFT(A1,MATCH(1,INDEX(0/EXACT(LEFT(A1,ROW($1:$100)),LEFT(A2,ROW($1:$100))),0),1)) と入力して横へフィルコピーではどうか。
もし、大文字・小文字を区別しない場合は =LEFT(A1,MATCH(1,INDEX(0/(LEFT(A1,ROW($1:$100))=LEFT(A2,ROW($1:$100))),0),1)) で。 (ねむねむ) 2017/03/24(金) 09:42
Sub test() Dim i As Long Dim j As Long
For i = 1 To Range("A1").End(xlToRight).Column For j = 1 To Len(Cells(1, i).Text) If Not Cells(2, i).Text Like Left(Cells(1, i).Text, j) & "*" Then Exit For End If Next j Cells(3, i).Value = Left(Cells(1, i).Text, j - 1) Next i End Sub (???) 2017/03/24(金) 10:15
1つお聞きしたいところがあって、
ROW($1:$100)のところの配列を{1:100}
のように指定できないでしょうか。
{1;2;3;...}とするのは長すぎるので…
よろしくお願いします。
(unk) 2017/03/24(金) 10:40
{1:100} などという使い方はできないのでROW関数を使っている。
まあ、セル内の文字数以上であればいいので文字数の最大が10文字であれば ROW($1:$10) や {1,2,3,4,5,6,7,8,9,10} でもいいかもしれないが。 (ねむねむ) 2017/03/24(金) 11:09
あ、あと配列部分は数字で指定できるので分かりやすいためROW関数を使っている。
配列自体は縦(;で区切る)でも横(,で区切る)でもどちらでも構わない。 (2か所の配列を同じにしないとならないが) (ねむねむ) 2017/03/24(金) 11:15
>ROW($1:$100)のところの配列を{1:100} >のように指定できないでしょうか。
必ず先頭で 1:100の範囲なら ・・・ 「100」をたとえばC1セルに指定して
ROW($1:$100) ⇒ ROW($A$1:INDEX($A:$A,$C$1)) に変更。 (GobGob) 2017/03/24(金) 11:40
どうしても参照を使うと行削除されたときに数式を保つことができない事があるためです。
結局、ROW(INDIRECT("1:100")により対処できました。
また、今回の場合はこの数式で事足りましたが、
共通部分が必ずしも先頭からでない場合は、標準関数ではとても厄介になりそうですね。
とりあえず解決できましたので、みなさまありがとうございました。
(unk) 2017/03/24(金) 14:03
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.