2

Excel で分析しなければならない大量のデータがあります (これは DB の方がはるかに簡単だと思います)。各項目には、特定のカテゴリのメンバーシップの T/F インジケーターがあり、月ごとに各カテゴリのボリュームと価格の相関関係を取得したいと考えています。私が話しているデータの量は、一度に 8 ~ 30,000 レコードです。私のオフィスでは Excel 2010 を使用しています。

サンプルデータ:

State | Cat.1 | Cat.2 | Cat.3 |    TimeStamp    | Volume | Price
 WA   |  TRUE | FALSE | FALSE | 01/31/13 12:00  | 113.1  | 35.64
 WA   |  TRUE | TRUE  | FALSE | 01/31/13 13:00  |  65.2  | 32.52
 FL   |  TRUE | FALSE | TRUE  | 01/31/13 02:00  |  78.9  | 36.37
 FL   |  TRUE | TRUE  | FALSE | 01/31/13 23:00  | 113.9  | 39.39

理想的には、State、Cat.1、Year、Month の特定の組み合わせについて Volume と Price を関連付けるピボット テーブルが必要です。

現在、次の式の計算フィールドがあります: =correl(Volume,Price) ただし、そのフィールドはすべてのシナリオで #DIV/0 を返しますが、ダブルクリックして該当するデータを表示すると、correl() を手動で実行できます。正常に動作します。

どんな助けでも大歓迎です!

4

1 に答える 1

0

あなたの質問を完全に理解しているかどうかはわかりませんが、他の列の値に基づいて相関させたいようです。したがって、ヘッダー行でオートフィルターを使用し、必要な州とカテゴリでフィルター処理できれば、表示されている値を関連付けることができると思います。タイムスタンプを含む =MONTH( ) と =YEAR( ) の 2 つの追加の列が必要になる場合があります。

以下に記述したUDFは、表示されている列のみを相関させるため、VBAエディター(Alt F11)に移動してこれをコピーし、以下の式を入力して列をフィルタリングします

=CorrelVisibleCells(F1:F100,G1:G100) 

F と G がボリュームと価格の列であると仮定します

Public Function CorrelVisibleCells(aRange1 As Range, aRange2 As Range)
Dim aCorrelRange1() 
Dim aCorrelRange2() 
Dim rc As Long
Dim clCount As Long

Application.Volatile True  'This is a volatile function as changing the filter state    without changing the cell reference requires a recalc

rc = aRange1.Rows.Count
ReDim aCorrelRange1(rc) 'Largest they could be, will crop at the end
ReDim aCorrelRange2(rc)
clCount = 0
For i = 1 To rc
    If Not aRange1.Cells(i).EntireRow.Hidden Then  ' Can't use     SpecialCells(xlCellTypeVisible) in a UDF
        aCorrelRange1(clCount) = aRange1.Cells(i).Value
        aCorrelRange2(clCount) = aRange2.Cells(i).Value
        clCount = clCount + 1
    End If
Next
ReDim Preserve aCorrelRange1(clCount - 1)
ReDim Preserve aCorrelRange2(clCount - 1)

CorrelVisibleCells = WorksheetFunction.Correl(aCorrelRange1, aCorrelRange2) 'Get Excel to do the correlation on our new arrays

End Function
于 2013-06-10T00:11:36.773 に答える