Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5377 / 13646 ツリー ←次へ | 前へ→

【51176】textboxに連記 hisao 07/9/1(土) 13:08 質問[未読]
【51177】Re:textboxに連記 ぱっせんじゃー 07/9/1(土) 13:13 発言[未読]
【51181】Re:textboxに連記 ichinose 07/9/1(土) 19:21 発言[未読]
【51192】Re:textboxに連記 hisao 07/9/2(日) 19:39 発言[未読]
【51197】Re:textboxに連記 ichinose 07/9/2(日) 21:56 発言[未読]
【51206】Re:textboxに連記 hisao 07/9/3(月) 15:44 お礼[未読]

【51176】textboxに連記
質問  hisao E-MAIL  - 07/9/1(土) 13:08 -

引用なし
パスワード
   いつもお世話になります
A1からA100に1から100の数字が入っています。
欠番を見つけて、userform1のtextbox1に連記する事が出来ないでしょうか
例えば 12,15,18が欠番ならtextboxに12,15,18と表示させたいのです
宜しくお願い致します

【51177】Re:textboxに連記
発言  ぱっせんじゃー  - 07/9/1(土) 13:13 -

引用なし
パスワード
   1から100をループし、
Findメソッドで見つからなかったら転記、
としてはいかがでしょう?

【51181】Re:textboxに連記
発言  ichinose  - 07/9/1(土) 19:21 -

引用なし
パスワード
   ▼hisao さん:
こんばんは。

>A1からA100に1から100の数字が入っています。
>欠番を見つけて、userform1のtextbox1に連記する事が出来ないでしょうか
>例えば 12,15,18が欠番ならtextboxに12,15,18と表示させたいのです
>宜しくお願い致します
セルが100個程度なら、配列数式で
'==============================================
Sub main()
  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(ISERROR(MATCH(ROW(" & _
      add & ")," & _
      add & ",0)),ROW(" & _
      add & "),""×"")" _
      )), "×", False), ",")
End Sub

【51192】Re:textboxに連記
発言  hisao E-MAIL  - 07/9/2(日) 19:39 -

引用なし
パスワード
   ▼ichinose さん:
いつも有り難うございます
もう少し甘えさせて下さい
このような際、既にA列に入っている数字の最大値以下の数字で欠番をmsgboxに書きたい場合はどうなるのでしょうか?つまり A1からA100に入っている数字の最大値がiの場合、1からiの数字で欠番を探したいのです
”少しは自分で考えろ”と叱られそうですが、配列が余り解りませんので宜しくお願い致します

>▼hisao さん:
>こんばんは。
>
>>A1からA100に1から100の数字が入っています。
>>欠番を見つけて、userform1のtextbox1に連記する事が出来ないでしょうか
>>例えば 12,15,18が欠番ならtextboxに12,15,18と表示させたいのです
>>宜しくお願い致します
>セルが100個程度なら、配列数式で
>'==============================================
>Sub main()
>  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(ISERROR(MATCH(ROW(" & _
>      add & ")," & _
>      add & ",0)),ROW(" & _
>      add & "),""×"")" _
>      )), "×", False), ",")
>End Sub

【51197】Re:textboxに連記
発言  ichinose  - 07/9/2(日) 21:56 -

引用なし
パスワード
   ▼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

【51206】Re:textboxに連記
お礼  hisao E-MAIL  - 07/9/3(月) 15:44 -

引用なし
パスワード
   ▼ichinose さん:

有り難うございました。
素晴らしいプログラム本当に助かりました
パッセンジャーさんも有り難うございました

>▼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

5377 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free