Excel VBA質問箱 IV

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

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


18594 / 76738 ←次へ | 前へ→

【63584】Re:ListBoxに個数を更新表示
発言  ichinose  - 09/11/19(木) 6:19 -

引用なし
パスワード
   ▼tk さん:
おはようございます。
Excel2002で確認しました。
リストボックスのクリックイベントを滅多に使わないので初めて知りました。
ちょこっと弄ってみたけど、クリックイベントでの簡単な修正方法は見つかりませんでした。

ただ、リストボックスのクリックイベントでリストボックスの書換えをするのではなく、
もう一つコマンドボタンを設けて、そのクリックイベントで

>>Private Sub ListBox1_Click()
>>  ActiveCell.Value = Me.ListBox1.Text
>>  Set_list
>>  DoEvents
>>  Application.Visible = True
>>End Sub

この内容を実行すれば、正常に作動します。

どうしてもリストボックスのクリックイベントがいいなら・・・、
動的にリストボックスを作成して、書換えは、リストボックスを再作成して行なう方法です。


新規ブックにて試してください。

ユーザーフォームを一つ作成してください。
中のコントロールは、コードで作成しますから、何も配置しないでください。

そのユーザーフォーム(UserForm1)のモジュールに

'===================================================================
Option Explicit
Private WithEvents ll As MSForms.ListBox
'===================================================================
Private Sub ll_Click()
  ActiveCell.Value = ll.Text
  Controls.Remove 2
  Set ll = mk_listbox
  Set_list ll
End Sub
'===================================================================
Private Sub UserForm_Initialize()
  With Me
    .Width = 216
    .Height = 326
  End With
  With Controls.Add("Forms.Label.1", , True)
    .Left = 18
    .Top = 30
    .Width = 81
    .Height = 18
    .SpecialEffect = 2
    .BackColor = &HFFFF&
    .TextAlign = 2
    .Font.Size = 14
    .Caption = "コマ"
   End With
  With Controls.Add("Forms.Label.1", , True)
    .Left = 100
    .Top = 30
    .Width = 81
    .Height = 18
    .SpecialEffect = 2
    .BackColor = &HFFFF00
    .TextAlign = 2
    .Font.Size = 14
    .Caption = "個数"
   End With
  Set ll = Controls.Add("Forms.ListBox.1", , True)
  With ll
    .Left = 18
    .Top = 54
    .Width = 165
    .Height = 216
    .ColumnCount = 2
    .TextColumn = 1
    .TextAlign = 2
  End With
  Set ll = mk_listbox
  Set_list ll
End Sub
'===================================================================
Sub Set_list(lll As MSForms.ListBox)
  Dim i As Long
  Dim dic   As Object
  Dim myRange As Range
  Dim r As Variant
  Set dic = CreateObject("Scripting.Dictionary")
  ReDim a(1)
  For i = 0 To 10
    dic(Chr(Asc("a") + i)) = 0
  Next
  Set myRange = Range("a1:z30")
  For Each r In dic.keys
     dic(r) = Application.CountIf(myRange, r)
  Next
  With lll
    .List = Application.Transpose(Array(dic.keys, dic.Items))
  End With
  Set dic = Nothing
End Sub
'===================================================================
Function mk_listbox() As MSForms.ListBox
  Set mk_listbox = Controls.Add("Forms.ListBox.1", , True)
  With mk_listbox
    .Left = 18
    .Top = 54
    .Width = 165
    .Height = 216
    .ColumnCount = 2
    .TextColumn = 1
    .TextAlign = 2
  End With
End Function


標準モジュールに

'=============================================================
Sub test()
  With Range("a1:z30")
    .Formula = "=CHAR(RANDBETWEEN(97,107))"
    .Value = .Value
  End With
  UserForm1.Show vbModeless
End Sub


これで、testを実行して試してみてください。

0 hits

【63578】ListBoxに個数を更新表示 tk 09/11/18(水) 21:21 質問
【63580】Re:ListBoxに個数を更新表示 tk 09/11/18(水) 21:43 発言
【63584】Re:ListBoxに個数を更新表示 ichinose 09/11/19(木) 6:19 発言
【63592】Re:ListBoxに個数を更新表示 tk 09/11/19(木) 21:00 お礼
【63587】Re:ListBoxに個数を更新表示 Yuki 09/11/19(木) 10:40 発言
【63588】Re:ListBoxに個数を更新表示 Yuki 09/11/19(木) 11:04 発言
【63593】Re:ListBoxに個数を更新表示 tk 09/11/19(木) 21:08 お礼

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