0

Excelシートにデータを記録しています。このデータは実際にはタイムスタンプです。

記録されたタイムスタンプの最初の画像の値を次の 2 番目の図のようにプロットしたいと思います。

記録されたタイムスタンプ

この形にしたい



4

1 に答える 1

2

質問とコメントの両方に答えて、時間内の発生のヒストグラムを作成したいと考えています。

必要なビンのサイズを定義する必要があります。ビンのサイズが 5 分で、24 時間のヒストグラムをプロットしたいとします。

手作業で行う

次のように小さなテーブルを作成します。

         A      |  B                |  C
  -----------------------------------------------------
1 |    start    | end               | event_count
2 |    00:00:00 | =A2 + time(0,5,0) | =countIfS(dataSheet!G:G,">=" & A2,dataSheet!G:G,"<" & B2)
3 |    =B2      | =A3 + time(0,5,0) | =countIfS(dataSheet!G:G,">=" & A3,dataSheet!G:G,"<" & B3)

行 3 の数式を必要な回数だけコピーします。次に、棒グラフを作成します。

B2セル、B3、...に記述された数式の値は、指定しているビンのサイズであることに注意してください。

コードでそれを行う

これはプログラミング Q&A サイトであるため、プログラミング ソリューションが期待されます。

public sub createMyTimeHistogram(inputRange as Range, binSize as integer)
' Parameters:
'    inputRange: The range that stores the data
'    binSize: The size of the bin (in minutes)

    Dim t as Date
    Dim n as Integer
    Dim outputSheet as String, outputRow as long


    t = timeserial(0,0,0)
    outputSheet = "MyOutputSheet" ' I'll assume this worksheet exists in the current workbook,
                                  ' and it is empty
    With thisWorkbook.Sheets(outputSheet)
        .cells(1,1).value = "Bin"
        .cells(1,2).value = "Count"
    End With
    outputRow = 2
    while t < 1
        n = Excel.WorksheetFunction.CountIfS(inputRange, ">=" & CDbl(t), inputRange, "<" & CDbl(t + timeserial(0,binSize,0)))
        With thisWorkbook.Sheets(outputSheet)
            .cells(outputRow, 1).Value = t
            .cells(outputRow, 2).Value = n
        End With
        t + timeserial(0,binSize,0)
        outputRow = outputRow + 1
    wend
end sub
于 2013-08-20T00:12:23.800 に答える