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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

9447閲覧

VBScriptのRegExpのExecuteで文字列が抽出できない

kurosuke___

総合スコア217

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/05/18 12:28

編集2016/05/18 14:33

〒000-0000 ○○県○○区○○2丁目
のような文字列から○○県○○区という文字を抽出したいのですがうまくいきません。

VBA

1Sub TEST01() 2 3Dim RE, Matches 4Dim Mojiretsu As String 5Dim xxx As String 6Dim i As Integer 7Dim moji As Range 8i = 2 9 10Set RE = CreateObject("VBScript.RegExp") '正規表現を使用可能にするオブジェクトを作成 11 12Set moji = Worksheets("INPUT").Cells(i, 3) 13Mojiretsu = moji.Value '検査対象文字列指定 14 If InStr(Mojiretsu, "区") > 0 Then 15 With RE 16 .Pattern = "\s.*区" 17 .IgnoreCase = True 18 .Global = True 19 End With 20 Set Matches = RE.Execute(Mojiretsu) 21 xxx = Matches(0).Value 22 Worksheets("カテゴリ名抽出").Cells(i, 2).Value = xxx 23 Set Matches = Nothing 24 Set RE = Nothing 25End Sub

※質問用にループ処理は取り払っています

このようにしているのですが、
xxx = Matches(0).Value
の部分でエラーになってしまいます。
エラー→「プロシージャの呼び出し、または引数が不正です」

何か解決策はありませんか?

ちなみに、.Patternの正規表現を"[0-9]"や"[^0-9]"
にすると動きます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

マッチしていないのではないでしょうか。
パターンが「スペースではじまり区で終わる」になっているかと思います。

xxx = Matches(0).Valueの前でMatches.countを評価することが必要ではないでしょうか。

投稿2016/05/18 15:34

kaz.Suenaga

総合スコア2037

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

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

kurosuke___

2016/05/24 06:45

お返事が遅れてすみません。 そうですね、「スペースで始まって区で終わる」その部分を抽出したいのです。 〒000-0000 ○○県○○区○○2丁目 の○○県○○区の部分だけを別のセルに抽出したいのです。 If Matches.Count <> 0 Then で評価しましたら、elseになってしまいました。 そもそもマッチという言葉の意味も間違っているのでしょうか・・・ 全く見当違いのことをしているのでしょうか・・・?
kaz.Suenaga

2016/05/24 06:58

想像ですけど、スペースがいわゆる全角だったり、複数個あったり、なかったりするデータが混じっていませんか。 そういったデータ側と想定している処理の整合性が取れていないだけであって、やろうとしている処理は妥当に見えます。 とりあえず .Count で 0 になっているものは一旦渡された元の文字列を返す、などしてみて、どういう文字列が渡されたときにそういった状況が起こっているか確認してみてはいかがでしょうか。
kurosuke___

2016/05/25 03:21

ありがとうございます。スペースが全角でした・・・こんなに初歩的なミスをするなんて・・・ 助かりました。ありがとうございます。
guest

0

ちょっと確認ですが、今やりたいことは以下のような事ですか?

  1. 抽出元は住所を表す文字列
  2. 住所は、都道府県や市区町村などが空白区切りになっている
  3. 文字列に「区」という文字が含まれていた場合に「○○区」という文字列を抽出したい

まず、pattern に使用可能な正規表現のメタ文字のセットを確認すると
Pattern プロパティ

です。

そこで、住所の各部分が「空白区切り」になっているという前提がとても重要なのですが、「○○区」の「○○」の部分は「空白を含まない1文字以上の文字列」と考えることが出来るので、以下のように表現可能だと思います。

.Pattern = "\S+区"

それでも上手くマッチしないなら、そもそも元の文字列が正しく「空白区切り」になっているかを、先ずは再確認してみた方が良いと思います。

投稿2016/05/18 23:30

pi-chan

総合スコア5936

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

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

kurosuke___

2016/05/24 07:01

お返事が遅れてすみません。 1.その通りです 2.郵便番号␣都道府県名市町村区住所という感じです 3.区という文字が含まれていた場合「 ○○県○○区」を抽出して、ほかのセルにセットしたい このような感じです。 .Pattern = "\S+区" にかえましたところ、郵便番号も入ってしまっていましたが、きちんとMatchesコレクションの[0]に格納され、セルにセットできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問