|
アドバイスありがとうございます。
いろいろ試してみました。
そこで2点質問があります。
1、
CSVは下記のように
日付、時間、種別(1:出勤、2:退勤)、個人IDです。
20041201,0806,1,11013015
20041201,1730,2,11013015
これが並び替えで
20041201,11013015,0806,1730
になります。
しかし、出勤時間が存在せず、退勤時間のみある場合
20041201,0806,1,11013015
20041201,1730,2,11013015
20041201,1730,2,11013016
並び替え後
20041201,11013015,0806,1730 になります。
ID:11013016の退勤時間は消滅してしまいます。
これが理解できません。
何故でしょうか?
2、
日付順に並べようと思い
並び替えのところを Key1:=Range("A1") にしました。
そうするとD列:退勤時間が同じ日付に対し1件しか表示しなくなります。
何故でしょうか?
Sub 勤怠2()
Const cnsTITLE = "テキストファイル読み込み処理"
Const cnsFILTER = "全てのファイル (*.*),*.*"
Dim xlAPP As Application ' Applicationオブジェクト
Dim intFF As Integer ' FreeFile値
Dim strFILENAME As String ' OPENするファイル名(フルパス)
Dim X(1 To 4) As Variant ' 読み込んだレコード内容
Dim GYO As Long ' 収容するセルの行
Dim lngREC As Long ' レコード件数カウンタ
Set xlAPP = Application
xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _
Title:=cnsTITLE)
If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub
intFF = FreeFile
Open strFILENAME For Input As #intFF
GYO = 1
Do Until EOF(intFF)
lngREC = lngREC + 1
xlAPP.StatusBar = "読み込み中です....(" & lngREC & "レコード目)"
Input #intFF, X(1), X(2), X(3), X(4)
GYO = GYO + 1
Cells(GYO, 1) = X(1) '第1項目をB1セルへ
Cells(GYO, X(3) + 2) = Format(X(2), "00:00") '第2項目をB3 or B4セルへ
Cells(GYO, 2) = X(4) '第4項目をB2セルへ
Loop
' 指定ファイルをCLOSE
Close #intFF
xlAPP.StatusBar = False
' 終了の表示
Range("A1:D1").Value = Array("日付", "個人ID", "出勤時間", "退勤時間")
MsgBox "ファイル読み込みが完了しました。" & vbCr & _
"レコード件数=" & lngREC & "件", vbInformation, cnsTITLE
-> Range("A1").CurrentRegion.Sort Key1:=Range("B1"), Header:=xlGuess
Range("D2").Delete Shift:=xlUp
For lngCnt = Cells(Cells.Rows.Count, 1).End(xlUp).Row To 2 Step -1
Cells(lngCnt, 1).Activate
If ActiveCell.Offset(0, 2).Value = "" Then
ActiveCell.EntireRow.Delete Shift:=xlUp
End If
Next
End Sub
|
|