|
▼hisao さん:
こんばんは。
>このような際、既にA列に入っている数字の最大値以下の数字で欠番をmsgboxに書きたい場合はどうなるのでしょうか?つまり A1からA100に入っている数字の最大値がiの場合、1からiの数字で欠番を探したいのです
>”少しは自分で考えろ”と叱られそうですが、配列が余り解りませんので宜しくお願い致します
これ、Match関数より、Countif関数の方がちょっと簡単になりますね!!
'=====================================================
Sub main()
Const maxlim = 20 '←最大値
Dim add As String
add = "a1:a100"
With Range(add)
.Formula = "=int(rand()*100)+1"
.Value = .Value
End With
'↑A1:A100にサンプル作成
MsgBox Join(Filter(Application.Transpose( _
Evaluate( _
"IF(countif(" & add & ",ROW(a1:a" & maxlim & _
"))=0,ROW(a1:a" & maxlim & _
"),""×"")")), "×", False), ",")
End Sub
もっとも、配列数式が嫌いなら、ループを使って同じことをしたほうが良いでしょうか
Sub main2()
Const maxlim = 20
Dim add As String
Dim ans() As String
Dim g0 As Long, g1 As Long
add = "a1:a100"
'With Range(add)
' .Formula = "=int(rand()*100)+1"
' .Value = .Value
'End With
'↑A1:A100にサンプル作成
g1 = 0
For g0 = 1 To maxlim
If Application.CountIf(Range(add), g0) = 0 Then
ReDim Preserve ans(1 To g1 + 1)
ans(g1 + 1) = g0
g1 = g1 + 1
End If
Next
If g1 > 0 Then MsgBox Join(ans(), ",")
End Sub
|
|