Excel VBA質問箱 IV

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

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


1905 / 13645 ツリー ←次へ | 前へ→

【71076】コンボボックスのリストを降順する レッズ命 12/1/27(金) 21:46 質問[未読]
【71077】Re:コンボボックスのリストを降順する ちん 12/1/27(金) 23:04 発言[未読]
【71078】Re:コンボボックスのリストを降順する Hirofumi 12/1/27(金) 23:23 発言[未読]
【71079】Re:コンボボックスのリストを降順する Hirofumi 12/1/27(金) 23:40 発言[未読]
【71080】Re:コンボボックスのリストを降順する レッズ命 12/1/27(金) 23:40 お礼[未読]
【71105】Re:コンボボックスのリストを降順する レッズ命 12/1/28(土) 23:54 質問[未読]
【71106】Re:コンボボックスのリストを降順する ちん 12/1/29(日) 4:54 発言[未読]
【71108】Re:コンボボックスのリストを降順する レッズ命 12/1/29(日) 16:30 お礼[未読]
【71107】Re:コンボボックスのリストを降順する Hirofumi 12/1/29(日) 7:38 発言[未読]

【71076】コンボボックスのリストを降順する
質問  レッズ命  - 12/1/27(金) 21:46 -

引用なし
パスワード
   またまた質問ですみません。

コンボボックスに、あるシートのすべてのセルから
日付を取り出して、降順して表示させたいのですが、
日付を取り出すまではできたのですが、
降順にすることができません。
どうしたらいいのでしょうか?
Excel2007です。

With Sheets(Cmbチーム名.Value).Cells
Set c = .Find(What:="*/*", lookat:=xlPart)
If Not c Is Nothing Then
 fAddress = c.Address
 Do
  Cmb開催日1.AddItem Format(c.Value, "m/d")
  Set c = .FindNext(c)
  If c.Address = fAddress Then Exit Do
 Loop
End If
End With

よろしくお願いいたします。

【71077】Re:コンボボックスのリストを降順する
発言  ちん  - 12/1/27(金) 23:04 -

引用なし
パスワード
   ▼レッズ命 さん:こんばんわ、ちんといいます。
ソートですが、作りこみが必要と思われます。
日付けを取り出しながら、テーブルに入れ大小比較しながらテーブルの中身を入れ替え後、コンボボックスへセットするか、別シートに日付けをセット後、Excelのソートをしてから、コンボボックスへセットするかだと思います。

以上、参考までに・・・

【71078】Re:コンボボックスのリストを降順する
発言  Hirofumi  - 12/1/27(金) 23:23 -

引用なし
パスワード
   こんなのでは?
但し、Findに因る日付の探索部分は上手く行くか、行かぬか見て居ません

  Dim i As Long
  Dim c As Range
  Dim fAddress As String

  With Sheets(Cmbチーム名.Value).Cells
    Set c = .Find(What:="*/*", lookat:=xlPart)
    If Not c Is Nothing Then
      fAddress = c.Address
      Do
        vntDate = c.Value
        For i = 0 To Cmb開催日1.ListCount - 1
          If Format(vntDate, "mmdd") _
              >= Format(CDate(Cmb開催日1.List(i, 0)), "mmdd") Then
            Exit For
          End If
        Next i
        If i <= Cmb開催日1.ListCount - 1 Then
          If Format(vntDate, "m/d") <> Cmb開催日1.List(i, 0) Then
            Cmb開催日1.AddItem Format(vntDate, "m/d"), i
          End If
        Else
          Cmb開催日1.AddItem Format(vntDate, "m/d")
        End If
'        Cmb開催日1.AddItem Format(c.Value, "m/d")
        Set c = .FindNext(c)
        If c.Address = fAddress Then Exit Do
      Loop
    End If
  End With

【71079】Re:コンボボックスのリストを降順する
発言  Hirofumi  - 12/1/27(金) 23:40 -

引用なし
パスワード
   いけね!

  Dim vntDate As Variant

を入れ忘れました
尚、日付に重複が無いなら

          If Format(vntDate, "m/d") <> Cmb開催日1.List(i, 0) Then '★削除
            Cmb開催日1.AddItem Format(vntDate, "m/d"), i
          End If '★削除

の★印の2行は無くても構いません
在ると遅い処理が、尚遅く成ります

【71080】Re:コンボボックスのリストを降順する
お礼  レッズ命  - 12/1/27(金) 23:40 -

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

ちんさん、アドバイスありがとうございました。

Hirofumiさんのアドバイス通りにしたら、
うまくいきました。

本当にありがとうございました。

【71105】Re:コンボボックスのリストを降順する
質問  レッズ命  - 12/1/28(土) 23:54 -

