
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でCSVの1行目だけを書き換える方法
Excel(エクセル)
-
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法
Visual Basic(VBA)
-
-
4
全CSVファイルに一行だけ追加したいのですが
PowerPoint(パワーポイント)
-
5
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
6
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
7
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
8
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
9
CSVファイルの特定行の削除
Visual Basic(VBA)
-
10
CSVファイルの指定列だけを読み込んでEXCELに表示したい
Excel(エクセル)
-
11
ACCESS側からEXCELの書式を設定するには?
Visual Basic(VBA)
-
12
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
13
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
14
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
15
Accessのテーブルからcsv出力する際に一部のフィールドを除いて出力したい
Access(アクセス)
-
16
ExcelVBAで今開いているユーザ情報を取得できますか?
Visual Basic(VBA)
-
17
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
18
DATE型変数を初期化する方法
Visual Basic(VBA)
-
19
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
20
Access 1レコードずつcsvで出力したい
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA コードが同じでも...
-
MATLAB グローバル変数の宣言
-
openした後、closeしないでプロ...
-
Perlの質問:行と列を入れ替え...
-
VBAで巨大なファイルの途中から...
-
Perlの変数に文字数制限(容量...
-
ReadLineでの読み出し行を指定する
-
VBAでCSVファイルを途中行まで...
-
【VBA】複数のエクセルファイル...
-
VBAでCSVファイルの特定行を書...
-
重複するデータを抽出できる秀...
-
1行がやたら長いテキストをバッ...
-
2次元の配列にデータを格納したい
-
drtファイルはどうしたら開...
-
C++でのテキストファイル読み込...
-
【エクセル】改行無しテキスト...
-
pandasでまとめてインデックス...
-
Perl の「stringify」の意味に...
-
fopenでディレクトリ内の全ファ...
-
今、「Python 3.8 32-bit」を使っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA コードが同じでも...
-
VBAでCSVファイルを途中行まで...
-
MATLAB グローバル変数の宣言
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルの特定行を書...
-
VBAで巨大なファイルの途中から...
-
openした後、closeしないでプロ...
-
ReadLineでの読み出し行を指定する
-
VBScriptでファイル保存先のデ...
-
JavaでCSVファイルを高速に読む...
-
perlにて2つのファイル比較
-
CSVが可変長の場合の検索方法
-
拡張子 ”log” と ” dat” の違い
-
Perlの変数に文字数制限(容量...
-
合致する番号のデータを抽出す...
-
C言語でのファイルのデータ更...
-
perlで、後ろの行を読んで、前...
-
Perlを改造してエラーチェック...
-
csvファイル改行コードの置換に...
-
perlで容量の大きいCSVファイル...
おすすめ情報