こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

excel vba コンボボックス更新について

お世話になります。

シート1のA1セルに 名前 B1セルに期限と入力してあり
A2セル リンゴ  B2セル 1703
A3セル バナナ  B3セル 1703
A4セル ぶどう  B4セル 1704
A5セル キウイ  B5セル 1704 
A6セル お米   B6セル 1706
A7セル 酒    B7セル 1708
以下 同様に入力しています。
B2以下に入力されているのは4桁の数字で
小さいほうから大きいほうに並んでいます。
同じ数字が入力されていることもあり、
また欠番も存在します。

この期限をユーザーフォームにコンボボックス設置して
重複なし表示させています。以下のコードです。
Private Sub UserForm_Initialize()
Worksheets("Sheet1").Select
名前.Value = Cells(2, 1).Value
期限.Value = Cells(2, 2).Value

X = 期限.Value
nextGyo = Range("B:B").Find(X).Row
'Dim リスト As New Collection
'Dim 列 As String, 上端セル As String, 最下端セル As String
'Dim セル範囲 As Range, 各セル As Range

列 = "B" '※3
上端セル = 列 & "2" '※4
最下端セル = 列 & "65536"
With Worksheets("Sheet1") '※5
Set セル範囲 = .Range(.Range(上端セル), .Range(最下端セル).End(xlUp))
End With
For Each 各セル In セル範囲 'セル範囲の各セルについて繰り返し処理
On Error Resume Next '次行が実行時エラーならその次行から継続
リスト.Add 各セル.Value, CStr(各セル.Value) 'Collectionオブジェクトにメンバを追加
If Err.Number = 0 Then '実行時エラーが発生していなければ
Me.期限.AddItem 各セル.Value 'コンボボックスのリストに項目を追加
End If
On Error GoTo 0
Next

End Sub
上記の例だと「1703」「1704」「1706」「1708」の
4種類から選択できる状態です。

ここでたとえば
コンボボックスで1704を選択して
(コンボボックスには自由に入力はさせずにリストの中から選ばせるようにしています)
ユーザーフォーム上のボタンを押すと
A4セル ぶどう  B4セル 1704
A5セル キウイ  B5セル 1704
を行削除して空白行を上に詰めるコードを書きました。

ただこのときコンボボックスからは
リストの更新がされないので「1704」が選択できてしまいます。
削除した時点で「1704」がない状態にするには
(自動更新をかける)
どうしたらよいでしょうか?
(削除するコードの中に
 Call UserForm_Initialize と書いてみたのですが
 何も変化ありませんでした)

どうかよろしくお願いいたします

投稿日時 - 2017-03-06 09:08:36

QNo.9301720

困ってます

質問者が選んだベストアンサー

こんにちは
コンボボックスで1704を選択して、行削除して空白行を上に詰めるボタンのコードに
  Dim i As Long
   i = Me.期限.ListIndex
  If i = -1 Then
    MsgBox "選択されていません"
  Else
    Me.期限.RemoveItem i
    Me.期限.Value = ""
  End If
のようなコードを追加してはどうですか?

投稿日時 - 2017-03-06 10:02:50

お礼

回答ほんとうにありがとうございました。

Removeitem
この使い方 とても勉強になりました。
的確なお答え感謝です こちらが考えていた通りの
動作になりました

投稿日時 - 2017-04-13 17:04:50

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問