質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Q&A

解決済

3回答

2004閲覧

Replace命令による複数単語の変換方法

edmame

総合スコア17

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

0グッド

0クリップ

投稿2020/09/01 14:08

VBAのreplace命令の機能を使って、
一行に変換対象が複数の文字列を変換したいと考えています。
事情があり、一行につき一回のコードで実装をする事になっています。

例えば、大文字COMPANYは株式会社
小文字comanyは有限会社
というふうに

ワンレコードにCOMANYとcompanyが入り交じっているので、大文字と小文字が正確に変換するようにしたいです。

複数行に分けられない制約があるため、悩みでおります。
宜しくご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoichiSugiyama

2020/09/01 14:47

「事情があり、一行につき一回のコードで実装をする事になっています。」と意味がちょっと分からないのですが、一回のreplace関数で二種類の変換をしたいという意味でしょうか?そのあたりを詳しく書いていただけると、違う視点からのアドバイスをしてくださる方もおられるかもしれません。
edmame

2020/09/01 15:48

コメントありがとうございます。 電車の中で携帯から投稿したので、詳しく書けませんでしがた、実現したい内容は ご指摘のとおり、replace関数で二種類の変換をしたいです。 コマンドで言うと str1=("hogehoge_COMANY_hohoho_company......") replace(str1,COMANY, 株式会社とcompany,有限会社) みたいな感じです。 宜しくご教示お願い致します。
guest

回答3

0

無理に一行で書くならKoichiSugiyamaさんの回答になると思いますが、私は関数化をお勧めします。
複数ワードに対応した置換関数を作っておけば何かと便利かと思います。
以下サンプルです。

VBA

1Sub test() 2 Dim str1 As String 3 str1 = "hogehoge_COMPANY_hohoho_company......" 4 Debug.Print ReplaceEx(str1, "COMPANY", "株式会社") 5 Debug.Print ReplaceEx(str1, "company", "有限会社") 6 Debug.Print ReplaceEx(str1, "COMPANY", "株式会社", "company", "有限会社") 7 Debug.Print ReplaceEx(str1, "COMPANY", "株式会社", "company", "有限会社", "hoge", "あ", "ho", "い") 8End Sub 9 10Function ReplaceEx(ByVal str As String, ParamArray words() As Variant) As String 11 For i = 0 To UBound(words) - 1 Step 2 12 str = Replace(str, words(i), words(i + 1)) 13 Next 14 ReplaceEx = str 15End Function 16 17出力結果 18hogehoge_株式会社_hohoho_company...... 19hogehoge_COMPANY_hohoho_有限会社...... 20hogehoge_株式会社_hohoho_有限会社...... 21ああ_株式会社_いいい_有限会社......

投稿2020/09/02 00:08

編集2020/09/02 01:17
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/09/02 00:43

vbBinaryCompareを指定されていませんが、大文字/小文字の識別が出来ていますね。 手元で試してみたところ同じ結果だったのですが、逆にvbTextCompareを指定しても大文字/小文字が識別されます。 理由をご存知ですか?
ttyp03

2020/09/02 00:55

試してみました。 確かにvbTextCompareが効かないですね。 Option Compare Text を冒頭で定義すると、これは効きました。 ただcompare引数のデフォルト値はvbBinaryCompareはずなのに、vbUseCompareOptionの方を見に行ってしまうのが謎です。 よくわからないですね。
ttyp03

2020/09/02 00:58

あ、引数で指定してもできました。 名前付きで指定しないとダメでした。 Replace(str, words(i), words(i + 1), compare:=vbTextCompare)
sazi

2020/09/02 01:38 編集

ありがとうございます。compare引数は必ず指定する(かつ名前付きで)方が無難ですね。 因みに、質問者さんが誤記されているからですけど、COMANYになってます。 大文字/小文字の識別例としてはCOMPANYとしておいた方が良いと思います。
ttyp03

2020/09/02 01:16

スペルミスは気づいてました。 それが原因かと思いましたが、違いましたね。 コードはこのあと修正しておきます。
guest

0

ベストアンサー

どうしても一行ですましたいのであれば、ちょっと無理やりですが

VBA

1str1 = ("hogehoge_COMANY_hohoho_company......") 2str1 = Replace(Replace(str1,"COMANY", "株式会社", 1, -1, vbvbBinaryCompare), "company","有限会社", 1, -1, vbBinaryCompare) 3

こんな感じでどうでしょうか。

投稿2020/09/01 19:02

編集2020/09/01 19:03
KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edmame

2020/09/04 03:10

ありがとうございました。 解決出来ました。
guest

0

Replace 関数
compare引数をvbBinaryCompareにすると大文字/小文字を識別できます。

投稿2020/09/01 14:41

sazi

総合スコア25206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問