ここには 3 つの問題があります。
- あなたの最初の列はグループ識別子ではなくシーケンスです
- =MEDIANIF() はありません
- ピボットテーブルも中央値をサポートしていません
良い出発点ではありません....
1,2,3,4,1,2,3, ...
広告 #1、方向を変えて、何が1,1,1,1, 2,2,2, ...
一緒に属しているかを示すことができます
広告 #2、#3 ... VBA で関数 =MEDIANIF() を定義することをお勧めします。例:
Function MedianIf(R As Range, Cr As Variant) As Variant
Dim Idx As Integer, Jdx As Integer, A() As Variant, CCnt As Integer, Tmp As Variant
' find array size
CCnt = 0
For Idx = 1 To R.Rows.Count
If R(Idx, 1) = Cr Then CCnt = CCnt + 1
Next Idx
'dim array
ReDim A(CCnt - 1)
' load from range into array
CCnt = 0
For Idx = 1 To R.Rows.Count
If R(Idx, 1) = Cr Then
A(CCnt) = R(Idx, 2)
CCnt = CCnt + 1
End If
Next Idx
' bubble sort
For Jdx = CCnt - 1 To 0 Step -1
For Idx = 0 To Jdx - 1
If A(Idx) > A(Idx + 1) Then
Tmp = A(Idx)
A(Idx) = A(Idx + 1)
A(Idx + 1) = Tmp
End If
Next Idx
Next Jdx
' get Median
If CCnt Mod 2 = 1 Then
MedianIf = A(Int(CCnt / 2))
Else
MedianIf = (A(CCnt / 2 - 1) + A(CCnt / 2)) / 2
End If
End Function
この関数を使用するには、幅が 2 列、下が x 行の範囲を選択します。
=MedianIF($A$1:$B$7,A1)
これで、=IF(.... , "g", ...) で新しい関数を使用できるようになりました。
したがって、すべての範囲に対して 1 つの式を使用できます .... 注意: バブル ソートは、大きな範囲ではあまり経済的ではありません