|
▼ヒロユキ さん:
こんにちは。
まず、
>質問ですが、◎に対して半角の数字では淋しいので、
>全角のマル1.からマル5.と表記すること可能でしょうか?
これ・・・。
前回投稿のコードを以下のように変更してください。
'=========================================================
Sub サンプルデータも作成したmainのテスト()
With Range("a1:c3")
.FormulaArray = "={""2or17"",""9or10"",""4or15"";" & _
"""7or12"",""5or14"",""3or16"";" & _
"""6or13"",""1or18"",""8or11""}"
.Value = .Value
End With
With Range("b11:b15")
.Value = Application.Transpose(Array(2, 12, 14, 4, 9))
Range("a32:c34").ClearContents
MsgBox "ご覧のデータでmainを実行します"
Call main
MsgBox "例1 結果を確認してください"
.Value = Application.Transpose(Array(11, 5, 8, 18, 7))
Range("a32:c34").ClearContents
MsgBox "ご覧のデータでmainを実行します"
Call main
MsgBox "例2 結果を確認してください"
.Value = Application.Transpose(Array(17, 9, 3, 11, 16))
Range("a32:c34").ClearContents
MsgBox "ご覧のデータでmainを実行します"
Call main
MsgBox "例3 結果を確認してください"
End With
End Sub
'=====================================================================
Sub main()
Dim rng As Range
For Each rng In Range("a32:c34")
With rng
.Formula = "=CHOOSE(SUMPRODUCT(ISERROR(MATCH({" & _
Replace(.Offset(-31, 0).Value, "or", ",") & _
"},B11:B15,0))*1)+1,""◎""" & _
",char(SUMPRODUCT(IF(ISERROR(MATCH({" & _
Replace(.Offset(-31, 0).Value, "or", ",") & _
"},B11:B15,0)),0,MATCH({" & _
Replace(.Offset(-31, 0).Value, "or", ",") & _
"},B11:B15,0)))+11552),"""")"
' ↑この数式をちょっと変更しています
.Value = .Value
End With
Next
End Sub
これで試してみてください。
>原因としましては、「参照表は、順位がこのセルに入ります。」
>という伝達のイメージでしか私にはなく、実際に参照表を使用して、
>計算されているとは思いませんでした。
ということなら、最初に「この参照表の作り方をどうすればよいか?」という
ご質問をしてください。
その際には、このような処理を行うバックボーンからの説明が必要ですけどね!!
最初の投稿でも申しましたが、
>> A B C
>>1 2or17 9or10 4or15
>>2 7or12 5or14 3or16
>>3 6or13 1or18 8or11
>↑この参照表が評価するのが難しいデータですが、
>このままでいきましょう。
これ「or」の代わりに「,」にしただけでもコード(数式の箇所)はもう少し
簡単になるんです(だって、Replaceが不要になるから)。
このデータのレイアウトを工夫すれば、
コードはもっと簡単になると思いますよ!!
|
|