【VBA】テキストファイルを指定した行だけ書き換える方法!Ver.2編集前データ名として保存

この記事では、エクセルVBAを使ってテキストファイルの指定した行を任意の内容に書き換える方法をご紹介していきます。

 

同じような内容を2回にわたってご紹介していきます。

第2回目の今回は、編集後のファイル名を編集前と同じファイル名で保存する方法をご紹介していきます。

※以下の第1回目では編集前後で別の名前として保存する方法をご紹介します。

【VBA】テキストファイルを指定した行だけ書き換える方法!Ver.1編集前データもそのまま

 

業務中によくテキストファイルの書き換え作業を行う方にとって、非常に役立つスキルだと思います。

 

それではさっそく解説に入っていきましょう!

スポンサーリンク

やりたいことの事前説明

本格的な説明に入る前に、まずはこの記事ではどんなことを行っていくのかを簡単に説明しておきましょう。

 

今回は以下のように、あるテキストファイルの指定した行を任意の内容に自動で書き換える方法をご紹介していきます。

(左が変更前、右が変更後。3行目を書き換えています。)

このとき、編集前後でデータのファイル名は同じになるようにしています。

すなわち編集前のデータは削除されてしまいます。

 

この記事で紹介するエクセルマクロを作っておけば、わざわざテキストファイルをダブルクリックで開いて、保存して、閉じて、といった面倒な作業を自動で実行できるようになります。

 

大量に一括作業する際などに非常に便利です。

 

あなたのやりたい作業と一致していれば、ぜひ続きをご覧ください。

 

スポンサーリンク

VBA実行環境を整える

今回はエクセルVBAを用いてテキストファイルの書き換えを実行していきます。

エクセルVBAを使ったことがない方はまずは以下の記事を参考にVBAの実行環境を整えておきましょう。

【初心者用】エクセルマクロ(VBA)の始め方を詳細解説

 

スポンサーリンク

エクセルシートを整える

VBA実行環境が整った方は、まずは情報を入力するためのエクセルシートを整えておきましょう。

今回は以下の絵ように、VBA上へ情報を渡すための欄を設定しました。

ここで設定している内容は以下の通りです。

〇A2セル:これから編集するファイルの置き場所&ファイル名を指定

〇A4セル:上から何行目を編集するか指定する

〇A6セル:編集後にどのような内容を記述するか

※以降で紹介するVBAコードは、この通りにエクセルファイルを記述していなければ動作しまんので、自分なりに書き換える自信がない人は、まずはこの通りに設定してみましょう。

 

スポンサーリンク

テキスト書き換えのVBAコードを記述

それでは事前準備はこのくらいにして、実際にVBAのコードを記述していきましょう。

 

いきなりですが、以下が冒頭に紹介した作業を実行してくれるVBAコードです。

Sub text_edit()
    '変数の型宣言
    Dim file_path As String
    Dim row_num As Integer
    Dim after_data As Variant
    Dim endrow As Integer
    '情報収集
    file_path = Cells(2, 1)
    row_num = Cells(4, 1)
    after_data = Cells(6, 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
    endrow = Cells(Rows.Count, 1).End(xlUp).Row
    'データを変数化
    data_array = Range(Cells(1, 1), Cells(endrow, 1))
    'ファイルを閉じる
    Application.DisplayAlerts = False
    ActiveWindow.Close
    'テキスト出力
    Open file_path For Output As #1
    i = 1
    For i = 1 To endrow
        Print #1, data_array(i, 1)
    Next
    Close #1
End Sub

 

結構長いですが、やっていることは

①A2セルのファイルを読み込む

②A4セルの行をA6セルの内容に書き換える

③読み込んだファイルと同じ名前で保存する

ということをやっているだけです。

 

スポンサーリンク

VBA実行してみる

さきほどのコードを実行するまえに、まずは実行前の状況を確認しておきましょう。

 

実行前のフォルダは以下のような状態です。

このsample.txtのフルパスが先ほどのエクセルシートのA2セルに記述されています。

(test.xlsmは先ほどのコードが記述されているファイルですね。)

なお、これから編集するテキストファイルの中身は以下の通りです。

実行前の状況が確認できたところで、いよいよ実行です。

 

いざ、実行!!!

 

実行すると先ほどのフォルダは以下のようになにも変わっていません。

編集後のテキストファイルの中身を確認してみましょう。

 

編集前後の内容を比較してみましょう。

(左が変更前、右が変更後。)

A4セルで指定した3行目だけが、A6セルに指定した内容に書き換わっていますね。

 

というわけで、問題なくテキストファイルが書き換えられていることを確認することができましたね。

 

また、表形式のテキストファイルに対して、行数、列数を指定して書き換えるなんてゆう作業はもう少し工夫しないといけません。

興味がある方は以下の記事をご覧ください。

【VBA】テキストファイルの読み込み⇒編集⇒保存までを一括解説!

 

スポンサーリンク

おわりに

というわけで今回はテキストファイルの指定行だけを書き換える方法をご紹介しました。

今回は編集前後で保存場所、ファイル名は同じになるように実行しましたが、編集前のデータも残したい場合などは前回の以下の記事を参考にしてください。

【VBA】テキストファイルを指定した行だけ書き換える方法!Ver.1編集前データもそのまま

 

どちらの内容もテキストデータを頻繁に扱う人にとっては非常に役立つスキルだと思います。

ぜひ業務の自動化にご活用ください。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。

⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました