プロが教えるわが家の防犯対策術!

VBA初心者ですが、VBAでのテキストファイル編集で行き詰っています
やりたい内容は以下の2つです

・あるファイルのテキストで、全ての行の5桁目から8桁目までを削除したい

入力ファイルA  出力ファイルB
-----------------------------------------------
1234567890   → 123490
abcdefghijk    → abcdijk

・あるファイルのテキストで、全ての行の6桁目から後ろにスペースを7桁分入れたい

入力ファイルC       出力ファイルD
------------------------------------------------
123456789 → 12345 6789
987654321 → 98765 4321

上記は、別々の作業となりますので、一連ではありませんが

それぞれを、行う方法が判りません。
VBAは始めたばかりの初心者ですが、上記内容をなんとか作りたいと思っています。
わかる方がいましたら、ご教授頂けないでしょうか?
お手数ですが、教えていただけると助かります

A 回答 (3件)

たまたま、今、こちらで作業していたら、同じような質問が出ていたので、ほんのちょっと変えただけです。

うまくいくかどうかは、良く検査されていません。理由は、桁が足らないとどうなるかとか、エラー処理がされていないからです。

'//標準モジュール
Sub DelMidleChars()
'1234567890   → 123490
'abcdefghijk   → abcdijk

Dim RegEx As Object
Dim c As Variant
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
.Global = True: .IgnoreCase = False
.Pattern = "^(.{4})(.{4})(.+)" 'スペース等は入れないでください。
 For Each c In Selection 'マウスの選択範囲
  If .test(c.Value) Then
   c.Value = .Replace(c.Value, "$1$3")
  End If
 Next c
End With
End Sub
'//
Sub EnterSpace()
'123456789 → 12345 6789
'987654321 → 98765 4321

Dim RegEx As Object
Dim c As Variant
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
.Global = True: .IgnoreCase = False
.Pattern = "^(.{5})(.+)" 'スペース等は入れないでください。
 For Each c In Selection 'マウスの選択範囲
  If .test(c.Value) Then
   c.Value = .Replace(c.Value, "$1" & Space(7) & "$2")
  End If
 Next c
End With
End Sub
    • good
    • 0

VBAでやりたいって事はファイル数が多いからですか?



そうでないならテキストエディタで正規表現使用した方が楽ではないかな?
VBA自体に開いているテキストファイルの編集機能はない(と思う)ので、開いて読み込んで別名で書き出してと面倒だと思いますよ。
最近のWordは触ってないですけどWordでは通常の置換で正規表現は無理なのかな?
少なくともWordなら開いているテキストファイルの編集と上書き保存は可能でしょうけど。
    • good
    • 0

正規表現を勉強してみては。


https://excel-ubara.com/excelvba4/EXCEL232.html
http://excel-mania.com/vba/regexp2.html
http://xvideos.hatenablog.com/entry/vba_regex_ex …

削除する例
pattern = "^(.{4}).{4}(.*)"
Replace(対象文字列, $1$2)

空白を入れる例
pattern = "^(.{5})(.*)"
Replace(対象文字列, $1 $2)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!