Excel VBA質問箱 IV

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

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


8954 / 13644 ツリー ←次へ | 前へ→

【30086】コンボボックスの表示 たかし 05/10/19(水) 15:10 質問[未読]
【30088】Re:コンボボックスの表示 Statis 05/10/19(水) 15:32 回答[未読]
【30090】Re:コンボボックスの表示 Statis 05/10/19(水) 15:58 回答[未読]
【30092】Re:コンボボックスの表示 たかし 05/10/19(水) 16:11 質問[未読]
【30094】Re:コンボボックスの表示 awu 05/10/19(水) 16:30 発言[未読]
【30099】Re:コンボボックスの表示 たかし 05/10/19(水) 17:15 質問[未読]
【30122】Re:コンボボックスの表示 Statis 05/10/20(木) 8:23 回答[未読]
【30131】Re:コンボボックスの表示 たかし 05/10/20(木) 12:25 お礼[未読]
【30089】Re:コンボボックスの表示 Jaka 05/10/19(水) 15:48 回答[未読]
【30100】Re:コンボボックスの表示 たかし 05/10/19(水) 17:18 お礼[未読]

【30086】コンボボックスの表示
質問  たかし E-MAIL  - 05/10/19(水) 15:10 -

引用なし
パスワード
   いつもお世話になっております。
いつも参考にさせていただいております。

表記の件ですが、ワークシートのA列に日付と時間が入力されています。
"yyyy/mm/dd hh:mm:ss"の形式です。
B列にその時間に行った内容が入力されています。
D列に、特定の作業を行った場合に"○"を入力してあります。

そこで、ユーザーフォーム上にコンボボックスを置き、ユーザーフォーム
のInitialize()でコンボボックスにD列の一番下にある"○"の日時を表示、
リストにはA列の内容を表示させるようにしました。
ここまではできたのですが、リスト内から選択しようとすると、
選択した値がコンボボックス内で"数値"になってしまいます。
この値を元にオートフィルターをかけようとしているので、困っています。
何とか、同じ形式"yyyy/mm/dd hh:mm:ss"で表示できるようにはならない
でしょうか?

ちなみに、日付と時間を別々のセルに入力するのは避けたいです。
理由を書くと長くなってしまいますので、とりあえず、ご存知の方が
おられましたら、アドバイスいただけないでしょうか?

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

現在のマクロ

Private Sub UserForm_Initialize()
 r = Sheets("データ").Range("A65536").End(xlUp).Row
 Sheets("データ").Range("D65536").End(xlUp).Offset(, -3).Select
 ComboBox1.Value = Selection.Value
 ComboBox1.RowSource = "データ!A2:A" & r
End Sub

【30088】Re:コンボボックスの表示
回答  Statis  - 05/10/19(水) 15:32 -

引用なし
パスワード
   こんにちは

こんな感じかな?

Private Sub ComboBox1_Change()
Application.EnableEvents = False
With Me.ComboBox1
   .Text = Format(.Text, "yyyy/mm/dd hh:mm:ss")
End With
Application.EnableEvents = True
End Sub

Private Sub UserForm_Initialize()
Dim r As Long
With Sheets("データ")
 r = .Range("A65536").End(xlUp).Row
 Me.ComboBox1.Value = .Range("D65536").End(xlUp).Offset(, -3).Value
End With
Me.ComboBox1.RowSource = "Sheet1!A2:A" & r
End Sub

【30089】Re:コンボボックスの表示
回答  Jaka  - 05/10/19(水) 15:48 -

引用なし
パスワード
   ▼たかし さん:
>リスト内から選択しようとすると、
>選択した値がコンボボックス内で"数値"になってしまいます。
>この値を元にオートフィルターをかけようとしているので、困っています。
>何とか、同じ形式"yyyy/mm/dd hh:mm:ss"で表示できるようにはならない
>でしょうか?
RowSourceで、設定しているからシリアル値を拾ってしまうんです。
こうしたらどうですか。
ComboBox1.List = Sheets("データ").Range("A1:A" & r).Value

【30090】Re:コンボボックスの表示
回答  Statis  - 05/10/19(水) 15:58 -

引用なし
パスワード
   すみません下記に変更して下さい。


Private Sub ComboBox1_Change()

Application.EnableEvents = False
With Me.ComboBox1
   .Text = Format(.Text, "yyyy/mm/dd hh:mm:ss")
End With
Application.EnableEvents = True
End Sub


Private Sub UserForm_Initialize()

Dim r As Long
With Sheets("データ")
 r = .Range("A65536").End(xlUp).Row
 Me.ComboBox1.Value = .Range("D65536").End(xlUp).Offset(, -3).Text
