私は筋力とコンディショニングのコーチで、アスリートの評価結果を分析するのに助けが必要です。5 つのテスト結果のうち最も古いものを最新のものから減算する数式の作成に助けが必要です。シートには約 3000 行あり、各アスリートにはそれぞれ 5 行 (第 1 学期、第 2 学期、第 3 学期、第 4 学期、夏期) があり、実際のテストへの参加に関係なく割り当てられます。したがって、数式は基本的に列を下って 5 つのセルから最初の利用可能な値を取得し、5 つのセルから最後の利用可能な値から減算する必要があります。シートは次のように設定されています。
助けてください!情報が足りなかったらごめんなさい。このサイトは初めてです。
答え1
「CHANGE」というタイトルの灰色の行に入力すると機能する数式があります。
それはすごいですね、こんな感じです:
=INDEX(Values, SMALL(INDEX((Values<>0)*ROW(Values), 0), ROWS(Values)) - ROW(StartValue) + 1,1)- INDEX(Values, SMALL(INDEX((Values<>0)*ROW(Values), 0), COUNTIF(Values, "")+1) - ROW(StartValue)+1,1)
どこ
Values
値の範囲です。私の例では、H5:H9
StartValue
値の範囲の最初のセルです。私の場合はH5
使い方
- このステートメントは、セルが空白の場合は
INDEX((Values<>0)*ROW(Values), 0)
配列を返し0
、空白でない場合はセルの行番号を返します。 - この
SMALL()
関数はそれらを昇順に並べ替え、2番目の引数に対応する配列の値を返します。
INDEX((Values<>0)*ROW(Values), 0)
したがって、以下のスプレッドシートの例では、
0
6
7
8
0
SMALL()
次のように並べ替えます。
0
0
6 <- Row of first nonzero value, second argument to SMALL(): =COUNTIF(Values, "")+1 = 3
7
8 <- Row of last nonzero value, second argument to SMALL(): ROWS(Values) = 5
- 行がわかったので、
INDEX()
値を取得するために使用します。行は- ROW(StartValue) + 1
、返された行をSMALL()
インデックスに変換します。 - したがって、最初の呼び出しからの最新の非ゼロ値が残り
INDEX()
、2番目の呼び出しからの最も遠い非ゼロ値が減算されます。INDEX()
スクリーンショット
スプレッドシートへのリンク
ここは、このサンプル スプレッドシートをダウンロードするためのリンクです。私は通常、これらの数式を説明するために FormulaChop を使用しますが、ROW() 関数では機能しません。(完全開示: FormulaChop は私が作成しました)。そのため、機能する数式のバージョンを含めました。FormulaChop タブでそれを分解して確認できます。
答え2
列 A に日付 (A2:A3001)、列 B に名前、列 C に値を入力し、検索する名前を F2 に入力して、G2 でこの数式を使用します。
=SUMIFS(C:C, B:B, F2, A:A, AGGREGATE(14, 7, (A$2:A$3001)/(B$2:B$3001=F2), 1))-
SUMIFS(C:C, B:B, F2, A:A, AGGREGATE(15, 7, (A$2:A$3001)/(B$2:B$3001=F2), 1))
答え3
答え4
これはあなたが探しているものかもしれません 結果がどのようなものかを示す画像
式は次のようになります。使い方は非常に簡単です。 数式を示す画像
数式を作成するには?Alt+F11を押して、次のコードをコピーして貼り付けます。
パブリック関数 Diff2(n1 は Double、n2 は Double、n3 は Double、n4 は Double、n5 は Double)
インデックス1 = 0 インデックス2 = 0
'最初の番号を検索します。If n1 > 0 Then FirstNum = n1 index1 = 1 ElseIf n2 > 0 Then FirstNum = n2 index1 = 1 ElseIf n3 > 0 Then FirstNum = n3 index1 = 3 ElseIf n4 > 0 Then FirstNum = n4 index1 = 4 End If
'2 番目の数値を検索します。If n5 > 0 Then SecNum = n5 index2 = 5 ElseIf n4 > 0 Then SecNum = n4 index2 = 4 ElseIf n3 > 0 Then SecNum = n3 index2 = 3 ElseIf n2 > 0 Then SecNum = n2 index2 = 2 End If
'エラーチェック If (index1 = 0) Or (index2 = 0) Or (index1 - index2 = 0) Then Diff2 = "ERROR" Else Diff2 = SecNum - FirstNum End If
終了関数