• 締切済み

VBAでの行削除について

教えてください。 現在、VBAを使用して、CSVファイルの編集をしたいと考えています。 フォルダ内に数個のCSVファイルがあり、それらにすべて同じ処理(行削除など)をしたいのです。 下記のようなプログラムです。 Sub getting() Dim myPath As String Dim myFName As String Dim FCnt As Integer Dim A(500) As String MsgBox CurDir() Workbooks("自動処理.xls").Activate myPath = ActiveWorkbook.Path MsgBox myPath ChDir myPath FCut = 0 myFName = Dir("*.csv") If myFName <> "" Then FCut = FCut + 1 A(FCut) = myFName Do myFName = Dir() If myFName <> "" Then FCut = FCut + 1 A(FCut) = myFName MsgBox A(FCut) Else Exit Do End If Loop End If MsgBox "「" & myPath & "」には、" & FCut & "個のファイルがあります。" Dim i As Integer Dim seet As String Dim ws As Object Dim FullPath As String For i = 1 To 1 seet = Left(A(1), 6) FullPath = myPath & "\" & A(i) 'Workbooks.Open(FullPath).Activate Open FullPath For Append As #1 Print #1, Rows("1:1").Select Selection.Delete Shift:=xlUp Rows("2:2").Select Selection.Delete Shift:=xlUp Range("A1").Select Print #1, Range("A1").Value = "" Print #1, Range("A1").Value = "COMP_NAME" Print #1, Range("B1").Select Print #1, ActiveCell.Value; "PC_OS" Print #1, Range("C1").Select Print #1, ActiveCell.Value = "OS_SUB_VERS" Print #1, Range("D1").Select Print #1, ActiveCell.Value = "IP_ADDR" Print #1, Range("E1").Select Print #1, ActiveCell.Value = "LOCATION " Close #1 ' Workbooks(A(i)).Save ' Workbooks(A(i)).Close savechanges:=False  Next i End Sub 教えていただきたいのは、どうにかworkbook.openを使わず、ファイルを編集できるところまでいったのですが、ファイルを開かずに行を削除することができません。   >Print #1, Rows("1:1").Select >Selection.Delete Shift:=xlUp >Rows("2:2").Select >Selection.Delete Shift:=xlUp ファイルを開かずに行削除をできるものなのでしょうか。 ご存知の方がいれば教えてください。 よろしくお願いいたします。

みんなの回答

noname#140971
noname#140971
回答No.1

Private Sub CommandButton1_Click()   Dim I     As Integer   Dim N     As Integer   Dim M     As Integer   Dim strFiles() As String   Dim strDatas() As String      strFiles() = GetFileList("C:\Temp\", "*.csv")   N = UBound(strFiles()) - 1   For I = 0 To N     strDatas() = FileReadArray("C:\Temp\" & strFiles(I))     M = UBound(strDatas())     If M > 0 Then       strDatas(1) = "削除行"       FileWrite Str(I) & ".csv", Replace(Join(strDatas(), vbCrLf), "削除行" & vbCrLf, "")     End If   Next I End Sub エクセルは実際には操作したこともない門外漢ですので上述のようなアイデを提示します。 1 2 3 という3行の Test1.csv、Test2.csv、Test3.csv の2行目を削除する場合ですが・・・。 1、配列 strFiles()に対象ファイルを読み込む。 2、各ファイルの行データを配列 strDatas()に読み込む。 3、2行目が存在する場合は、2行目を"削除行"に書き換える。 4、 "削除行" + 改行コードを空値に置換して新ファイルに書き込む。 これで、首尾よく2行目は削除されます。 なお、 GetFileList()、FileReadArray()、FileWrite() の関数は必要であれば補足します。

sav_moster
質問者

お礼

さっそくのご回答、ありがとうございます。 上記の方法ですが、すごいの一言でした。 一度ためしてみます。 ただ、ファイル数が大体80個、1つのファイルサイズが5Mほどあり、 毎回配列に読むと、エクセルファイルを開くのと同様、時間がかかってしまうのではとも思います。 できれば、純粋にファイルを開かずに、該当ファイルを直接編集と言う方法があれば、ぜひご教授ください。 よろしくお願いいたします。

すると、全ての回答が全文表示されます。

専門家に質問してみよう