• 締切済み

EXCEL リストボックスのデータから除外したい

次の3項目のフォームがあります。 "番号" "お店" "分類" これら項目に入力した値からシートデータベースの情報をリストボックスに表示させているのですが、"分類"にあるABCDEの情報のうちDの情報を省いて表示させたいのですがわかりません。 省く指定はチェックボックスを考えています。 ご教授よろしくお願いいたします。 ↓コード Private Sub SetListBox() Dim wRow As Long Dim wLstRow As Long Dim wHitFlg As Boolean Me.lst顧客リスト.Clear wLstRow = 0 With Worksheets("顧客情報") For wRow = 2 To .Range("A1").CurrentRegion.Rows.Count wHitFlg = True If Me.txt顧客名 <> "" Then If InStr(1, .Cells(wRow, .Range("顧客名列").Column), Me.txt顧客名, vbTextCompare) = 0 Then wHitFlg = False End If End If If Me.cmb顧客分類 <> "" Then If .Cells(wRow, .Range("顧客分類列").Column) <> Me.cmb顧客分類 Then wHitFlg = False End If End If If Me.TextBox1 <> "" Then If InStr(1, .Cells(wRow, .Range("フリガナ列").Column), Me.TextBox1, vbTextCompare) = 0 Then wHitFlg = False End If End If If wHitFlg = True Then Me.lst顧客リスト.AddItem "" Me.lst顧客リスト.List(wLstRow, 0) = wRow Me.lst顧客リスト.List(wLstRow, 1) = Worksheets("顧客情報").Cells(wRow, 2) Me.lst顧客リスト.List(wLstRow, 2) = Worksheets("顧客情報").Cells(wRow, 3) Me.lst顧客リスト.List(wLstRow, 3) = Worksheets("顧客情報").Cells(wRow, 8) wLstRow = wLstRow + 1 End If Next End With

みんなの回答

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

lst顧客リストの表示は 1列目:番号 2列目:顧客名 3列目:顧客分類 4列目:状態 であり、チェックボックスをONで3列目の[顧客分類]の中から"販売済"を省く Private Sub CheckBox1_Click()   Dim i As Long   If Me.CheckBox1.Value = True Then     With Me.lst顧客リスト       For i = .ListCount - 1 To 0 Step -1         If .List(i, 2) = "販売済" Then           .RemoveItem (i)         End If       Next     End With   End If End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>検索結果にあたるデータ数を、”D”を除いて表示させることで、 チェックボックスがONならばリストボックスから"D"を省く > Me.lst顧客リスト.List(wLstRow, 2) = Worksheets("顧客情報").Cells(wRow, 3) > Me.lst顧客リスト.List(wLstRow, 3) = Worksheets("顧客情報").Cells(wRow, 8) >wLstRow = wLstRow + 1 >End If >Next >End With   Dim i As Long   If Me.CheckBox1.Value = True Then     With Me.lst顧客リスト       For i = .ListCount To 1 Step -1         If .List(i - 1, 2) = "D" Then           .RemoveItem (i - 1)         End If       Next     End With   End If End Sub もしくはチェックボックスをONでリストボックスから"D"を省く Private Sub CheckBox1_Click()   Dim i As Long   If Me.CheckBox1.Value = True Then     With Me.lst顧客リスト       For i = .ListCount To 1 Step -1         If .List(i - 1, 2) = "D" Then           .RemoveItem (i - 1)         End If       Next     End With   End If End Sub

tx12345q
質問者

補足

何度もありがとうございます。 入れてみたのですが、チェックボックスを入れても動作しなかったです。 何が悪いのか、Me定義を顧客分類に変えてみたりしたのですが私の知識が浅いため、わかりませんでした。 せっかくご教授いただいたのに申し訳ございません。

