別の投稿のコードを理解しやすくなるように修正しました。コードを実行するとき、私はまだこの行のために "タイプ不一致"というエラーを受け取ります:w(k) = z(i, 1)
。誰もがこのエラーの洞察を持っていますか?MAXIF用のVBAコードを作成する
マイコードあなたはMaxRange
範囲の間で選択するために、いくつかのうちの最大値を返すに興味があるので、
Option Base 1
Function MaxIf(MaxRange As Range, Lookup_Range1 As Range, Var_Range1 As Variant, _
Lookup_Range2 As Range, Var_Range2 As Variant) As Variant
Dim x() As Variant, y() As Variant, z() As Variant, w() As Long
Dim i As Long
Dim Constraint1 As Variant, Constraint2 As Variant, k As Long
i = 1
k = 0
Constraint1 = Var_Range1
Constraint2 = Var_Range2
x = Lookup_Range1
y = Lookup_Range2
z = MaxRange
For i = 1 To Lookup_Range1.Rows.Count
If x(i, 1) = Var_Range1 Then
If y(i, 1) = Var_Range2 Then
k = k + 1
ReDim Preserve w(k)
w(k) = z(i, 1)
End If
End If
Next i
MaxIf = Application.Max(w)
End Function
エラーが発生したときの 'z(i、1)'の値は何ですか?私の推測では、 'String'、エラー、または暗黙的に' Long'にキャストできない他のデータ型が含まれていると思います。エラー行のすぐ上に 'Debug.Assert IsNumeric(z(i、1))'行を追加してチェックすることができます。 – Comintern
@Diedrichあなたの 'Function'が何をしたいのかを説明しようとしていますか?ワークシートのスクリーンショットを追加して、期待される結果が得られるかもしれません。 –
他の列の対応するセルが特定の基準と一致すると、範囲内の最大値を取得しようとしていると思います。あなたは 'MAX( - (Range1 = Criteria1)* - (Range2 = Criteria2)* MaxRange)'のような簡単な公式でこれを達成することができます。 'Max( - (A1:A15 =" John ")* - (B1:B15 = 20)* C1:C15)' – nightcrawler23