引用なし
パスワード
   すみません、もう一つ質問させてください。
Cmb開催日1の部分が1〜3まであるのですが、
すべて同じ処理をさせたいのです。
1の部分を2と3に変えてやればいいかと思うのですが、
長くなるので、もう少し簡素化できる方法はありますでしょうか?
教えてください。


>こんなのでは?
>但し、Findに因る日付の探索部分は上手く行くか、行かぬか見て居ません
>
>  Dim i As Long
>  Dim c As Range
>  Dim fAddress As String
>
>  With Sheets(Cmbチーム名.Value).Cells
>    Set c = .Find(What:="*/*", lookat:=xlPart)
>    If Not c Is Nothing Then
>      fAddress = c.Address
>      Do
>        vntDate = c.Value
>        For i = 0 To Cmb開催日1.ListCount - 1
>          If Format(vntDate, "mmdd") _
>              >= Format(CDate(Cmb開催日1.List(i, 0)), "mmdd") Then
>            Exit For
>          End If
>        Next i
>        If i <= Cmb開催日1.ListCount - 1 Then
>          If Format(vntDate, "m/d") <> Cmb開催日1.List(i, 0) Then
>            Cmb開催日1.AddItem Format(vntDate, "m/d"), i
>          End If
>        Else
>          Cmb開催日1.AddItem Format(vntDate, "m/d")
>        End If
>'        Cmb開催日1.AddItem Format(c.Value, "m/d")
>        Set c = .FindNext(c)
>        If c.Address = fAddress Then Exit Do
>      Loop
>    End If
>  End With

【71106】Re:コンボボックスのリストを降順する
発言  ちん  - 12/1/29(日) 4:54 -

引用なし
パスワード
   ▼レッズ命 さん:おはようございます。ちんといいます。

Cmb開催日1に値をセット完了後、
Cmb開催日2.List = Cmb開催日1.List
Cmb開催日3.List = Cmb開催日1.List

で、同じ値がセットされます。
以上、参考までに・・・

【71107】Re:コンボボックスのリストを降順する
発言  Hirofumi  - 12/1/29(日) 7:38 -

引用なし
パスワード
   >Cmb開催日1の部分が1〜3まであるのですが、
>すべて同じ処理をさせたいのです。
>1の部分を2と3に変えてやればいいかと思うのですが、
>長くなるので、もう少し簡素化できる方法はありますでしょうか?
>教えてください

この意味が今一不明なのですが?

もし、Cmb開催日1、Cmb開催日2、Cmb開催日3のListが全く同じ(日付を探すシート等が同じ)と
言う事で有れば、ちんさんの言う事で善いと思いますが?

Listの中身が違うのでこのコードを3つ分書かなければならないと有れば
整列部分を別のプロシージャに追い出して、
以下の様に其れを共通に呼び出しても或る程度単純化出来るのでは?

Private Sub UserForm_Initialize()

  Dim c As Range
  Dim fAddress As String
        
  With Sheets(Cmbチーム名.Value).Cells
    Set c = .Find(What:="*/*", lookat:=xlPart)
    If Not c Is Nothing Then
      fAddress = c.Address
      Do
        'Listの整列登録を呼び出す
        ListSort c.Value, Cmb開催日1
        Set c = .FindNext(c)
        If c.Address = fAddress Then Exit Do
      Loop
    End If
  End With

End Sub

'下記を同じUserFormのコードモジュールに記述
Private Sub ListSort(vntDate As Variant, cmbMark As MSForms.ComboBox)

'  List部の整列登録

  Dim i As Long
  
  With cmbMark
    For i = 0 To .ListCount - 1
      If Format(vntDate, "mmdd") _
          >= Format(CDate(.List(i, 0)), "mmdd") Then
        Exit For
      End If
    Next i
    If i <= .ListCount - 1 Then
      If Format(vntDate, "m/d") <> .List(i, 0) Then '★不要なら削除
        .AddItem Format(vntDate, "m/d"), i
      End If '★不要なら削除
    Else
      .AddItem Format(vntDate, "m/d")
    End If
  End With

End Sub

【71108】Re:コンボボックスのリストを降順する
お礼  レッズ命  - 12/1/29(日) 16:30 -

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

なるほどその通りですよね!
ありがとうございました。

▼Hirohumiさん:

ちんさんの教えてくれたもので十分でした。
ご回答ありがとうございました。


>▼レッズ命 さん:おはようございます。ちんといいます。
>
>Cmb開催日1に値をセット完了後、
>Cmb開催日2.List = Cmb開催日1.List
>Cmb開催日3.List = Cmb開催日1.List
>
>で、同じ値がセットされます。
>以上、参考までに・・・

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