全文を見る
すると、全ての回答が全文表示されます。
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>、"分類"にあるABCDEの情報のうちDの情報を省いて表示 チェックボックスをONする事でcmb顧客分類からDを省き 選択できないようにすれば Private Sub UserForm_Initialize()   Me.cmb顧客分類.List = Array("A", "B", "C", "D", "E") End Sub Private Sub CheckBox1_Click()   If Me.CheckBox1.Value = True Then     Me.cmb顧客分類.RemoveItem 3   Else     Me.cmb顧客分類.AddItem "D", 3   End If End Sub

tx12345q
質問者

補足

回答ありがとうございます。 検索結果にあたるデータ数を、”D”を除いて表示させることで、現状を理解したいのです。 例えば”D”が商品の販売数だった場合、”D”を除くことで在庫がわかるという仕組みです。 少し違いましたが、記載内容は参考になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA マクロ 修正

    Private Sub UserForm_Initialize() Me.lbl行番号.Caption = Worksheets("顧客情報").Range("A1").CurrentRegion.Rows.Count + 1 End Sub Private Sub cmd検索_Click() frm顧客検索.Show vbModal If rtnNo > 1 Then With Worksheets("顧客情報") Me.lbl行番号.Caption = rtnNo Me.txt顧客番号 = .Cells(rtnNo, 1) Me.txt顧客名 = .Cells(rtnNo, 2) Me.txt生年月日 = .Cells(rtnNo, 3) Me.txt年齢 = .Cells(rtnNo, 4) Me.txt性別 = .Cells(rtnNo, 5) Me.txt郵便番号 = .Cells(rtnNo, 6) Me.txt住所 = .Cells(rtnNo, 7) Me.txt電話番号1 = .Cells(rtnNo, 8) Me.txt電話番号2 = .Cells(rtnNo, 9) Me.txt携帯番号 = .Cells(rtnNo, 10) End With End If End Sub Private Sub cmd登録_Click() Dim wRow As Long If Me.txt顧客番号 = "" Then MsgBox "顧客番号を入力してください。", vbExclamation + vbOKOnly, "入力エラー" Exit Sub End If If Me.txt顧客名 = "" Then MsgBox "顧客名を入力してください。", vbExclamation + vbOKOnly, "入力エラー" Exit Sub End If With Worksheets("顧客情報") wRow = .Range("A" & Rows.Count).End(xlUp).Row + 1 .Cells(wRow, 1) = Me.txt顧客番号 .Cells(wRow, 2) = Me.txt顧客名 .Cells(wRow, 3) = Me.txt生年月日 .Cells(wRow, 4) = Me.txt年齢 .Cells(wRow, 5) = Me.txt性別 .Cells(wRow, 6) = Me.txt郵便番号 .Cells(wRow, 7) = Me.txt住所 .Cells(wRow, 8) = Me.txt電話番号1 .Cells(wRow, 9) = Me.txt電話番号2 .Cells(wRow, 10) = Me.txt携帯番号 End With Unload Me End Sub エクセルのマクロを設定しました。 登録時ここでエラーがでてしまうのですがなぜでしょうか? Cells(wRow, 10) = Me.txt携帯番号 Cells(wRow, 10) = Me.txt携帯番号ここの部分を消し 登録してみると登録ができるのですが・・・ わからなくなり書き込みました 宜しくお願いします

  • エクセル フォーム マクロ

    Private Sub cmd登録_Click() '← 登録ボタン押下時の処理追加 Dim wRow As Long If Me.txtNo = "" Then '顧客番号が未入力の場合はエラー表示 MsgBox "顧客番号を入力してください。", vbExclamation + vbOKOnly, "入力エラー" Exit Sub End If If Me.txt氏名 = "" Then '顧客名が未入力の場合はエラー表示 MsgBox "顧客名を入力してください。", vbExclamation + vbOKOnly, "入力エラー" Exit Sub End If With Worksheets("顧客情報") wRow = .Range("A1").CurrentRegion.Rows.Count + 1 '← 最終行+1 .Cells(wRow, 1) = Me.txtNo 'フォームに入力された各データをシートに送る .Cells(wRow, 2) = Me.txt氏名 .Cells(wRow, 3) = Me.txt生年月日 .Cells(wRow, 4) = Me.txt年齢 .Cells(wRow, 5) = Me.txt性別 .Cells(wRow, 6) = Me.txt郵便番号 .Cells(wRow, 7) = Me.txt住所 .Cells(wRow, 8) = Me.txt電話番号1 .Cells(wRow, 9) = Me.txt電話番号2 .Cells(wRow, 9) = Me.txt携帯番号 End With Unload Me '← フォームを閉じる End Sub これで作成したのですがうまく動かず 助けてほしいです A1:M3までセル結合しそこにボタンをいろいろ配置しました A4にタイトル(No、氏名、生年月日・・・・・)を書きておいときました フォームを作成呼びだし打ったら タイトルのところがすべて置き換わってしまう 再度押すとA4が再度置換される 次の行に移ってくれなくなりました なぜでしょうか? wRow = .Range("A1").CurrentRegion.Rows.Count + 1 '← 最終行+1 この部分かと思いA1→A5に変更してみてもうまくいきません どうすればいいでしょうか?

  • VBA リストボックスについて

    VBA初心者です。どうぞよろしくお願いします。 ユーザーフォームにタブつきのリストボックスを作りたいと思っています。 リストはsheet1の中にあります。   A    B    C    D・・・ 1  NO  品名  売場 2  1  いちご  果物 3  2  みかん  果物 4  3  もも    果物 5  4  ハクサイ 野菜 6  5  キャベツ  野菜 7  6  きゅうり  野菜 8  7 9 果物のタブには、果物の品名が表示される。 1 いちご 2 みかん 3 もも 野菜のタブには、野菜の品名が表示される。 4 ハクサイ 5 キャベツ 6 きゅうり 青果のタブには、果物、野菜が表示される。 1 いちご 2 みかん 3 もも 4 ハクサイ 5 キャベツ 6 きゅうり 本を見ながら格闘しておりますが、きっと的違いで滅茶苦茶なことをしているのだと思います。 どうにも出来ず困っております。どなたか教えていただけないでしょうか。よろしくお願いします。 Private Sub UserForm_Initialize() Dim LastRow As Long Dim i As Integer Dim ListBoxNo As Integer Dim ListBox As Control Dim Listtabu(3) As Long 'タブの数 For i = 1 To 3 Listtabu(i) = 0 Next i Worksheets("sheet1").Activate With Worksheets("sheet1") LastRow = .Range("A65536").End(xlUp).Row For i = 2 To LastRow If Worksheets("sheet1").Range(Cells(i, 3)) = "果物" Then ListBoxNo = 1 Set ListBox = 果物 果物.List = Worksheets("sheet1").Range(Cells(i, 1), Cells(i, 2)).Value End If If Worksheets("sheet1").Range(Cells(i, 3)) = "野菜" Then ListBoxNo = 2 Set ListBox = 野菜 野菜.List = Worksheets("sheet1").Range(Cells(i, 1), Cells(i, 2)).Value End If If Worksheets("sheet1").Range(Cells(i, 3)) = "果物" & "野菜" Then ListBoxNo = 3 Set ListBox = 青果 青果.List = Worksheets("sheet1").Range(Cells(i, 1), Cells(i, 2)).Value End If ListBox.AddItem ListBox.List(Listtabu(LstBxNo), 0) = Worksheets("sheet1").Cells(i, 1).Value ListBox.List(Listtabu(LstBxNo), 1) = Worksheets("sheet1").Cells(i, 2).Value Listtabu(LstBxNo) = Listtabu(LstBxNo) + 1 Next End With End Sub

  • リストボックスの内容を検索したいが...

    エクセル2019を使っています。 添付画像のようにユーザーフォームにテキストボックスとリストボックスを作り、テキストボックスに入力した文字でリストボックスの内容を検索しようとコードを作成しました。 Private Sub TextBox1_Change() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row .Range("A1").AutoFilter 1, "*" & TextBox1.Value & "*" If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then Set rng = .Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible) Else Me.ListBox1.Clear Exit Sub End If End With Me.ListBox1.Clear With Me.ListBox1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With End Sub Private Sub UserForm_Initialize() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row Set rng = .Range("A2:A" & LastRow) End With With Me.ListBox1 .ColumnCount = 1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With ListBox1.ListIndex = 0 End Sub とりあえず検索はできるのですが、使用されていない文字や記号を入力したあとにバックスペースキーで入力した文字や記号を削除するとリストボックスの内容が意図した内容で表示されません。 どこを修正したらいいでしょうか。

  • リストボックスから選択したシートを削除したい

    Excel2007でマクロ作成の初心者です。 リストボックスの選択項目のワークシートを削除したいのですが、 「インデックスが有効範囲にありません。」のエラーが発生し、 先に進めません。どうしたらよろしいでしょうか? ’--------------------- Private Sub 顧客削除_Click() Application.ScreenUpdating = False Unload Me Unload DS請求フォーム Dim i As Integer With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then ' Worksheets(.list(.ListIndex)).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Activate '←ここでエラー発生 ActiveSheet.Delete End If Next i End With MsgBox "選択の顧客を削除しました。" End Sub ’------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’----------------------

  • リストボックスから削除、「いいえ」でも削除される

    Windows7 Excel2007でマクロ作成中の初心者です。 リストボックスから、シート(顧客名)を選んで削除するマクロです。 削除がうまくいくのですが、「いいえボタン」を押しても シートが削除されてしまいます。どう修正したらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") End If Next i Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True '顧客リスト.RemoveItem (顧客リスト.ListIndex) '顧客リスト.ListIndex = -1 リストボックスの項目削除 Worksheets(1).Activate End With If btn = vbYesNo Then Exit Sub End If ActiveWorkbook.Save End Sub ----------------------------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

  • VBAでコードの編集が上手くいきません

    先日、ご回答頂いたコードを元に自分でいじっているのですが上手く行きません 自分が変更したコード シート1→シート名:変更箇所 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$C$40" Then Exit Sub If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value If Target.Address <> "$C$42" Then Exit Sub If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value If Target.Address <> "$C$44" Then Exit Sub If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value End Sub シート2→シート名:リスト Private Sub worksheet_change(ByVal Target As Excel.Range) Dim i As Long, c As Long Dim h As Range, ha As Range Dim myDic As Object Set ha = Application.Intersect(Target, Range("A:C")) If ha Is Nothing Then Exit Sub Set ha = Application.Intersect(ha.EntireColumn, Range("1:1")) For Each h In ha Set myDic = CreateObject("Scripting.Dictionary") If h.Column = 1 Then c = 3 'A列→C列 If h.Column = 2 Then c = 4 'B列→D列 If h.Column = 3 Then c = 6 'C列→F列 On Error Resume Next For i = 2 To Cells.SpecialCells(xlCellTypeLastCell).Row If Cells(i, h.Column) <> "" Then myDic.Add Cells(i, h.Column).Value, Cells(i, h.Column).Value End If Next i With Worksheets("変更箇所").Cells(40, c).EntireColumn.Validation .Delete .Add Type:=xlValidateList, Formula1:=Join(myDic.keys, ",") End With Set myDic = Nothing Next End Sub シート1において$C$40または$C$42または$C$44のいずれかを変更した場合 最後に変更したセルに対し、シート2にオートフィルタ―がかかる様にしたいと思っています。 試しにシート1を以下のように編集したところ、思った動作を行ったのですが $C$40または$C$42または$C$44のいずれかのセルを空白にすると エラーがでてしまいます。 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value End Sub Then Exit Subをどう編集すれば上手く動作するでしょうか?

  • リストボックスからシートを選びアクティブにしたい

    Excel2007でマクロ作成の初心者です。 リストボックスで選択した、リスト項目のワークシートを表示したいのですが、 「インデックスが有効範囲にありません」というエラーがでます。 どうしたらよろしいでしょうか? よろしくお願いします。 ’-------------------------------- Private Sub 顧客リスト_Click() With 顧客リスト Worksheets(.list(.ListIndex - 0)).Activate’----ここでエラー発生します End With End Sub ----------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’---------------------------

  • EXCEL マクロ 

    お世話になります。 マクロは初心者です。 セルの数値を参照して、シートをアクティブにしたいのですが 下記のような繰り返しでシートが30ぐらいあるので、簡単な 表現に出来ないでしょうか。 宜しくお願いします。 Private Sub Workbook_Open() If 0 <= Worksheets(4).Range("M1") < 7 Then Worksheets(4).Activate End If If 0 <= Worksheets(5).Range("M1") < 7 Then Worksheets(5).Activate End If If 0 <= Worksheets(6).Range("M1") < 7 Then Worksheets(6).Activate End If If 0 <= Worksheets(7).Range("M1") < 7 Then Worksheets(7).Activate End If If 0 <= Worksheets(8).Range("M1") < 7 Then Worksheets(8).Activate End If If 0 <= Worksheets(9).Range("M1") < 7 Then Worksheets(9).Activate End If End Sub

  • VBAにてリストボックスに表示された文字をエクセルのセルにコピペするには

    先日、ここで教えてもらった以下の内容で、幾つかのテキストボックスに表示された内容のうち、電話番号をエクセルのセルに転記する方法が、上手くいきません。”検索"名のシート上で実行します。 過去のログを参考にしましたが、解決できませんでした。 またお世話になりますが、だれか教えてください。 Private Sub CommandButton1_Click() Dim Namae As String Dim MeNamae As UserForm Dim ken As String Namae = TextBox1.Text Set MeNamae = UserForm1 Call 検索(Namae, MeNamae) End Sub Public Sub 検索(ByVal Namae As String, ByRef MeNamae As UserForm) Dim Nagasa As Integer Dim i As Long Dim MaxRows As Long Dim kensaku As Worksheet Dim KensakuChar As String Dim ListNamae As String Dim ListChar As String Dim KBanme As Integer Dim LBanme As Integer Set kensaku = Worksheets("顧客データ") MaxRows = kensaku.UsedRange.Rows.Count Nagasa = Len(Namae) MeNamae.ListBox1.Clear For i = 3 To MaxRows ListNamae = kensaku.Cells(i, 3) KBanme = 0 LBanme = 0 Do Do While Nagasa >= KBanme KBanme = KBanme + 1 KensakuChar = Mid(Namae, KBanme, 1) If KensakuChar <> " " Then Exit Do End If Loop Do While Nagasa >= LBanme LBanme = LBanme + 1 ListChar = Mid(ListNamae, LBanme, 1) If ListChar <> " " Then Exit Do End If Loop If KensakuChar = ListChar Then If Nagasa = KBanme Then With MeNamae .ListBox1.AddItem (ListNamae) .ListBox1.List(.ListBox1.ListCount - 1, 1) = i End With End If Else Exit Do End If Loop Until Nagasa <= KBanme Next End Sub Private Sub ListBox1_Click() Dim r As Long With ListBox1 If .ListIndex > -1 Then r = .List(.ListIndex, 1) '選択した名前の行 TextBox6.Value = Worksheets("顧客データ").Cells(r, 3) 'カタカナ名 TextBox2.Value = Worksheets("顧客データ").Cells(r, 5) '漢字名 TextBox3.Value = Worksheets("顧客データ").Cells(r, 7) '住所 TextBox4.Value = Worksheets("顧客データ").Cells(r, 1) '電話番号 TextBox5.Value = Worksheets("顧客データ").Cells(r, 2) '顧客番号 End If End With End Sub Private Sub CommandButton3_Click() 'クリックすると  Worksheets("検索").Cells(, 2) ’このシートの(G2)に上記の電話番号が入力される End Sub

専門家に質問してみよう