この記事では、エクセルVBAを使ってテキストファイルの指定した行を任意の内容に書き換える方法をご紹介していきます。
同じような内容を2回にわたってご紹介していきます。
第1回目の今回は、テキストファイルの編集前後でファイル名を変更し、どちらのファイルも残しておくパターンでご紹介します。
※以下の第2回目では編集前後で同じファイル名として保存する方法をご紹介します。
【VBA】テキストファイルを指定した行だけ書き換える方法!Ver.2編集前データ名として保存
業務中によくテキストファイルの書き換え作業を行う方にとって、非常に役立つスキルだと思います。
それではさっそく解説に入っていきましょう!
やりたいことの事前説明
本格的な説明に入る前に、まずはこの記事ではどんなことを行っていくのかを簡単に説明しておきましょう。
今回は以下のように、あるテキストファイルの指定した行を任意の内容に自動で書き換える方法をご紹介していきます。
(左が変更前、右が変更後。3行目を書き換えています。)
この記事で紹介するエクセルマクロを作っておけば、わざわざテキストファイルをダブルクリックで開いて、保存して、閉じて、といった面倒な作業を自動で実行できるようになります。
大量に一括作業する際などに非常に便利です。
あなたのやりたい作業と一致していれば、ぜひ続きをご覧ください。
VBA実行環境を整える
今回はエクセルVBAを用いてテキストファイルの書き換えを実行していきます。
エクセルVBAを使ったことがない方はまずは以下の記事を参考にVBAの実行環境を整えておきましょう。
エクセルシートを整える
VBA実行環境が整った方は、まずは情報を入力するためのエクセルシートを整えておきましょう。
今回は以下の絵ように、VBA上へ情報を渡すための欄を設定しました。
ここで設定している内容は以下の通りです。
〇A2セル:これから編集するファイルの置き場所&ファイル名を指定
〇A4セル:上から何行目を編集するか指定する
〇A6セル:編集後にどのような内容を記述するか
〇A8セル:編集後の保存場所&ファイル名を指定
※以降で紹介するVBAコードは、この通りにエクセルファイルを記述していなければ動作しまんので、自分なりに書き換える自信がない人は、まずはこの通りに設定してみましょう。
テキスト書き換えのVBAコードを記述
それでは事前準備はこのくらいにして、実際にVBAのコードを記述していきましょう。
いきなりですが、以下が冒頭に紹介した作業を実行してくれるVBAコードです。
Sub text_edit()
'変数の型宣言
Dim file_path As String
Dim row_num As Integer
Dim after_data As Variant
Dim after_file_path As String
'情報収集
file_path = Cells(2, 1)
row_num = Cells(4, 1)
after_data = Cells(6, 1)
after_file_path = Cells(8, 1)
'テキストファイルを開く
Workbooks.OpenText Filename:=file_path _
, Origin:=932, startrow:=1, DataType:=xlDelimited, textQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=False
'データ編集
Cells(row_num, 1) = after_data
'テキスト出力
Open after_file_path For Output As #1
i = 1
Do Until Cells(i, 1) = ""
Print #1, Cells(i, 1)
i = i + 1
Loop
Close #1
'ファイルを閉じる
Application.DisplayAlerts = False
ActiveWindow.Close
End Sub
結構長いですが、やっていることは
①A2セルのファイルを読み込む
②A4セルの行をA6セルの内容に書き換える
③A8セルのファイルとして保存する
ということをやっているだけです。
VBA実行してみる
さきほどのコードを実行するまえに、まずは実行前の状況を確認しておきましょう。
実行前のフォルダは以下のような状態です。
このsample.txtのフルパスが先ほどのエクセルシートのA2セルに記述されています。
(test.xlsmは先ほどのコードが記述されているファイルですね。)
実行前の状況が確認できたところで、いよいよ実行です。
いざ、実行!!!
実行すると先ほどのフォルダは以下のような状態になりました。
さきほどのA8セル(編集後のファイルのフルパス)の内容はA2セル(編集前のファイルのフルパス)の内容からファイル名を変更しただけですので、編集前のテキストファイルと同じ場所に変更後のファイルが出力されています。
それぞれのテキストファイルの中身は以下の通りです。
(左が変更前、右が変更後。)
A4セルで指定した3行目だけが、A6セルに指定した内容に書き換わっていますね。
というわけで、問題なくテキストファイルが書き換えられていることを確認することができましたね。
なお、このコードは編集前のファイル名と編集後のファイル名を一致させるとエラーが出ます。
編集後も同じファイル名にしたい場合は、以下の記事でやり方を解説していますので御参考ください。
【VBA】テキストファイルを指定した行だけ書き換える方法!Ver.2編集前データ名として保存
また、表形式のテキストファイルに対して、行数、列数を指定して書き換えるなんてゆう作業はもう少し工夫しないといけません。
興味がある方は以下の記事をご覧ください。
【VBA】テキストファイルの読み込み⇒編集⇒保存までを一括解説!
おわりに
というわけで今回はテキストファイルの指定行だけを書き換える方法をご紹介しました。
ぜひ業務の自動化にご活用ください。
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント