
下記の数式は以前教えて頂いた数式で、
指定セル値「受付!F2」の表示の一部に{"NO.","NO","No.","No"}があった場合に
(№)に表示を変更出来る数式になっております。
しかし、「受付!F2」の表示の一部のナンバー表示が{"NO.","NO","No.","No"}以外の時もあり、
その場合は(№)に表示を変更出来ません。
{"NO.","NO","No.","No"}部分が色々なケース(ナンバー表示)に対応できる方法があれば、教えてください。
現状の数式
「=REDUCE(受付!F2,{"NO.","NO","No.","No"},LAMBDA(x,y,SUBSTITUTE(x,y,"№")))」
以上となります。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
ご質問者の補足コメントに対し、No.1さんからの追加回答が付かないようです。
No.1さんの回答内で、正規表現を用いる方法が解説されているものの、VBAでは使えない表現が登場している気がします(大変失礼ですが、No.1さんの回答を見て生成AIの回答を想起してしまいました)。
そこで、失礼を承知のうえで、横ヤリになってしまいますが、その部分を修正したものを以下にお示しします。
Function ReplaceNumberFormat(inputText As String) As String
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
inputText = StrConv(inputText, vbNarrow)
regex.Pattern = "(no[\.:]?|number[\.:]?)"
regex.Global = True
regex.IgnoreCase = True
ReplaceNumberFormat = regex.Replace(inputText, "№")
End Function
上記のコードは正規表現による置換前の文字列と置換後の文字列をコード内に記載していますが、関数を呼び出す都度指定する(可変にする)こともできます。
Function ReplaceNumberFormat2(inputText As String, ByVal Pattern As String, ByVal ReplaceWith As String) As String
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
inputText = StrConv(inputText, vbNarrow)
regex.Pattern = Pattern
regex.IgnoreCase = True
regex.Global = True
ReplaceNumberFormat2 = regex.Replace(inputText, ReplaceWith)
End Function
しかし、No.1さんのバターンにあるnumberという語句は"NO.","NO","No.","No","No.","NO","no.","no"の例示からすると違和感があります。
また、「受付!F2」セルに"NO.","NO","No.","No","No.","NO","no.","no"のどれも無く、「No.」をタイプミスして「Mo.」となっていたり、「#」だったり、さらに#入力もれで「数字だけ」だったりすると上記のコードでは役に立ちません。
そこで、究極のお節介としては、「数字の前に"№"を強制付与する」という考えもあります。
その場合、上段のコードを若干修正して、以下のようなコードにすればよいと思います。
Function ConvertToNumber(ByVal inputText As String) As String
Dim regex As Object
Dim matches As Object
Dim str As String
Dim result As String
Set regex = CreateObject("VBScript.RegExp")
inputText = StrConv(inputText, vbNarrow)
regex.Pattern = "(no|#|mo)[\.:]?"
regex.Global = True
regex.IgnoreCase = True
result = regex.Replace(inputText, "№")
regex.Pattern = "\d+"
Set matches = regex.Execute(result)
If matches.Count > 0 And InStr(result, "№") = 0 Then
str = Left(result, InStr(result, matches(0)) - 1)
If str <> "" Then
result = Replace(result, str, str & "№", 1, 1)
Else
result = "№" & result
End If
End If
ConvertToNumber = result
End Function
上記コードは置換すべき文字列を"№"に置換するとともに、置換すべき文字列が存在しないときは最初の数字を探して、その前に強制的に"№"を付与するものです。
従って「北海太郎1234」は「北海太郎№1234」に置換され、「東神楽町南1番通no1234」は「東神楽町南1番通№1234」に置換されます。
しかし、上記コードは「お節介コード」なので余計なお節介が働き「東神楽町南1番通1234」は「東神楽町南№1番通1234」に置換されてしまいます。
いずれのコードも標準モジュールに貼り付けてから、結果を表示したいセルに
=ReplaceNumberFormat(受付!F2)
=ConvertToNumber(受付!F2)
などと記述すれば使えます。
正規表現による置換パターンを都度指定するReplaceNumberFormat2の場合、パターンの指定は自由に変更できるので、「#」パターンや「Mo」パターンも自由に追加指定できます。
=ReplaceNumberFormat2(受付!F2,"(no|#|mo)[\.:]?","№")
結果を表示したいセルに、上記のように記述すればよいだけです。
お好みでご利用ください。
※老婆心ですが、環境依存文字である"№"に置換するという方針が、将来展望も含めてシステムとして好ましいのかは疑問が残ります。
No.2
- 回答日時:
こんばんは
>ナンバー表示が{"NO.","NO","No.","No"}以外の時もあり、
>その場合は(№)に表示を変更出来ません。
許容する範囲が明示されていませんけれど、何があっても「№」と表示したいのなら、そのセルに
=IF(受付!F2="","","№")
という式でも設定しておけば、必ず「№」と表示されます。
対象とする範囲をきちんと限定できるのなら、ご提示の式で対象範囲を広げれば良いでしょう。
多いようなら、リストにしてそちらを参照するようにすれば宜しいかと。
No.1
- 回答日時:
現状の数式では、特定のナンバー表示({"NO.","NO","No.","No"})にしか対応していないため、その他の形式には対応できません。
この問題を解決するには、以下のアプローチを考えられます。1. より広い条件で置換する方法
正規表現を用いると、様々な「ナンバー表示」に対応できますが、Excelの標準関数では正規表現を直接扱えません。そのため、以下のように複数のパターンを手動で列挙する必要があります。
改良した数式例:
=REDUCE(受付!F2,{"NO.","NO","No.","No","No.","NO","no.","no"},LAMBDA(x,y,SUBSTITUTE(x,y,"№")))
上記では以下のバリエーションも置換対象に加えています:
大文字・小文字混合 (No. / no.)
全角バリエーション(No. / NO)
2. すべてのナンバー形式を包括するアプローチ
正規表現を活用すれば、ナンバー表示をより包括的に処理できます。ただし、これにはExcel内で正規表現を使えるようにする工夫が必要です。例えば:
Power Query を使用する方法 Power Query(Excel内蔵のデータ変換ツール)で正規表現を使えば、例えば以下のような形式を一括処理できます:
NO.123
No:123
Number 123
Power Query のステップ例:
置換ステップ: 正規表現でナンバーのパターン(例:No.*, NO.* など)を検出して № に変換します。
VBA を使用する方法 VBA で正規表現を使う方法を実装します。以下に簡単なコード例を示します:
Function ReplaceNumberFormat(inputText As String) As String
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "(?i)(no[\.:]?|number[\.:]?)"
regex.Global = True
ReplaceNumberFormat = regex.Replace(inputText, "№")
End Function
この関数をセルで使用できます:=ReplaceNumberFormat(受付!F2)
正規表現パターン (?i) は大文字・小文字を区別しない設定です。
3. 条件が複雑でない場合の手動更新のアプローチ
複雑な形式を網羅する必要がない場合、REDUCE 関数のリストに追加するだけで多くのケースに対応可能です。
まとめ
置換対象のパターンが増える場合は、数式の REDUCE にリストを拡張する。
正規表現が必要な場合は Power Query や VBA を利用する。
パターンが無限に広がる場合は、プログラミング的アプローチ(VBA)が最も柔軟です。
要件に応じた方法を選んでください!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELで次の数式を教えてください。 5 2022/11/23 18:33
- その他(プログラミング・Web制作) 特定の項目セルにスキャン(入力)すると連続で5行に自動で日付がはいる 1 2024/07/31 14:20
- グループウェア 重複データの抽出について。 1 2024/01/02 13:25
- 国産バイク アメリカのタンクローリーにつきまして、御存知の方がおられましたら教えてください。 3 2023/08/29 08:24
- Word(ワード) ワード2023でテキストボックス内の数字が勝手に変わってしまう 1 2023/02/09 14:47
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- 英語 前置可能な語句を含む複数の修飾語句を後置に統一する理由について(no man living who) 2 2024/05/05 10:20
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Excel(エクセル) Excelの同じ数値に記号をつけたい 1 2023/11/09 12:08
このQ&Aを見た人はこんなQ&Aも見ています
-
昔のあなたへのアドバイス
過去のあなたへ一度だけアドバイスを送れる電話があったとします。
-
字面がカッコいい英単語
あなたが思う「字面がカッコいい英単語」を教えてください。
-
"I love you" をかっこよく翻訳してみてください
あなたが考えるいちばんかっこいい "I love you"の訳を教えてください。
-
単二電池
あなたの家に何本ありますか?
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
UNIQUE関数、配列数式を使わずに品名ごとの集計を求めたい
Excel(エクセル)
-
エクセルで、数字ではない値(文字列)が入った場合の計算式を教えてください。
Excel(エクセル)
-
エクセルでVLOOKUPの入ったセルをカウントしない方法
Excel(エクセル)
-
-
4
Excel いい方法教えてください。
Excel(エクセル)
-
5
Excelの数式について教えてください。
Excel(エクセル)
-
6
エクセルのデータ整理の方法
Excel(エクセル)
-
7
Excel初心者です、Excelの日付関数を使って A列=生年月日 B列=年齢 C列=シリアル値 で
Excel(エクセル)
-
8
納期順に勝手に並べ替えられるようにしたいのですが…
Excel(エクセル)
-
9
Excelの数式について教えてください。
Excel(エクセル)
-
10
エクセルで作成した表の中にある数字大きい方からののランキングが関数でできますでしょうか 10代男性1
Excel(エクセル)
-
11
関数を教えて下さい
Excel(エクセル)
-
12
エクセル数式に問題があります
Excel(エクセル)
-
13
条件付き書式に設定する関数を教えて下さい
Excel(エクセル)
-
14
excelですが一つのマスに入ってる文字を2つのマスに変更できますか
Excel(エクセル)
-
15
エクセルでAのセルに「家電」と入れたらDが「10」、「野菜」と入れたら「8」となる方法
Excel(エクセル)
-
16
エクセルで作成した書類の印刷について
Excel(エクセル)
-
17
Excelについて教えてください。
Excel(エクセル)
-
18
エクセルで、数字の下4桁の0を削除する関数
Excel(エクセル)
-
19
エクセル初心者です 用語とか良く分からないので簡単に説明していただけると幸いです 表を作っているので
Excel(エクセル)
-
20
1.5ヶ月分の費用按分 エクセル関数
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの難問。「コピペする...
-
重複しない値を抽出したい
-
名前の間のスペースをそろえる...
-
エクセルでラベルシールを印刷...
-
【マクロ 画像あり】Exact関数...
-
【マクロ 画像あり】セル範囲の...
-
至急お願いします!エクセルの...
-
Excelの数式?について質問です...
-
【オートフィルター】3つのシ...
-
【マクロ】条件付き書式設定を...
-
エクセルの数式について教えて...
-
エクセルで教えてください。 例...
-
VBA_日時のソート
-
ミリ秒を時間へ変更するには? ...
-
空白のはずがSUBTOTAL関数でカ...
-
スプレッドシート(Excelでも良...
-
【マクロ】上のデータに下のデ...
-
エクセル 月間シフト表で曜日ご...
-
テーブルの合計、エラーをはぶ...
-
エクセルで、一部のセルだけ固...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの設定、下へスクロー...
-
別のシートの指定列の最終行を...
-
【マクロ】シート追加時に同じ...
-
Excelファイルを開くと私だけVA...
-
Excelの関数を教えて下さい。
-
マクロを実行すると、セル範囲...
-
エクセルの設定、特定の列以降...
-
Excelの条件付書式について教え...
-
Excelで作成した出欠表から日付...
-
Excelでの文字入力について
-
Excel 日付の表示が直せません...
-
Excel関数の解決方法
-
システムファイルについて
-
自動的に日付入力 応用
-
UNIQUE関数の代用
-
エクセル内に読み込んが画像の...
-
勤務外時間を出す表が作りたい
-
Excel 偶数月の15日(土日祝...
-
【マクロ】Call関数で呼び出し...
-
【マクロ】1回目の実行後、2...
おすすめ情報
回答ありがとうございます。
色々と教えていただきまして感謝いたします。
=REDUCE(受付!F2,{"NO.","NO","No.","No","No.","NO","no.","no"},LAMBDA(x,y,SUBSTITUTE(x,y,"№")))
で上手く行きましたが、今後の事を考えて「VBA」を設定したいと思います。
教えて頂いた「VBA」コードをどこに設定すればよろしいでしょうか。
又、数式を設定しているセルに
=ReplaceNumberFormat(受付!F2)
を設定しても良いとの解釈でしょうか。
よろしくお願いいたします。