[[20241007062049]] 『条件に合う文字列に〇をつけたい』(エクセル初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件に合う文字列に〇をつけたい』(エクセル初心者)

 (B)     (C)
1 abc12345
2 123456ab
3 a1234
4 abcdef
5 ab123456

上のような表で、
B列で(文字列2〜3文字)のあとに(数字4〜6文字)
という条件に合致する行のC列に〇、しない行に×という関数を知りたいです。
文字と数字の組み合わせ方が検索してもいまいちわからず・・・。
よろしくお願いいたします。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 もうちょっとで、ワークシート関数で正規表現使えるらしいですが、
 現状ではワークシード関数でやろうとすると結構大変な気がします。
 VBAでやる(VBAでワークシート関数つくる)とか、

 PY関数つかってみます?
 =PY( までセルに入力してTabキーおす
 import re
 "○" if re.fullmatch("\D{2,3}\d{4,6}",xl("B2")) else "×"
 と入力してCtrl+Enterで確定
(´・ω・`) 2024/10/07(月) 09:20:02

まだ 365に REGEXMATCH関数が追加されていないので若干めんどくさいです。

 =LET(
    _a,TEXTBEFORE(A1,SEQUENCE(10,,0),,TRUE,,""),
    _b,IFERROR(TEXTAFTER(A1,_a,,TRUE),""),
    fx,LAMBDA(x,s,e,MEDIAN(LEN(x),s,e)=LEN(x)),
    IF(AND(fx(_a,2,3),fx(_b,4,6)),"〇","×")
)

「○(まる)」じゃなくて「〇(漢数字のゼロ)」でいいんですよね?
(d-q-t-p) 2024/10/07(月) 09:27:05


REGEXTEST関数、5月更新でリリースとあったのに
なんでExcel for the webで使えないんだろうな?
と思ったら、まだだったのか。。。

スプレッドシート(Google)で行う
=IF(REGEXMATCH(B1,"^[A-Z]{2,3}[0-9]{4,6}$"),"◯","✘")

エクセルでREGEXTEST関数が使えるようになったら、
REGEXMATCH関数をREGEXTEST関数に置き換えるだけですが。

現状のエクセル関数でもできないことはないかもですが、大変かも。
また、現状のエクセルに正規表現を導入するマクロとかもありそうです。

例)
https://qiita.com/ktyubeshi/items/74228f18498224c7427d
(ゆたか) 2024/10/07(月) 09:53:02


 ユーザー定義関数にするとこんな感じかな。

 Function CheckPattern(cell As String) As String
    Dim regex As Object

    Application.Volatile
    Set regex = CreateObject("VBScript.RegExp")

    ' パターンを設定する
    regex.Pattern = "^[a-zA-Z]{2,3}\d{4,6}$"

    If regex.Test(cell) Then
        CheckPattern = "〇"
    Else
        CheckPattern = "×"
    End If
 End Function
(通りすがり助六) 2024/10/07(月) 10:30:50

 数字以外{2,3}個&数字{4;5;6}個の文字列かどうかのチェック
=IF(OR(CONCAT(IFERROR(MID(A1,SEQUENCE(LEN(A1)),1)*0,1))=REPT(1,{2,3})&REPT(0,{4;5;6})),"○","×")
(んなっと) 2024/10/07(月) 11:51:38

 んなっとさんの式に感心しきりでございます
(´・ω・`) 2024/10/07(月) 12:06:46

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.