こんにちは。 最近、同じような「数字を抜き出す」というご質問がありましたが、今回は、 ハイフン(-)を入れるのですね。 今回のは、たぶん、難問の1つではないかと私は思います。
例えば、以下のような式で出てきますが、実用的ではありません。
=IF(SUM(NOT(ISERROR(MID($A1,ROW($A$1:$A$1024),1)*1))*1)<COLUMN(A1),"",MID($A1,SMALL(IF(ISERROR(MID($A1,ROW($A$1:$A$1024),1)*1),"",ROW($A$1:$A$1024)),COLUMN(A1)),1)) ※配列数式ですから、Shift+Ctrl+Enterで配列の確定をしてください。
とてもではありませんが、計算が遅すぎるし、ハイフンはでません。 数字の「1024」に着目する人がいるかと思いますが、確かに、数字を減らせば、式 は軽くなります。一応、汎用性をもたせるためで、これは、セルの表示限界の 数字です。
それとは別に、以前、私が公開したものを手直ししてみました。
'----------------------------------------------------------- Function ReFigOut(文字 As String) As String Dim myStr As String Dim objReg As Object Dim Matches, Match Dim myPat As String Dim strTmp As String Dim buf As String myStr = StrConv(文字, vbNarrow) '半角処理 Set objReg = CreateObject("VBScript.RegExp") If myStr Like "*#*" Then myPat = "\d+(\D){0,1}" 'パターン End If With objReg .Pattern = myPat .Global = True Set Matches = .Execute(myStr) For Each Match In Matches strTmp = .Replace(Match, "$1") buf = buf & Application.Substitute(Match, strTmp, "-") Next Match End With If Right(buf, 1) Like "-" Then buf = Left(buf, Len(buf) - 1) ReFigOut = buf End Function
'----------------------------------------------------------- これは、ツール−マクロ−Visual Basic Editor で、もう1つの画面を開けましたら、 挿入−標準モジュール(M) で、白い画面が真中に現れます。(一番上のタイトルバーには、[Module1(コード)] となっているはずです。
そこで、この 「点線で囲まれた部分」を貼り付けてあげます。
閉じるときは、一番右上端の「×」を押せば、元の画面に戻ります。
このユーザー定義関数は、通常の関数と同じように、以下のように 使えば出来ます。ただし、他のブックで使う時は、同じものを同じように 標準モジュールでコピーしなければなりません。(アドイン関数にする方法などに 興味があれば、VBAサロンでお聞きになってください)
=refigout(A1) とすれば、 1-20-3003 と出てきます。
この記事にはVBAのコードが含まれています。
緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他
|