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も見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
VBAでCSVの1行目だけを書き換える方法
Excel(エクセル)
-
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法
Visual Basic(VBA)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
全CSVファイルに一行だけ追加したいのですが
PowerPoint(パワーポイント)
-
6
カンマ区切りのCSVファイルから"を削除したい
その他(プログラミング・Web制作)
-
7
このISAMでは、リンクテーブル・・
その他(データベース)
-
8
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
9
エクセル マクロ オートフィルの終点の指定について
Excel(エクセル)
-
10
Access インポート
Access(アクセス)
-
11
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
12
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
13
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
14
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
15
CSVファイルの特定行の削除
Visual Basic(VBA)
-
16
Access VBAで読み込んだ配列をcsvファイルにエクスポート
Access(アクセス)
-
17
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
18
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
19
AccessのDAO.ExecuteとDoCmd.RunSqlの違いについて
その他(データベース)
-
20
access vbaでCSVファイルを文字列にしてエクスポートする方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCSVファイルの特定行を書...
-
VBAでCSVファイルを途中行まで...
-
エクセルVBA コードが同じでも...
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
動画像から静止画を取り出すには
-
ReadLineでの読み出し行を指定する
-
Monster'sの改造・・・ボスモン...
-
openした後、closeしないでプロ...
-
JavaでCSVファイルを高速に読む...
-
Perlの変数に文字数制限(容量...
-
awkスクリプトでダブルクォーテ...
-
close()で例外が投げられる理由
-
window.open でのファイル指定方法
-
perlのcdについて
-
MATLABのm-fileについて
-
ディレクトリ名を取得したい
-
PerlからのCSV出力
-
バッチファイルの作り方(CSV→...
-
Firefox で file:// で始まる U...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
openした後、closeしないでプロ...
-
ReadLineでの読み出し行を指定する
-
VBAで巨大なファイルの途中から...
-
JavaでCSVファイルを高速に読む...
-
perlで、後ろの行を読んで、前...
-
perlで容量の大きいCSVファイル...
-
MATLAB グローバル変数の宣言
-
Perlの変数に文字数制限(容量...
-
VB6.0でDB接続する際に切断時の...
-
エクセルマクロについて CSVフ...
-
C言語でのファイルのデータ更...
-
データファイルをプロットする(...
-
ファイルからのデータ読み込み...
-
2つのCSVファイルをマッチング
-
csvファイル改行コードの置換に...
-
行の途中のデータを置き換えたい
おすすめ情報