14歳の自分に衝撃の事実を告げてください

VBAでOpenステートメントで開いたCSVファイルの特定行を削除する方法を探しています。
Accessのように、行指定.Deleteみたいな動作はないんでしょうか?

【例】
削除前 (テキストファイルで開くとこういう状態)
 1,1,1,1,1
 2,2,2,2,2
 3,3,3,3,3 ←3行目だけ削除したい
 4,4,4,4,4
 5,5,5,5,5

削除後
 1,1,1,1,1
 2,2,2,2,2
 4,4,4,4,4 ←3行目が削除されている
 5,5,5,5,5


探してみたのですが、探し方が悪いようで
・ブックで開いてでの操作
・削除対象行以外を他のファイルにコピーした擬似削除
しか見つけられませんでした。
上記の方法以外で何か良い方法があればご教授していただきたく思います。

ファイルは【例】の様な少数行のものではなく、ブックでは表示しきれない行数&行削除→削除されたファイルの確定→行削除を繰り返すことを想定しています。

A 回答 (2件)

郵便番号CSV の全国版(123,000行)で、100,000行目の削除も、すんなりとこなしましたが、連続して削除するのは試していません。


何か大きな凡ミスしていないとよいのですが。

Sub TextLine_Delete()
 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.RemoveAt (99999) '100,000行目削除(0から始まります)

 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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ArrayListにデータを全て1行ずつ入れた状態でArrayListからの削除にする、ということですね。
今回はありがとうございました。

お礼日時:2016/08/27 21:53

open はそこまでの機能はありません。


時間を稼ぎたいのならば、削除する場所をどこかに覚えておいて、最後にまとめて削除するところを飛ばしてコピーするのが良いと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
「一致した行は次の照らし合わせからは外したいので削除したい。」
という願いでの削除動作なので、今回ご回答いただきました動作では望むものになりません。
せっかくご回答いただきましたが申し訳ございません。

お礼日時:2016/08/27 21:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A