23歳OLです。
VBAと正規表現についての質問です。
▼やりたいこと
1 | 0 |1234567890 | 2014-2-22 22:22:22.06+09
という数列から
1234567890 という数字のみを抜き出したいです。
正確には2本目の|と3本目の|の間に入っている様々な数字です。
※桁数が固定されていません。
▼実際書いたコード
Sub Sample2()
Dim RE, strPattern As String, i As Long, msg As String, reMatch
Set RE = CreateObject("VBScript.RegExp")
strPattern = "☆この部分☆"
With RE
.Pattern = strPattern
.IgnoreCase = True
.Global = True
For i = 1 To 10
Set reMatch = .Execute(Cells(i, 1))
If reMatch.Count > 0 Then
msg = msg & reMatch(0).Value & vbCrLf
End If
Next i
End With
MsgBox msg
Set reMatch = Nothing
Set RE = Nothing
End Sub
☆この部分に☆に何を入れればよいでしょう?
ご指導よろしくおねがいします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答9件
0
ベストアンサー
>「J列5行目から14行目の内容の"|"で区切った3つめを取り出して、それを各行のI列に入れる」ですか?
まさにこれです!言葉足らずですみません。。。
ということであれば、
lang
1Sub 三番目取り出し() 2Dim i As Integer, msg As String, x() As String 3Worksheets("sheet1").Activate 4For i = 5 To 14 5 x = Split(Cells(i, 10), "|") 6 If UBound(x) >= 2 Then 7 msg = Trim(x(2)) 8 Else 9 msg = "" 10 End If 11 Cells(i, 9) = msg 12Next i 13End Sub
投稿2015/02/24 06:16
総合スコア84559
0
正規表現は
strPattern = "[0-9]+"
でよろしいかと。
「実際書いたコード」にある、
Set reMatch = .Execute(Cells(i, 1))
でreMatchにコレクション(配列のようなものと考えてよいです)でマッチした文字がすべて返されてきます。
ループで回して、reMatchに帰ってきた文字列をすべて連結すれば、数字のみをすべて抽出できます。
例えば、先頭のDimにjを追加しておいて、Forループのところを下記のようにしたらどうでしょう。
For i = 1 To 10 Set reMatch = .Execute(Cells(i, 1)) For j = 0 To reMatch.Count-1 msg = msg & reMatch(j).Value WScript.echo reMatch.Count Next j Next i
投稿2015/02/22 14:42
総合スコア374
0
ようやくあなたのやりたいことが理解できと思います。
以下のコードをそのまま使ってみてください。
Sub Sample3()
Dim RE, strPattern As String, i As Long, msg As String, reMatch
Set RE = CreateObject("VBScript.RegExp")
strPattern = ".|.|(\d+) |.*"
With RE
.Pattern = strPattern
.IgnoreCase = True
.Global = True
For i = 1 To 10
Set reMatch = .Execute(Cells(i, 1))
If reMatch.Count > 0 Then
msg = msg & reMatch(0).submatches(0) & vbCrLf
End If
Next i
End With
MsgBox msg
Set reMatch = Nothing
Set RE = Nothing
End Sub
投稿2015/02/24 00:33
総合スコア142
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/24 05:33
2015/02/24 05:59
0
Okwaveに回答したものの焼き直しですが、
lang
1Sub 三番目取り出し() 2Dim i As Long, c As Long, msg As String, x() As String 3Worksheets("sheet1").Activate 4For i = 1 To 10 5 x = Split(Cells(i + 4, 10), "|") 6 If UBound(x) >= 2 Then 7 msg = msg & Trim(x(2)) & vbCrLf 8 End If 9Next i 10 11For c = 1 To 5 12 Cells(c + 4, 9) = msg 13Next c 14End Sub
他の回答のコメントで「無効なインデックス」となるのは、対象セルの中に|
の個数が足りないところがあるんでしょう。上記では、それをUBound(x)で判断してます。
投稿2015/02/23 11:53
総合スコア84559
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/23 12:46
2015/02/24 05:35
2015/02/24 05:52
2015/02/24 05:54
0
正規表現で処理をすることが重要なのであればスルーしていただくとして
この処理の場合 msg = Split(対象文字列, "|")(2) のほうが手っ取り早くないですか?
投稿2015/02/23 06:13
総合スコア144
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/23 06:28
2015/02/23 06:33
2015/02/23 06:42
2015/02/23 06:57
2015/02/23 07:32
2015/02/23 07:33
2015/02/23 07:47
2015/02/23 11:37
2015/02/23 11:47
0
strPattern = " .|.|\d+ |.* "
これで良いと思います
目的の数列を抜き出したいのなら、" .|.|(\d+) |.* "とカッコで括って、submatchを見れば良いと思います。
投稿2015/02/23 01:16
総合スコア142
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/23 02:25
2015/02/23 02:47
2015/02/23 03:00
2015/02/24 05:52
2015/02/24 06:05
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/24 06:33