ExcelVBAマクロでの正規表現の方法
- ExcelVBAマクロについて確認させてください。変数aから、半角で書かれた括弧つきの数字(1)~(99)またはは全角で書かれた括弧つきの数字(1)~(99)の文字列を削除したいのですが、正規表現を使ってもっと効率良い書き方がありますでしょうか。
- ExcelVBAマクロでの正規表現を使った効率的な文字列削除方法を教えてください。
- ExcelVBAマクロを使用して、変数aから括弧つきの数字の文字列を削除したいです。正規表現を活用する方法はありますか?
- ベストアンサー
ExcelVBAマクロでの正規表現の方法
ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 変数aから、半角で書かれた括弧つきの数字(1)~(99)またはは全角で書かれた括弧つきの数字 (1)~(99)の文字列を削除したいのですが、例として"(1)"を削除する場合、次のような命令文 a = Replace(a, "(1)", "")のような書き方でもいいのですが、正規表現を使って もっと効率良い書き方がありますでしょうか。 ぜひご教授下さい。 以上、よろしくお願いします。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub
- rotawota7
- お礼率61% (38/62)
- Visual Basic
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは、こんな感じかな? buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream a = .ReadAll .Close End With With CreateObject("VBScript.RegExp") .Pattern = "[((][0-90-9]{1,2}[))]" .Global = True a = .Replace(a, "") End With
その他の回答 (2)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
RegExpオブジェクトを利用しましょう。 Replaceのメソッドがあるので、適正な条件で一発置換が行えます。 Private Function カッコ数字消し(ByVal p_str置換対象文字列 As String) As String Dim regObj As Object 'RegExp '参照:http://cheb.sakura.ne.jp/gena/blog/archives/2006/03/vb60.html Set regObj = CreateObject("VBScript.RegExp") regObj.Pattern = "(\(.\d*\))|(.\d*)" regObj.Global = True Dim l_strRet As String l_strRet = regObj.Replace(p_str置換対象文字列, "") カッコ数字消し = l_strRet End Function
お礼
ご回答ありがとうございます。 RegExpオブジェクトという便利な機能、初めて知りました! 今後の参考にさせていただきます。 色々とありがとうございました!
- nicotinism
- ベストアンサー率70% (1019/1452)
中途半端な回答ですみません。最初に謝っときます。 何が中途半端かというと。 (123) や (12)などのように全て半角か全角の場合は変換します。 括弧の両側が半角・全角で揃っていなくても大丈夫。 しかし、括弧の中の数字に半角・全角が混じっていたら見逃してしまいます。 他にも漏れがあるかもしれません。。。 Function ReplaceXX(ByVal aRg As Variant) As String Dim oRg As Object Dim Match As Object Dim Matches As Object If IsNull(aRg) Then ReplaceXX = Null Exit Function End If Set oRg = CreateObject("VBScript.RegExp") oRg.Pattern = "(\(|\()([1-9][0-9]{0,}|[1-9][0-9]{0,})(\)|\))" oRg.Global = True Set Matches = oRg.Execute(aRg) For Each Match In Matches aRg = Replace(aRg, Match.Value, "", compare:=vbTextCompare) Next ReplaceXX = aRg Set oRg = Nothing End Function
お礼
ご回答ありがとうございます。 実践していただき、ありがとうございます! RegExpオブジェクトは参考になりました。 色々とありがとうございました!
関連するQ&A
- ExcelVBAマクロでワードファイル読み込み方法
ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 ですが、この方法ではテキスト文書しか読み込みが出来ないようです。 ワードファイルも読み込むように設定したいのですが可能でしょうか? 可能でしたらその方法をご教授いただけますでしょうか。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub
- ベストアンサー
- Visual Basic
- ExcelVBAマクロでワードファイル書き込み方法
ExcelVBAマクロについて確認させてください。 下記のように読み込みたいWordファイルをフォームで指定して Wordファイルの内容を変数aに読み込ませてます。 変数Xにある任意の文字列を代入し、変数aでその変数Xが検索された場合は その検索された文字列全てを赤文字にして別の名前で保存という方法は可能でしょうか。 可能であればその方法をご教授下さい。 以上、よろしくお願いいたします。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub
- ベストアンサー
- Visual Basic
- ExcelVBAマクロでテキストボックスの値の代入
ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 この方法の他に、ユーザーフォームでテキストボックスを 作成してテキストボックス内で文字を記入してその文字を 変数aに読み込ませることは可能でしょうか。 可能であればその方法をぜひご教授ください。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream'指定したファイルを開く a = .ReadAll'テキスト文書の内容を文字列aに代入 .Close'指定したファイルを閉じる End With End Sub
- ベストアンサー
- Visual Basic
- ExcelVBAマクロについて確認させてください。
ExcelVBAマクロについて確認させてください。 テキストファイル内の全ての文字を読み込むプログラムですが、テキストファイルがUTF-8形式の場合は文字化けしてしまいます。 UTF-8形式の場合でも読み込める方法はありますでしょうか。 お手数おかけしますが、よろしくお願いします。 Sub test() Dim FSO As Object, buf As String Set FSO = CreateObject("Scripting.FileSystemObject") ''C:\Work\Sample.txtの全ての文字を読み込んで表示します With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream buf = .ReadAll MsgBox buf .Close End With Set FSO = Nothing End Sub
- 締切済み
- Visual Basic
- なぜ値が代入されるのかわからない
Sub Sample1() Dim 文字 As String 文字 = "あああ" Call Sample2(文字) 'プロシージャSample2の引数に変数を渡して呼び出す End Sub Sub Sample2(a As String) MsgBox a End Sub ---------------------------------- をやってみて疑問なのですが、 なぜ a = 文字 がないのに、 aに”あああ”が代入されるのでしょう? aにウォッチ式の追加をあてて、F8で一行ずつステップインしてみると Sub Sample2(a As String) の部分で、 aに””あああ”が代入されています。 a = 文字 と Sub Sample2(a As String) は 同じ意味なのでしょうか?
- ベストアンサー
- オフィス系ソフト
- 参照渡し(ByRef)
参照渡しについてわからないのですが Option Explicit Dim buf As String Sub Sample1() buf = "aaa" Call Sample2("bbb") MsgBox buf End Sub Sub Sample2(ByRef a As String) a = "ccc" End Sub を実行すると、msgboxには、aaaが表示されますが、 途中のbbb,cccはどんな意味があるのでしょうか? また、 Sub Sample2(ByRef a As String) を Sub Sample2(a As String) にしてもコードは問題なく動きますが、 ByRefは役に立ってるのですか?
- ベストアンサー
- オフィス系ソフト
- Excel2007VBAプロシージャの引数について
●質問の主旨 下記コードのうち、 buf = buf & msg & vbCrLfについて 1.右辺の変数bufはどんな役割があるのでしょうか? 2.右辺のbufを省略したら、メッセージボックスに 表示される「Excel」の文字は3つから1つになります。 これはなぜでしょうか? ご存知の方ご教示よろしくお願いします。 ●コード Sub Sample8() Call Sample9("Excel", 3) End Sub Sub Sample9(msg As String, n As Long) Dim i As Long, buf As String For i = 1 To n buf = buf & msg & vbCrLf Next MsgBox buf End Sub
- ベストアンサー
- Visual Basic
- ExcelVBAマクロでGUIによるファイル名指定
ExcelVBAマクロについて確認させてください。 下記のようにマクロのあるカレントフォルダに存在するファイルのなかから 読み込みたいファイルの名前を手入力してそれを変数aに読み込ませています。 ですが、この方法ですとユーザがいちいち手入力しなければならず、 ユーザ負担が大きいのと入力漏れおよび入力ミスが発生する恐れがあります。 そこで、マウスでファイルをクリックして指定するように基礎的な操作をマウスによって 行うGUIを作成したいのですが、ExcelVBAマクロで可能でしょうか。 あるいはExcelVBAに導入が可能なソフトウェアおよびそれが可能なソフトウェア があればぜひご教授ください。 以上、よろしくお願いいたします。 ---------------------------------- Sub sample() Dim FN As String Dim FullPathFileName1 As String Dim a As String FN = InputBox("読み込むファイル名を入力してください。(拡張子も含む。)") FullPathFileName1 = ThisWorkbook.Path & "\" & FN a = CreateObject("Scripting.FileSystemObject").GetFile(FullPathFileName1).OpenAsTextStream.Readall a = Replace(a, vbCrLf, "") '改行コードの削除 CreateObject("Scripting.FileSystemObject").GetFile(FullPathFileName1).OpenAsTextStream.Close End Sub
- ベストアンサー
- Visual Basic
- VBAでテキストファイルの改行を無視する方法
VBAでテキストファイルにある文字列を配列の変数に格納したいのですが、改行が含まれているとそこから2バイトずつずれてしまいます。 1行毎に読もうとしても1行の文字列が6000バイトぐらいあるので変数に格納しきれません。 読み込むテキストファイルは _________0_________1_________2・・・・________10 _______100________51 のようになっており、10バイトずつ変数に格納していきたいです(スペースも格納する必要あり) 以下のように作ったのですが、改行のあるところからずれてしまいます。 Sub ファイル読み込み() Dim buf(30000000) As String Dim i As Long i = 0 With CreateObject("Scripting.FileSystemObject") With .OpenTextFile("C:\test.text", 1) Do While .AtEndOfStream <> True buf(i) = .read(10) Loop End With End With End Sub 「次の文字列が改行コードである」ということが分かれば.skipで飛ばせるのですが、その判定式が探しても見つかりません。 どなたかご教授よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルマクロ フォルダ内のファイル検索で
よろしくおねがいします。 下記で、どうも指定フォルダ内のファイル名を検索できていないようで 条件の"ないなら"に反応して中断するハズがファイルを開いてしまいます。 思ったのですが、bufの設定にファイル名は指定できないのでしょうか? Sub Start8() Dim buf As String, IptA As String Const Path As String = "C:\001\" IptA = Workbooks("AAA.xls").Sheets("Sheet1").Cells(1, 1).Value buf = Dir(Path & "" & IptA & ".txt") If buf = "" Then Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptA & "は見つかりません" Exit Sub Else Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptFN & "が見つかりました" End If Workbooks.OpenText Filename:= _ "C:\001\" & IptA & ".txt" End Sub
- ベストアンサー
- その他MS Office製品
お礼
ご回答ありがとうございます。 この方法ですと半角、全角関係なく対応出来ました。 今後の参考になりました。 色々とありがとうございます!