ケースの選択動作をシミュレートするために、Excelの「ケース」式を作成したいと思います(複数の引数を使用するか、オプション)。A1とA2がExcelセルである場合、これが目標です。
A1 Case: A2 Formula: A2 Result
5 cases({A1>5,"greather than 5"}, {A1<5, "less than 5"},{else,"equal to 5"}) equal to 5
Hi cases({A1="","there is nothing"},{else,A1}) Hi
1024 cases({5<A1<=10,10},{11<=A1<100,100},{A1>100,1000}) 1000
12 cases({A1=1 to 9, "digit"}, {A1=11|22|33|44|55|66|77|88|99, "11 multiple"}) (empty)
60 cases({A1=1 to 49|51 to 99,"not 50"}) not 50
可能であれば、ケースを取得する前にセルに対して操作を行うために、Excelの数式またはvbaコードを受け入れる必要があります。
cases({len(A1)<7, "too short"},{else,"good length"})
可能であれば、評価するセルを受け入れる必要があります。
A2 = A3 = A4 = A5=1およびA1=2の場合、A6 = "one"、A7 = "two"
cases(A1!=A2|A3|A4|A5, A6}, {else,A7}) will produce "two"
ちなみに、| または、!=は異なることを意味します
何か助けはありますか?
ありがたいです。
私が書くことができたのはこれでした:
Public Function arr(ParamArray args()) 'Your function, thanks
arr = args
End Function
Public Function cases(arg, arg2) 'I don't know how to do it better
With Application.WorksheetFunction
cases = .Choose(.Match(True, arg, 0), arg2)
End With
End Function
このように関数を呼び出します
=cases(arr(A1>5, A1<5, A1=5),arr( "gt 5", "lt 5", "eq 5"))
そして、私は目標を達成できません。それは最初の条件、A1>5で機能します。
forを使用して修正しましたが、あなたの提案のようにエレガントではないと思います。
Function selectCases(cases, actions)
For i = 1 To UBound(cases)
If cases(i) = True Then
selectCases = actions(i)
Exit Function
End If
Next
End Function
関数を呼び出すと:
=selectCases(arr(A1>5, A1<5, A1=5),arr( "gt 5", "lt 5", "eq 5"))
できます。
全てに感謝。
少し仕事をした後、最終的に私は最初に欲しいものに近い、Excelの選択ケースを手に入れました。
Function cases(ParamArray casesList())
'Check all arguments in list by pairs (case, action),
'case is 2n element
'action is 2n+1 element
'if 2n element is not a test or case, then it's like the "otherwise action"
For i = 0 To UBound(casesList) Step 2
'if case checks
If casesList(i) = True Then
'then take action
cases = casesList(i + 1)
Exit Function
ElseIf casesList(i) <> False Then
'when the element is not a case (a boolean value),
'then take the element.
'It works like else sentence
cases = casesList(i)
Exit Function
End If
Next
End Function
A1 = 5で、私が電話した場合:
=cases(A1>5, "gt 5",A1<5, "lt 5","eq 5")
これは次のように読み取ることができます。A1が5より大きい場合は、「gt 5」を選択しますが、A1が5より小さい場合は、「lt 5」を選択します。それ以外の場合は、「eq5」を選択します。実行後、「eq5」と一致します
ありがとう、それは刺激的で本当に教育的でした!