ExcelのVBAで正規表現を使ってタブを利用する方法
- Excel2010を利用している場合、正規表現の置換を使ってスペースをタブに変更することができます。ただし、タブ文字自体は「 」という文字で表示されるため、置換結果を見る際には注意が必要です。
- VBAの場合、正規表現を利用するにはMicrosoft VBScript Regular Expressions 5.5ライブラリを参照設定する必要があります。また、置換結果をファイルに保存する場合はファイルのオープンとクローズの処理も必要です。
- 上記のVBAコードでは、指定の範囲のセルの値に対して正規表現の置換を行い、結果をテキストファイルに保存しています。セルの値が変換されたかどうかを確認するには、保存したテキストファイルを確認することができます。
- ベストアンサー
ExcelのVBA 正規表現でタブを利用するには?
Excel2010を利用しています。 正規表現の置換でスペースをタブに変更したいです。 下記で試しましたが、タブへは置換できず「\t」という文字がそのまま表示されてしまいます。 どのようにすれば解決しますでしょうか? Dim reg Dim pat As String Set reg = CreateObject("VBScript.RegExp") With reg .pattern = "(\d+?)[ | ]" .ignoreCase = True .Global = True End With fnsave = "テキスト.txt" numff = FreeFile Open fnsave For Output As #numff Dim i As Integer For i = 2 To 10 temp = Cells(i, "BW") temp = reg.Replace(temp, "$1\t") Print #numff, temp Next Close #numff
- pu-rapura
- お礼率100% (2/2)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
下記コードで試してみると、うまくいっている様です。ご参考まで。 temp = reg.Replace(temp, "$1" & vbTab) とか、 temp = reg.Replace(temp, "$1" & chr(9)) でも。 Debug.Printとしても成否が分からないので、クリップボードにコピーして確認してみました。 'Microsoft Forms 2.0 Object Libraryを参照設定 Sub test() Dim reg Dim pat As String Dim temp As String Dim CB As New DataObject Set reg = CreateObject("VBScript.RegExp") With reg .Pattern = "(\d+?)[ | ]" .ignoreCase = True .Global = True End With temp = "123 45 67 9" temp = reg.Replace(temp, "$1" & vbTab) With CB .SetText temp .PutInClipboard End With 'TABが視認できるテキストエディターに貼り付けてみる End Sub
関連するQ&A
- 【VBA】【正規表現】
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 ================================================ ☆この部分に☆に何を入れればよいでしょう? ご指導よろしくおねがいします。
- ベストアンサー
- Visual Basic
- vbaで正規表現
正規表現のコードなんですが、 上手く動きません。 何故でしょうか… Sub Test() Dim reg As Object Dim ans As Object Dim c As Range Set reg = CreateObject("VBScript.RegExp") For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp)) With reg .Pattern = "^【[(1)-(20)](\d*/\d*)" Set ans = .Execute(c.Value) End With If ans > 0 Then If Len(ans(0).submatches(0)) > 0 Then Debug.Print c.Address & "|" & ans(0).submatches(0) End If End If Next End Sub
- 締切済み
- Visual Basic
- VBAの正規表現で特定のフレーズの出現回数を数えるには?
VBスクリプトでの正規表現について質問します。 例として、次のようなプログラムを作成し、メッセージボックスに"2回"と表示されるような結果を期待しているのですが、"1回"と表示されて困っています。2回と表示されるようにするには、どのようにすればよいのでしょうか?アドバイスをお願いします。 Dim objRegex, objMatches, objMatch As Object Dim intRslt As Integer Dim strSource,strPattern As String Set objRegex = CreateObject("VBScript.RegExp") strSource = "お米の国と呼ばれる日本。お米のお国処は、秋田" strPattern ="お米.*国" With objRegex .Pattern = strPattern .ignorecase = True '.Global = True End With Set objMatches = objRegex.Execute(strSource) intRslt = objMatches.Count msgbox(intRslt & "回") エクセルに使用するため、"VBScript.RegExp"での動作環境になります。
- ベストアンサー
- Visual Basic
- 正規表現について
ExcelにてVBScriptの正規表現を使用していますが、 理解できないところがあるので、教えてください 1.EXCEL VBAにて下記のコードがあります Sub Sample2() Const strCHK As String = "000AAA111BBB2222BBB333" Dim RE, strPattern As String, i As Long, msg As String, reMatch, Item Set RE = CreateObject("VBScript.RegExp") strPattern = "AAA.+bbb" With RE .Pattern = strPattern .IgnoreCase = True .Global = True Set reMatch = .Execute(strCHK) For Each Item In reMatch Debug.Print Item.Value & " FirstIndex→" & Item.FirstIndex & " Length→" & Item.Length Next End With Set reMatch = Nothing Set RE = Nothing End Sub 2.上記を動作させると、イミディエイトに下記が出力されます AAA111BBB2222BBB FirstIndex→3 Length→16 3.疑問 strPattern = "AAA.+bbb"にて検索しているのに、 AAA111BBBが表示されないのは、何故なのでしょうか? よろしくお願いします
- ベストアンサー
- その他MS Office製品
- vbaでの正規表現について教えてください
「セルに入ってる値が数値ならA列からE列まで赤色にする」 を正規表現で行いたいのですがよくわかりません。 http://officetanaka.net/excel/vba/tips/tips38.htm を参考にしているのですが Sub Sample1() Dim RE, strPattern As String, r As Range Set RE = CreateObject("VBScript.RegExp") strPattern = "SUM\(" With RE .Pattern = strPattern ''検索パターンを設定 .IgnoreCase = True ''大文字と小文字を区別しない .Global = True ''文字列全体を検索 For Each r In ActiveSheet.UsedRange If .test(r.Formula) Then r.Interior.ColorIndex = 3 Next r End With Set RE = Nothing End Sub を、どう改造すれば、私のやりたい事になるのでしょうか? 【1】 まずstrPattern で、「数値ならば」はどうやればいいでしょうか? 【2】 次にtest(r.Formula)は、数式だからFormulaを使ってるのですよね? 数値を検索する場合はFormulaを何に変えればいいでしょうか? 【3】 最後に、 r.Interior.ColorIndex = 3はそのセルだけの色を変えるのですよね? A列からE列までにするにはどうすればいいでしょうか? 例えば A3セルに「1」が、A6セルに「3」が入っていたら、 A列からE列まで赤色にしたいです。
- ベストアンサー
- オフィス系ソフト
- Excel : 正規表現を利用して2文字の全角数字を半角数字に変換するには?
アクティブセルの文字を、正規表現を利用して文字の変換をしたいと考えています。 2文字の全角数字を半角数字に変換します。 かつ、3文字以上の全角数字は変換しません。 下記のようにコードを書いたのですが、希望通りに動作してくれません。 どこが悪いのでしょうか? ご指摘いただければ幸いです。 よろしくお願いいたします。 ※参照可能なライブラリファイルにて、「Microosft VBScript Regular Expressions 5.5」に チェックは入れています。 Sub sample() Dim str Dim strPattern As String Dim strReplacement As String str = ActiveCell.Value str = myRegExp(str, "([^0123456789])([0123456789]{2})([^0123456789])", "$1$2$3") ActiveCell.Value = str End Sub Private Function myRegExp(str, strPattern, strReplacement) Dim objRegExp As RegExp Dim test As String Set objRegExp = New RegExp With objRegExp .Pattern = strPattern .IgnoreCase = False .Global = True myRegExp = .Replace(str, "$1" & StrConv("$2", vbNarrow) & "$3") End With Set objRegExp = Nothing End Function
- ベストアンサー
- オフィス系ソフト
- 正規表現について
VB6ですが・・・ '次のようなコードがあって <!-- と --> に囲まれる文字列を抜き出したのですが 'どのようなパターンマッチを書けばいいのでしょうか? 'HTMLのコメントのみを抜き出したいと思っています。 Const s = "<!--今日-->" _ & "<!--僕は--><!--正規表現を--><!--勉強します-->" Dim x As RegExp Dim v As match Set x = New RegExp x.Pattern = "パターン" x.Global = True For Each v In x.Execute(s) Debug.Print v.Value Next
- ベストアンサー
- Visual Basic
- ExcelのVBAの正規表現で二重引用符を含む文字列を検索できるようにしたい
二重引用符を含む文字列を検索できるようにするには 下記の記述の re.Pattern = "<hr class=\"separate\">" の部分をどのように直せばよいのでしょうか? Sub tagCount() Dim cnt As Integer Dim IE As Object Dim HTML As String Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML IE.Quit Dim re As RegExp Dim mc As MatchCollection Dim m As Match Set re = New RegExp re.Pattern = "<hr class=\"separate\">" re.Global = True re.IgnoreCase = True Set mc = re.Execute(HTML) MsgBox mc.Count End Sub ご存知の方がおられましたらご回答をよろしくお願いします。 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003
- ベストアンサー
- オフィス系ソフト
- VBS、正規表現でドメインを取りたい。
VBScriptで開発をしています。 文字列からドメインだけを取得したくて、ネットで調べて以下のような コードを書いてみましたが、うまくいきません。 正規表現がうまくマッチしてこないようなのですが、初心者故よくわからず…。 おかしい点、修正すべき点を教えていただけないでしょうか。 Dim reg Set reg = Server.CreateObject("VBScript.RegExp") reg.Pattern = "/^[httpsfile]+:\/{2,3}([0-9a-zA-Z\.\-:]+?):?[0-9]*?\//i" Dim testUrl testUrl = "http://www.test.co.jp/test.html" Set Matches = ObjRegExp.Execute(testUrl) Dim Matches Dim Match Dim StrTest For Each Match in Matches StrTest = Match.value Next
- ベストアンサー
- Visual Basic
- ExcelでRegExpのFunctionの作成
エクセルVBAで、文字列と正規パターンを引数として渡すと、マッチした文字位置の羅列を","区切りの文字列で返すようなFunctionを作ろうと考えています。なかなかうまく作れなくて困っています。どなたか、詳しいかたいらっしゃいましたら教えて頂けないでしょうか?宜しくお願いいたします。 発生する実行時エラー 実行時エラー'5020': 'Execute'メソッドは失敗しました:'IRegExp2'オブジェクト 追伸:ネットで、自動作成してくれるサイトがありそのコードを参考にアレンジしました。つじつまが合わない部分は、私の改編によるものだと思います。 Function Get_Position_RegExp(MySource As String, MyPattern As String) As Variant Dim MyReg As RegExp Dim MyMatch As MatchCollection Dim i As Match Set MyReg = CreateObject("VBScript.RegExp") With MyReg .Pattern = MyPattern .Global = True Set MyMatch = .Execute(MySource) End With Get_Position_RegExp = "" For Each i In MyMatch Get_Position_RegExp = Get_Position_RegExp & "," & i.FirstIndex + 1 Next Set MyMatch = Nothing Set MyReg = Nothing End Function
- ベストアンサー
- オフィス系ソフト
お礼
できました! 本当にありがとうございました。 タブは\tだけと思い込んでいました。 頭が固すぎました。