End With
Me.ComboBox1.RowSource = "データ!A2:A" & r

End Sub

【30092】Re:コンボボックスの表示
質問  たかし E-MAIL  - 05/10/19(水) 16:11 -

引用なし
パスワード
   Statis さん

うまくいきました。ありがとうございました。

もう一つ質問してもいいでしょうか?
コンボボックスの値でオートフィルターをかけると、シート上に数値が
一切表示されなくなってしまいます。
そこで、マクロの最終行にわざとエラーが出るように適当なコマンドを
入れて、エラー直後にオートフィルターを確認したところ、
ちゃんと選択した日時が選ばれていました。
にもかかわらず、データが何も表示されない状態になってしまいます。
その状態で日時を選択すると、オートフィルターの役目は果たしています。
下のマクロでおかしいところ等あれば教えていただけないでしょうか?

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

Private Sub CommandButton1_Click()
 Dim r As Long, l As Long
 
 If Worksheets("データ").AutoFilterMode Then
   Worksheets("データ").AutoFilterMode = False
 End If

  r = Worksheets("データ").Range("A65536").End(xlUp).Row
  Sheets("データ").Range("A4:D" & r).Select
  CE = ComboBox1.Value
  Selection.AutoFilter Field:=1, Criteria1:=EC
  l = Worksheets("データ").Range("A65536").End(xlUp).Row
  Sheets("データ").Range("D" & l) = "○"
  sheets("データ").AutoFilterMode = False
End Sub

【30094】Re:コンボボックスの表示
発言  awu  - 05/10/19(水) 16:30 -

引用なし
パスワード
   VBEのメニューから[ツール]-->[オプション]-->[編集]タブで
「変数の宣言を強制する」にチェックを入れましょう。

何かに気が付くでしょう。

変数を宣言したり、しなかったり なぁ〜ぜ?

【30099】Re:コンボボックスの表示
質問  たかし E-MAIL  - 05/10/19(水) 17:15 -

引用なし
パスワード
   ▼awu さん:
>VBEのメニューから[ツール]-->[オプション]-->[編集]タブで
>「変数の宣言を強制する」にチェックを入れましょう。
⇒ 入れました。

>何かに気が付くでしょう。
>
>変数を宣言したり、しなかったり なぁ〜ぜ?
⇒ 過去ログのコンボボックスの似たようなマクロを参照しました。
  そこでも宣言されていなかったので・・・
  そこで、違うだろうとは思いながらも、私の知っている限りの
  変数を宣言してみましたが、現象に変化ありませんでした。
  どこが悪いのか教えていただけないでしょうか?
  よろしくお願いいたします。

【30100】Re:コンボボックスの表示
お礼  たかし E-MAIL  - 05/10/19(水) 17:18 -

引用なし
パスワード
   ▼Jaka さん:
>▼たかし さん:
>>リスト内から選択しようとすると、
>>選択した値がコンボボックス内で"数値"になってしまいます。
>>この値を元にオートフィルターをかけようとしているので、困っています。
>>何とか、同じ形式"yyyy/mm/dd hh:mm:ss"で表示できるようにはならない
>>でしょうか?
>RowSourceで、設定しているからシリアル値を拾ってしまうんです。
>こうしたらどうですか。
>ComboBox1.List = Sheets("データ").Range("A1:A" & r).Value
試してみましたが、ユーザーフォームが開けなくなってしまいました。
Statisさんのマクロを使用しようと思います。
ありがとうございました。

【30122】Re:コンボボックスの表示
回答  Statis  - 05/10/20(木) 8:23 -

引用なし
パスワード
   こんにちは

これでどうかな?

Private Sub CommandButton1_Click()
 Dim r As Long, l As Long
 With Worksheets("データ")
    If .AutoFilterMode Then
     .AutoFilterMode = False
    End If
    r = .Range("A65536").End(xlUp).Row
    .Range("A4:D" & r).AutoFilter Field:=1, _
     Criteria1:=Format(ComboBox1.Text, .Range("A2").NumberFormat)
    l = .Range("A65536").End(xlUp).Row
    .Range("D" & l) = "○"
    .AutoFilterMode = False
End With
End Sub

「.Range("A2").NumberFormat」の部分ですが書式が「yyyy/mm/dd hh:mm:ss」
になっているセルにして下さい。

【30131】Re:コンボボックスの表示
お礼  たかし E-MAIL  - 05/10/20(木) 12:25 -

引用なし
パスワード
   ▼Statis さん:
朝早くからお返事をいただいて、ありがとうございます。
また、お礼が遅くなりすみませんでした。
うまく動作しました。
本当にありがとうございました。
このFormatの指定はTextBoxにも使えますよね。
今度試してみます。

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

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