VBAでCSVファイルの特定行をAccessのUPDATEのように、特定の行のみに対して上書き動作出来ないか方法を探しています。
【例】
ファイル:aaa.csv
データ:元
1,1,1,1,1
2,2,2,2,2
3,3,3,3,3 ←この行に Dim a1 as string: a1="a,a,a,a,a"のデータで上書きしたい
4,4,4,4,4
5,5,5,5,5
データ:上書き後
1,1,1,1,1
2,2,2,2,2
a,a,a,a,a
4,4,4,4,4
5,5,5,5,5
上記のような動作を、
・ブックで開いてシートを使用する
・もうひとつのファイルに対象行以外と新たなデータをコピーしての擬似上書き
を使用せずに実行する方法はあるのでしょうか?
No.3ベストアンサー
- 回答日時:
前回の削除側で試しましたので、こちらは検証しておりません。
#1さんのご指摘で思い出しましたが、そういえば、ランダムアクセスがありましたね。このようなファイルにできるのか、もう遠い昔になってしまいました。CSVというのは、コンピュータの最も古典的なデータで、それを処理するために、いろんな方法が編み出されたそうです。
それから、Excelは、Accessを持っていなくても、Jet がついていますので、Excel自身でデータベースを備えているのですが、どうも忘れられた存在になってしまいました。もう少し、研究する価値はありそうです。
Sub TextLine_Replace()
Dim Fname As String
Dim FNo As Integer
Dim TextLine As String
Dim i As Long
Dim ar1 As Object
Set ar1 = CreateObject("System.Collections.ArrayList")
Fname = "Test1.csv"
FNo = FreeFile()
Open Fname For Input As #FNo
Do While Not EOF(FNo)
Line Input #FNo, TextLine
ar1.Add TextLine
Loop
Close #FNo
ar1(2) = "a,a,a,a,a" '0から始まりますから、行は1引きます
FNo = FreeFile()
Open Fname For Output As #FNo
For i = 0 To ar1.Count - 1
Print #FNo, ar1(i)
Next i
Close #FNo
MsgBox "Finish!"
End Sub
No.2
- 回答日時:
CSVファイルは、原稿用紙にビッチリと文字が詰ったような状態です。
その置き換え前後でバイト数が同じならOpenのBinaryを使って
書き換える場所を探す→上書きする
でできなくは無いです。
これは「原稿用紙の該当箇所を消しゴムで消して書き直す」ようなものです。
ですが、置き換え前後でバイト数が変わるなら、この方法は使えません。
原稿用紙を5マス消しゴムかけて、4文字書き込めば、1マス余ります。
これを埋めるには、1文字ずつ後の文字を書いては消し、を最後まで繰り返さなければなりません。
原稿用紙を5マス消しゴムかけて、6文字書き込もうとしても、1マス足りません。
これを空けるには、1文字ずつ後にずらして1マス空けるしかありません。
こんな面倒なことするくらいなら、新しい原稿用紙に書く方が楽です。
(人間がやるとそれも面倒かもしれませんが、コンピュータは面倒くさがらずにやってくれます)
> ・ブックで開いてシートを使用する
> ・もうひとつのファイルに対象行以外と新たなデータをコピーしての擬似上書き
この中間として
・文字列配列に全て読み込み→変更→ファイルに上書き
という方法があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
VBAでCSVの1行目だけを書き換える方法
Excel(エクセル)
-
CSVファイルの特定行の削除
Visual Basic(VBA)
-
-
4
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
5
VBAでの行削除について
その他(プログラミング・Web制作)
-
6
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
7
テキストファイルの特定行の削除方法
Visual Basic(VBA)
-
8
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
9
EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法
Visual Basic(VBA)
-
10
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
11
ReadLineでの読み出し行を指定する
Visual Basic(VBA)
-
12
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
13
【Access】クエリで抽出したデータをCSV形式でエクスポートできますか?
Access(アクセス)
-
14
エクセルでエラーが出て困っています。
Excel(エクセル)
-
15
CSVデータの文字列置換
その他(プログラミング・Web制作)
-
16
EXCEL(VBA) 末尾の改行のみ削除したい
Excel(エクセル)
-
17
vbsで最後の行を削除する
その他(プログラミング・Web制作)
-
18
テキストファイルを直接置換する方法
Visual Basic(VBA)
-
19
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
20
マクロから出力されるcsvのダブルコーテーションをなくしたい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ReadLineでの読み出し行を指定する
-
VBAでCSVファイルを途中行まで...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
Perl Vlookupみたいに
-
エクセルマクロについて CSVフ...
-
perl で googleAPIを呼び出す...
-
CSVが可変長の場合の検索方法
-
VBAで巨大なファイルの途中から...
-
alarmのタイムアウト後の処理で...
-
VBAでCSVファイルの特定行を書...
-
スレッドAで信号を送り、返答が...
-
ADOによるCSVファイルからのデ...
-
CSVファイルの内容を編集する方...
-
画像をバイナリデータに変換す...
-
awkスクリプトでダブルクォーテ...
-
window.open でのファイル指定方法
-
ListBoxのデータを高速でファイ...
-
C言語で特定の行を抽出する方法...
-
パスから最後のディレクトリだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
-
openした後、closeしないでプロ...
-
エクセルVBA コードが同じでも...
-
ReadLineでの読み出し行を指定する
-
JavaでCSVファイルを高速に読む...
-
perlで、後ろの行を読んで、前...
-
Perlの変数に文字数制限(容量...
-
エクセルVBAでCSVファイ...
-
perlにて2つのファイル比較
-
MATLAB グローバル変数の宣言
-
C#でCSVファイルを逐一更新したい
-
CSVが可変長の場合の検索方法
-
他のサーバーにあるファイルの...
-
動画像から静止画を取り出すには
-
perlで容量の大きいCSVファイル...
-
外部サーバーにあるファイルを...
-
1ファイルずつ読み込みたい
おすすめ情報