Option Explicit
Private Sub Form_Load()
Command1.Caption = "解析"
Text1.Text = "ファイルをドラッグしてください"
Text2.Text = "解析結果"
'Text1にファイルをドラッグできるようにする
Text1.OLEDropMode = vbOLEDropManual
End Sub
'ドラッグされたファイル名を表示する
Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = Data.Files(1)
End Sub
Private Sub Command1_Click()
Dim filename As String
Dim fileNum As Integer
Dim buf As String
Dim ar As Variant
Text2.Text = ""
' デザイン時にはドラッグが動かないためデバッグの為にファイルを直接指定する必要がある
' Text1.Text = "C:\Users\test\Desktop\test.csv"
filename = Text1.Text
fileNum = FreeFile()
Open filename For Input As #fileNum
'csvファイルを1行毎に読み込み
Do Until EOF(fileNum)
Line Input #fileNum, buf
ar = Split(buf, ",")
'区切り文字 , で切り出されて、ar(0)〜に値が入ってくる
'この中で解析してtext2に結果を出力
Loop
Close #fileNum
End Sub
これで、アプリのひな型ができました。
コードを改造しまくって解析に利用します。
解析では、時間の "00:00:00" の ":" を削除してLong値として処理したい場合には。
Dim time_pos As Long
time_pos = CLng(Replace(ar(1), ":", ""))
このようにすると大小関係の比較しかできないですが値に変換する事ができます。
Option Explicit
Private Sub Form_Load()
Command1.Caption = "解析"
Text1.Text = "ファイルをドラッグしてください"
Text2.Text = "解析結果"
'Text1にファイルをドラッグできるようにする
Text1.OLEDropMode = vbOLEDropManual
End Sub
'ドラッグされたファイル名を表示する
Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = ""
Dim i As Long
For i = 1 To Data.Files.Count
Text1.Text = Text1.Text + Data.Files(i) + vbCrLf
Next i
End Sub
Private Sub Command1_Click()
Dim i As Long
Dim fileNum As Integer
Dim buf As String
Dim ar As Variant
Dim FileNameAr As Variant
Text2.Text = ""
' デザイン時にはドラッグが動かないためデバッグの為にファイルを直接指定する必要がある
' Text1.Text = "C:\Users\test\Desktop\test.csv"
FileNameAr = Split(Text1.Text + vbCrLf, vbCrLf)
For i = LBound(FileNameAr) To UBound(FileNameAr)
If FileNameAr(i) <> "" And FileNameAr(i) <> vbNull Then
fileNum = FreeFile()
On Error GoTo FileOpenErr
Open FileNameAr(i) For Input As #fileNum
On Error GoTo 0
'csvファイルを1行毎に読み込み
Do Until EOF(fileNum)
Line Input #fileNum, buf
ar = Split(buf, ",")
'区切り文字 , で切り出されて、ar(0)〜に値が入ってくる
'この中で解析してtext2に結果を出力
Loop
Close #fileNum
' Text2.Text = Text2.Text + FileNameAr(i) + vbCrLf
End If
Next i
Exit Sub
FileOpenErr:
MsgBox CStr(i + 1) + " 行目のファイルが開けません" + vbCrLf + """" + FileNameAr(i) + """"
End Sub
Option Explicit
Private Sub Form_Load()
Command1.Caption = "解析"
Text1.Text = "ファイルをドラッグしてください"
Text2.Text = "解析結果"
'Text1にファイルをドラッグできるようにする
Text1.OLEDropMode = vbOLEDropManual
End Sub
'ドラッグされたファイル名を表示する
Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = ""
Dim i As Long
For i = 1 To Data.Files.Count
Text1.Text = Text1.Text + Data.Files(i) + vbCrLf
Next i
End Sub
Private Sub Command1_Click()
Dim i As Long
Dim fileNum As Integer
Dim buf As String
Dim ar As Variant
Dim FileNameAr As Variant
Dim flag1, flag2, flag3, repetFlag As Integer
flag1 = 0
flag2 = 0
flag3 = 0
Text2.Text = ""
' デザイン時にはドラッグが動かないためデバッグの為にファイルを直接指定する必要がある
' Text1.Text = "C:\Users\test\Desktop\test.csv"
FileNameAr = Split(Text1.Text + vbCrLf, vbCrLf)
For i = LBound(FileNameAr) To UBound(FileNameAr)
If FileNameAr(i) <> "" And FileNameAr(i) <> vbNull Then
fileNum = FreeFile()
On Error GoTo FileOpenErr
Open FileNameAr(i) For Input As #fileNum
On Error GoTo 0
Text2.Text = Text2.Text + Dir(FileNameAr(i)) + vbCrLf
'csvファイルを1行毎に読み込み
Do Until EOF(fileNum)
Line Input #fileNum, buf
ar = Split(buf, ",")
'区切り文字 , で切り出されて、ar(0)〜に値が入ってくる
'この中で解析してtext2に結果を出力
Dim H As Long
H = CLng(Replace(ar(1), ":", ""))
flag1 = CInt(ar(4)) '通常照明
flag2 = CInt(ar(2)) 'ついたら非常モード 0:点灯 1:消灯
' flag3 = 0 消灯時まで点灯していたら1
' repetFlag = 0 繰り返しを消すためのフラグ
'タイマーでの消灯直前まで点灯状態を取得する
If H >= CLng("100000") And H <= CLng("100200") Then
flag3 = CInt(ar(4)) '通常照明
ElseIf H >= CLng("150000") And H <= CLng("150200") Then
flag3 = CInt(ar(4)) '通常照明
ElseIf H >= CLng("170000") And H <= CLng("170200") Then
flag3 = CInt(ar(4)) '通常照明
End If
If flag3 = 0 Then 'タイマーでの消灯直前まで点灯していた場合
If H >= CLng("100210") And H <= CLng("100950") Then '10時02分10秒から10時9分59秒
If repetFlag = 0 And flag2 = 0 Then
Text2.Text = Text2.Text + ar(1) + " 非常モード検出" + ",,0.66" + vbCrLf
ElseIf repetFlag = 0 And flag1 = 1 Then
Text2.Text = Text2.Text + ar(1) + ",,1" + vbCrLf
End If
repetFlag = 1
ElseIf H >= CLng("150210") And H <= CLng("150950") Then '15時02分10秒から15時9分50秒
If repetFlag = 0 And flag2 = 0 Then
Text2.Text = Text2.Text + ar(1) + " 非常モード検出" + ",,0.66" + vbCrLf
ElseIf repetFlag = 0 And flag1 = 1 Then
Text2.Text = Text2.Text + ar(1) + ",,1" + vbCrLf
End If
repetFlag = 1
ElseIf H >= CLng("170210") And H <= CLng("170950") Then '17時02分10秒から17時9分50秒
If repetFlag = 0 And flag2 = 0 Then
Text2.Text = Text2.Text + ar(1) + " 非常モード検出" + ",,0.66" + vbCrLf
ElseIf repetFlag = 0 And flag1 = 1 Then
Text2.Text = Text2.Text + ar(1) + ",,1" + vbCrLf
End If
repetFlag = 1
Else
repetFlag = 0
End If
End If
Loop
Close #fileNum
' Text2.Text = Text2.Text + FileNameAr(i) + vbCrLf
End If
Next i
Text2.Text = Text2.Text + ",,,=SUM(C:C),=D:D*8,分,=E:E/60,時間,=E:E*2.214,円(1KW/H=20円)," + vbCrLf
Exit Sub
FileOpenErr:
MsgBox CStr(i + 1) + " 行目のファイルが開けません" + vbCrLf + """" + FileNameAr(i) + """"
End Sub