人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

質問です。
c:\test\の中に拡張子txtのファイルが複数あります。
このファイル中の1行目(項目だけ)を削除するマクロをおねがいします。

●質問者: inosisi
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kodairabase
●90ポイント ベストアンサー
Option Explicit

Sub delTopLineSub(path As String, fname As String)
 Dim buf As String
 Dim fname1 As String, fname2 As String
 fname1 = path & fname
 fname2 = path & fname & ".$$$"
 Open fname1 For Input As #1
 Open fname2 For Output As #2
 Line Input #1, buf  '1行目読み飛ばし
 Do Until EOF(1)
 Line Input #1, buf
 Print #2, buf
 Loop
 Close #1
 Close #2
 Kill fname1  'オリジナル・ファイル削除
 Name fname2 As fname1
End Sub

Sub delTopLine(path As String, ext As String)
 Dim fname As String
 fname = Dir(path & "*." & ext, vbNormal)
 Do While fname <> ""
 Call delTopLineSub(path, fname)
 fname = Dir()
 Loop
End Sub


Sub main()
 Call delTopLine("C:\test\", "txt")
End Sub

inosisiさんのコメント
ありがとうございます。 あまりの速さで処理するので大丈夫かなと思って確認しましたら ちゃんと複数ファイル今回30個できていました。 ありがとうございました。また質問がありましたらよろしくお願いします。

2 ● きゃづみぃ
●10ポイント
Public w As Workbook
Public 読み込み数 As Long
Public カラム数 As Integer

Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。
p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "txt")

End Sub


Sub jikkou(p As String, s As String)

Dim bk As Workbook
Dim gg As Long
Application.DisplayAlerts = False

Dim fdb() As String
 
a = 1
f = Dir(p & "*." & s, vbNormal)
Do While f <> ""
 ReDim Preserve fdb(a)
 fdb(a - 1) = f
 a = a + 1
 f = Dir
Loop


For aaa = 0 To a - 2
 f = fdb(aaa)
 f1 = Left(f, Len(f) - 4)

 csvImp (p & f)
 w.Sheets(1).Rows(1).Delete Shift:=xlUp
 読み込み数 = 読み込み数 - 1
 Call WRITE_CSVFile(p & f & "wrk")
 w.Close
 Kill p & f
 Name p & f & "wrk" As p & f

Next aaa

Application.DisplayAlerts = True

End Sub


Sub csvImp(csFName As String)

Const csDelimiter As String = ","

Dim FNo As Integer

Dim wsObj As Worksheet

Dim strGet As String

Dim lRowCnt As Long

Dim i As Long

FNo = FreeFile

If Dir(csFName) <> "" Then

 Open csFName For Input As #FNo
 Set w = Workbooks.Open(Filename:=csFName, UpdateLinks:=False, ReadOnly:=False)
 
 Set wsObj = Workbooks(w.Name).Sheets(1)
 lRowCnt = 1
 カラム数 = 0
 Do Until EOF(FNo)
 
 Line Input #FNo, strGet
 
 For i = LBound(Split(strGet, csDelimiter)) To UBound(Split(strGet, csDelimiter))
 
 If IsNumeric(Split(strGet, csDelimiter)(i)) = True And Left(Split(strGet, csDelimiter)(i), 1) = "0" Then
 
 wsObj.Cells(lRowCnt, i + 1).NumberFormatLocal = "@"
 
 End If
 
 wsObj.Cells(lRowCnt, i + 1) = Split(strGet, csDelimiter)(i)
 
 Next i
 
 lRowCnt = lRowCnt + 1
 If カラム数 < i Then カラム数 = i
 Loop
 
 
 Close #FNo
読み込み数 = lRowCnt - 1
End If

End Sub

Sub WRITE_CSVFile(pa As String)
 Dim GYO As Long  ' 収容するセルの行
 Dim GYOMAX As Long  ' データが収容された最終行
 Dim strREC As String
 Dim FNo As Integer
 
 Dim lRowCnt As Long
 
 FNo = FreeFile
 
  ' 指定ファイルをOPEN(出力モード)
 Open pa For Output As #FNo

  ' 最終行の取得
 With w.Sheets(1)
 GYO = 1
  ' 最終行まで繰り返す
 Do Until GYO > 読み込み数
  ' レコードを出力(REC編集処理より受取る)
 strREC = .Cells(GYO, 1).Value
 For COL = 2 To カラム数
 strREC = strREC & "," & .Cells(GYO, COL).Value
 Next COL
 
 Print #FNo, strREC
  ' 行を加算
 GYO = GYO + 1
 Loop
 End With
 
 Close #FNo
 

End Sub

inosisiさんのコメント
ありがとうございます 1行目は削除されますが最終行が空白行で残ります、これは削除できますか? aaaaaa ↓ 空白行

きゃづみぃさんのコメント
修正しました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