アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えてください。
現在、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

ファイルを開かずに行削除をできるものなのでしょうか。
ご存知の方がいれば教えてください。

よろしくお願いいたします。

A 回答 (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() の関数は必要であれば補足します。
    • good
    • 0
この回答へのお礼

さっそくのご回答、ありがとうございます。
上記の方法ですが、すごいの一言でした。
一度ためしてみます。

ただ、ファイル数が大体80個、1つのファイルサイズが5Mほどあり、
毎回配列に読むと、エクセルファイルを開くのと同様、時間がかかってしまうのではとも思います。

できれば、純粋にファイルを開かずに、該当ファイルを直接編集と言う方法があれば、ぜひご教授ください。

よろしくお願いいたします。

お礼日時:2008/01/21 14:35

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

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