プロが教えるわが家の防犯対策術!

下記の様な質問でも受け付けて頂けますか ?。

たとへば、「235789」と「34678」の数字の重複「378」(ここでは説明の為手入力)を表示させたい場合、
「3」と「7」と「8」の各々の文字列の位置を求る関数を使用してからその位置から何文字目を
求めるという関数を使用しなければならないが(知識不足でこの方法しか浮かばない)
この重複数字「378」を一回の関数又は入れ子で求める関数を使う方法はありますのでしょうか。
文字列を左・右から求める方法は分かっておりますが、この方法は開始位置を求めてから別関数で求める数字を検索するという様な過程を経なければなりませんので大変な労力を使います。
開始位置が不規則の場合は直接求めることが出来ません。
その様な該当文字を直接求める関数は有るのでしょうか。
目視で数回求めるには使用できますが、多数ある場合は大変ですので。

アドバイス宜しくお願いします。

A 回答 (3件)

> その様な該当文字を直接求める関数は有るのでしょうか。


関数(というか数式)での回答を希望するなら バージョンを明記しま
しょう。使える関数が全く違ってきます。

数式でやる意味がさほどないならクエリでやればいいと思います。
Text.ToListで文字列を1文字単位に分割したリストを作ってから
List.Intersectで重複しているものだけ抜出→結合すればいいです。
    • good
    • 0

こんばんは


ユーザー定義関数をご存知なら・・・
Public Function conCharacter(ByVal a As Range, ByVal b As Range) As Variant
Dim i As Long, tmp As String
Dim strTrg As String, strKey As String
If Len(a) >= Len(b) Then
strTrg = b.Text: strKey = a.Text
Else
strTrg = a.Text: strKey = b.Text
End If
For i = 1 To Len(strTrg)
If InStr(strKey, Mid(strTrg, i, 1)) > 0 Then tmp = tmp & Mid(strTrg, i, 1)
Next i
conCharacter = tmp
End Function

関数ダイアログ(fx)登録用
Sub Register_conCharacter() 'ダイアログレジスタに登録
Application.MacroOptions Macro:="conCharacter", Description:="セル1(文字列) と セル2(文字列) の重複文字を取得する関数です。", _
Category:="ユーザー定義", ArgumentDescriptions:=Array("対象セル1:文字列", "対象セル2:文字列")
End Sub

使用例添付画像 =conCharacter(C3,D3) フィルハンドル↓

なんか、Functionコードにしたらスピル関数で出来そう・・かな
「エクセル関数の変わった使い方」の回答画像2
    • good
    • 0

こんばんは



・どちらの数を元にして、どちらを検索するか
・重複する数値が含まれている場合どうするのか
などありそうな気がしますが、以下一例として・・・

A1、B1に数値があり(必ず数値である前提です)、A1セルの値を分解して順に検索するものと仮定すれば・・
=TEXTJOIN(" ",1,IFERROR((FIND(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1),B1)>0)*MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1),""))
を(例えばC1セルに)入力し、Ctrl+Shift+Enterで確定します。
(配列数式なので、確定操作は必須です)

この結果は、
 235789 34678 → 3 7 8
 235789 87643 → 3 7 8
 237237 34678 → 3 7 3 7
のようになります。

※ 数値以外の文字が含まれる場合は機能しません。
※ TEXTJOIN関数が使える前提です
※ 365環境でFILTER関数が使えれば、もっと簡単な式にできるかもしれません。

ご参考にでもなれば。
    • good
    • 0

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