プロが教える店舗&オフィスのセキュリティ対策術

”長谷川731” ”鈴木1192” の様に、文字と数字が合体した文字列で
文字の部分の”長谷川” ”鈴木” を抽出する関数を教えてください。
エクセルのバージョンは2010ですので、入れ子は5個までしか使えません。

A 回答 (6件)

=LEFT(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1234567890))-1)

    • good
    • 0

こんばんは。



厳密には、スプレッドシートの関数の使い方は分かりませんが、正規表現のユーザー定義関数を作ってみました。

'//標準モジュール
Public Function REGEXREPLACE(myValue As Variant, Pat As String, Rep As Variant)
Dim RegEx As Object
Dim Ms
Dim Ret As Variant
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
.Global = True: .IgnoreCase = False: .MultiLine = True
.Pattern = Pat
Set Ms = .Execute(myValue)
Ret = .Replace(myValue, Rep)
End With
REGEXREPLACE = Ret
End Function


実例:
A1 : ”長谷川731”

=REGEXREPLACE(A1,"(\D+)\d+","$1")

結果:”長谷川”
文章の中でも、同一数式で可能です。
    • good
    • 0

こんばんは!



手っ取り早く、この質問限定の関数(ユーザー定義関数)を作ってみてはどうでしょうか?

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト

Function moji(myRng As Range) '//この行から//
 Dim k As Long, myStr As String
  For k = 1 To Len(myRng)
   If Not Mid(StrConv(myRng, vbNarrow), k, 1) Like "[0-9]" Then
    myStr = myStr & Mid(myRng, k, 1)
   End If
  Next k
   moji = myStr
End Function '//この行まで//

あとは通常のワークシート関数と同じ使い方をします。
仮にA2以降にデータがあり、B2以降に結果を表示させたい場合はB2セルに
=moji(A2)

という数式を入れフィルハンドルで下へコピー!

※ セル内の数字以外が表示されますので
数字が飛び飛びでも文字だけが表示されてしまいます。m(_ _)m
    • good
    • 1

No.1で答えられている方法は、Excelでは数式内で正規表現を使うことはできませんのでちょっと無理。



・・・本題・・・

超力業

=IF(ISERROR(MID(A1,1,1)*1),MID(A1,1,1),"")
&IF(ISERROR(MID(A1,2,1)*1),MID(A1,2,1),"")
&IF(ISERROR(MID(A1,3,1)*1),MID(A1,3,1),"")
&IF(ISERROR(MID(A1,4,1)*1),MID(A1,4,1),"")
&IF(ISERROR(MID(A1,5,1)*1),MID(A1,5,1),"")
&IF(ISERROR(MID(A1,6,1)*1),MID(A1,6,1),"")
&IF(ISERROR(MID(A1,7,1)*1),MID(A1,7,1),"")
&IF(ISERROR(MID(A1,8,1)*1),MID(A1,8,1),"")

1文字ずつ拾って、数字なら空白に置き換え、数字でなければ拾いだした1文字同士を連結しています。
ですので、この例では8文字まで対応です。

※ Excelに貼り付ける時には数式バーに直接貼り付けてください。セルに貼り付けると別々のセルにバラバラになって貼り付きます。
    • good
    • 0

こちら↓の方法を組み合わせてみては。


https://qiita.com/mhara/items/82421d1b34e88a3efba1

A2セルに文字列があるとして、B2セルを
 =SUBSTITUTE(A2,LOOKUP(10^17,RIGHT(A2,COLUMN(1:1))*1),"")
にします。

空白セルの処理もするなら
 =IFNA(SUBSTITUTE(A2,LOOKUP(10^17,RIGHT(A2,COLUMN(1:1))*1),""),"")
にします。

上記の場合、文字のみだと抽出しません。
    • good
    • 0

僕はエクセルではなくスプレッドシートなので申し訳ないのですが


関数は殆ど同じですので試してみてください
これで数字を正規表現で抽出して””で置き換えています
=REGEXREPLACE(A1,"[0-9]","")
    • good
    • 0

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