Private Sub CommandButton1_Click() Call ThisWorkbook.データ読込 End Sub Private Sub ToggleButton1_Click() If ToggleButton1.Value = True Then ToggleButton1.Caption = "監視停止" Call ThisWorkbook.監視開始 Else ToggleButton1.Caption = "監視開始" End If End Sub Private Sub CommandButton2_Click() Call ThisWorkbook.クリア End Sub Const INTERVAL_ROW = 35 Const INTERVAL_COLUMN = 3 Const VMSTATLOG_ROW = 21 Const VMSTATLOG_COLUMN = 3 Const DEFAULT_INTERVAL_MIN = 5 Dim Table As Variant Private Sub Workbook_Open() Sheets("使用方法").Select Sheets("使用方法").ToggleButton1.Value = False Sheets("使用方法").ToggleButton1.Caption = "監視開始" Set Table = CreateObject("Scripting.Dictionary") End Sub Private Sub Workbook_Close() Table.RemoveAll End Sub Sub 監視開始() Dim TimeString As String Application.ScreenUpdating = False ' ' 監視間隔値の取得 ' Interval_min = Sheets("使用方法").Cells(INTERVAL_ROW, INTERVAL_COLUMN) If Interval_min <= 0 Or 60 <= Interval_min Then Interval_min = DEFAULT_INTERVAL_MIN End If TimeString = "00:" & Right$("00" & Mid$(Str(Interval_min), 2, Len(Str(Interval_min)) - 1), 2) & ":00" ' ' 次の監視をスケジュール ' StartTime = Now() + TimeValue(TimeString) Application.OnTime StartTime, "ThisWorkbook.監視開始" ' ' 監視実行 ' If Sheets("使用方法").ToggleButton1.Value = True Then Call ThisWorkbook.データ読込 End If End Sub Sub データ読込() Filename = Sheets("使用方法").Cells(VMSTATLOG_ROW, VMSTATLOG_COLUMN) Dim intRow As Integer Dim intFileNo As Integer Dim buff As String Dim strArray() As String Dim Flag As Boolean ' 既に日付がある行は True としてスキップ intFileNo = FreeFile intRow = 0 Flag = False For ProcCount = 254 To 1 Step -1 If Sheets("Mem").Range("A1").Offset(0, ProcCount + 1) <> "" Then Exit For End If Next ProcCount Open Filename For Input Access Read As intFileNo Do Until EOF(intFileNo) Line Input #intFileNo, buff ' ' スペースで分割 ' strArray = Split(buff) n = UBound(strArray) ' ' 日付フォーマットの場合は日付処理 ' If Mid$(buff, 5, 1) = "/" And Mid$(buff, 8, 1) = "/" Then intRow = intRow + 1 If Sheets("Mem").Range("A1").Offset(intRow, 0) = buff Then Flag = True ProcCount = 255 Else Flag = False Sheets("Mem").Range("A1").Offset(intRow, 0) = buff Sheets("CPU").Range("A1").Offset(intRow, 0) = buff For i = 1 To 255 Sheets("Mem").Range("A1").Offset(intRow, i) = 0 Sheets("CPU").Range("A1").Offset(intRow, i) = 0 Next i End If ' ' PID のヘッダ部分は読み飛ばす ' ElseIf Mid$(buff, 1, 5) = " PID" Then ' Wall などの行は読み飛ばす ' ElseIf Left$(buff, 1) <> " " Then ' ' そうでない場合は空白区切りで pid, ppid, CPU, メモリ, プロセス名 を取り出す ' ElseIf Flag = False Then For i = 0 To n If strArray(i) <> "" Then pid = strArray(i) i = i + 1 Exit For End If Next i For i = i To n If strArray(i) <> "" Then ppid = strArray(i) i = i + 1 Exit For End If Next i For i = i To n If strArray(i) <> "" Then cpu = strArray(i) i = i + 1 Exit For End If Next i For i = i To n If strArray(i) <> "" Then memory = strArray(i) i = i + 1 Exit For End If Next i For i = i To n If strArray(i) <> "" Then process = strArray(i) i = i + 1 Exit For End If Next i For i = i To n If strArray(i) <> "" Then process = process & " " & strArray(i) End If Next i ' ' 前から順番にプロセス名が合致するかを検索 ' ' For p = 0 To ProcCount ' If Sheets("Mem").Range("A1").Offset(0, p + 1) = process Then ' Sheets("Mem").Range("A1").Offset(intRow, p + 1) = Sheets("Mem").Range("A1").Offset(intRow, p + 1) + memory ' Sheets("CPU").Range("A1").Offset(intRow, p + 1) = Sheets("CPU").Range("A1").Offset(intRow, p + 1) + cpu ' Exit For ' End If ' Next p ' If p > ProcCount Then ' Sheets("Mem").Range("A1").Offset(0, p) = process ' Sheets("CPU").Range("A1").Offset(0, p) = process ' Sheets("Mem").Range("A1").Offset(intRow, p) = memory ' Sheets("CPU").Range("A1").Offset(intRow, p) = cpu ' ProcCount = p ' End If If Table.Exists(process) Then p = Table.Item(process) Else p = Table.Count + 1 Table.Add process, p Sheets("Mem").Range("A1").Offset(0, p) = process Sheets("CPU").Range("A1").Offset(0, p) = process End If Sheets("Mem").Range("A1").Offset(intRow, p) = Sheets("Mem").Range("A1").Offset(intRow, p) + memory Sheets("CPU").Range("A1").Offset(intRow, p) = Sheets("CPU").Range("A1").Offset(intRow, p) + cpu End If Loop Close intFileNo End Sub Sub クリア() Sheets("Mem").Range("A1:IV65536").ClearContents Sheets("CPU").Range("A1:IV65536").ClearContents For Column = 1 To 255 Sheets("Mem").Range("A1").Offset(1, Column) = 0 Sheets("CPU").Range("A1").Offset(1, Column) = 0 Next Column End Sub