
B86に様々な物件が表示され、その物件名に様々なナンバー文字が含まれている場合に
「№」と置き換えが出来るように設定しました。
様々なナンバーのリストをK77:K136に設定してます。
セルB88に、数式「=ReplaceNumbers(B86,K77:K136)」を設定し
末尾の文字を削除出来るように設定してますが、
例えば
B86に「北海太郎No_1」と表示された場合に
B88に「北海太郎№_1」と表示されてしまします。
この表示を「北海太郎№1」と出来る方法を教えてください。
作業ブックの標準モジュールコード
Function ReplaceNumbers(target As String, numbers As Range) As String
Dim cell As Range
Dim result As String
Dim num As String
result = target
For Each cell In numbers
num = cell.Value
' 末尾の記号を削除
num = RemoveTrailingSymbols(num)
result = Replace(result, cell.Value, "№")
Next cell
ReplaceNumbers = result
End Function
Function RemoveTrailingSymbols(str As String) As String
Dim symbols As String
Dim i As Long
symbols = "..、、,。__::--" ' 削除対象の記号を定義
For i = Len(str) To 1 Step -1
If InStr(symbols, Mid(str, i, 1)) = 0 Then
RemoveTrailingSymbols = Left(str, i)
Exit Function
End If
Next i
RemoveTrailingSymbols = "" ' すべて記号の場合
End Function
以上となります。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
No4です。
もし、手作業で文字数の多い順に並べ替えるのでなく、関数で文字数の多い順に並べ替えたいのなら、そのようにすることは可能です。
その場合は、
L列に文字数(L77~L136)
M列に並べ変えたリスト(M77~M136)
N列に並べ変えたリストの文字数(N77~N136)
が表示されます。
そして、B88セルには
数式「=ReplaceNumbers(B86,K77:K136)」ではなく
数式「=ReplaceNumbers(B86,M77:M136)」
を設定する必要があります。
もし、そのようにしたいなら、その旨補足してください。
No.4
- 回答日時:
No3の方の指摘通りです。
もし、現状の仕様のまま、期待した結果を得たいなら、K7:K136の範囲を
文字数の多い順に並べ変える必要があります。
多分、このリストは、一度登録すれば、あまり修正は発生しないので、手作業で良いかと思います。
以下、その手順です。
1.K7:K136の範囲を選択しコピーします。
2.それを別の任意の作業用シートのA1に貼り付けます。そうするとA1~A130にリストが表示されます。
3.B1に 以下の式を入力します。
=LEN(A1)
4.オートフィルで、B130までコピーします。
5.B列を選択し、並べ替えとフィルターで降順を指定します。
「選択範囲を拡張する」を選択して実行します。
6.文字数数の多い順に並べられたリストができたので、A1~A136をコピーし、
元のシートのK7:K136に貼り付けます。
以上で完了です。作業用シートは削除してください。
添付資料は、作業用シートの内容です。
左側が、並べ替え前、右側が並べ替え後です。

No.3
- 回答日時:
No2です。
補足にご提示のリストは画像なので、よく見えませんし文字コードも確認できませんけれど、「No_」という項目があれば変換はされるはずです。
ただし、ご提示の関数内の処理はリスト順に処理されるような仕様になっていますので、包含関係にあるような文字列(例えば、「No」と「No_」)がそのような順でリストに記されていると「No」で先に置き換えられて、「No_」の置き換えは行われないという事象が発生します。
ご提示のリストはよく見えませんけれど、そうなっていそうな雰囲気ですので、そちらが原因かもしれません。
対処法としては、包含している方を先にリストに記すようにすればとりあえずの対応は可能と思います。
そんな面倒なことは気にしなくてもよい様にしたければ、関数側でそのように順を読み替えて処理するように対処すれば良いでしょう。
そのように変更なさりたければ、発注先にそのように修正依頼をなさってください。
あるいは、No2に記した「おかしな点(=無駄な処理)」が、何かそれに関係しているのかも知れませんけれど、ご提示の内容では無駄な処理になっているので、当方には意図がわかりかねます。
No.2
- 回答日時:
こんにちは
どのような仕様で作成されている関数なのかが不明ですが、ご提示のコードから見る限り、第二引数で指定されたリスト内にある文字列を「№」に置き換えるだけのものです。
ですので、指定リストに変更したいパターンが記されていないだけではないでしょうか??
なお、ご質問には直接関係ありませんけれど、ご提示のコードだけから見ると RemoveTrailingSymbols()の関数は、処理内容的には意味を持っていませんので、無駄な処理を行っているように見えます。
わざわざ無駄な処理を加えるとも思えないので、そのあたりが「発注時の仕様」とコードの食い違いなのかも知れません。
発注先に再確認なさった方が宜しいかも知れません。
No.1
- 回答日時:
K77:K136には、どのような値が設定されtますか。
B86に「北海太郎No_1」と表示された場合に
B88に「北海太郎№_1」と表示されるようなケースを提示してください。
K77:K136になにも設定しないで、実行するとB88には、
「北海太郎No_1」とひょうじされます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Excelの数式について教えてください。
Visual Basic(VBA)
-
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
エクセルの改行について
Visual Basic(VBA)
-
-
4
OS入ってる機器のソフト・アプリの作成(プログラム)って
その他(プログラミング・Web制作)
-
5
VBAの「To」という語句について
Visual Basic(VBA)
-
6
算術演算子「¥」の意味について
Visual Basic(VBA)
-
7
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
-
8
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
9
ExcelのVBAコードについて教えてください。
Visual Basic(VBA)
-
10
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
11
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
12
C言語 関数、変数の宣言について
C言語・C++・C#
-
13
C言語のことです。写真(見にくくてすいません)の下のプログラムを実行したいのですが四行目がおかしいと
C言語・C++・C#
-
14
C言語について(初心者)
C言語・C++・C#
-
15
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
16
COPYコマンドで、最後に1文字「Hex1A」が付くのはなぜ?外し方は?
その他(プログラミング・Web制作)
-
17
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
18
VBAでFOR NEXT分を Application.OnTimeを使って
Visual Basic(VBA)
-
19
プログラム上での行のマージ方法
その他(プログラミング・Web制作)
-
20
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
【ExcelVBA】5万行以上のデー...
-
VBA ユーザーフォーム ボタンク...
-
エクセルの改行について
-
VBAでCOPYを繰り返すと、処理が...
-
算術演算子「¥」の意味について
-
Vba セルの4辺について罫線が有...
-
改行文字「vbCrLf」とは
-
【VBA】 結合セルに複数画像と...
-
VBA 入力箇所指定方法
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
[Excel VBA]特定の条件で文字を...
-
Excel 範囲指定スクショについ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
-
【マクロ】値を渡されたプロシ...
おすすめ情報
ご連絡ありがとうございます。
リストの画像をお送りします。
リストの上から7つ目の
「No_」をコピーして、B86に「北海太郎No_1」と記載をした場合に
B88に「北海太郎№_1」と表示されてしまします。
よろしくお願いします。
回答、ありがとうございます。
このリストを使用して上手く置き換えが出来るコードに須つ方法はありますか。
教えて頂けますか。
よろしくお願いします。