- 締切済み
エクセルVBAで数値"0"以外をリストボックスに抽出する方法を教えてください。
リストボックスに条件がマッチした場合の抽出はWorksheetFunction.Searchで抽出できたのですが、数値で0以上のリストを抽出しようとして苦労しています。抽出データのセル書式は会計で0=-で表示されています。テキストボックスに条件「-」を入れたりいろいろ試したのですがうまくいきません。良い方法があればご教授ください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
回答No.1
質問の文章判りにくい書き方ではないかな。 >リストボックスに条件がマッチした場合の抽出 どこがどこへ係るのか。 ・リストボックスは条件を選ぶツールか ・条件に該当するものを表示するツールか? 簡単なデータをあげて質問するものだ。 ーー >WorksheetFunction.Searchで抽出できたのですが 突然こんなことを持ち出しても読者にはわかるまい。 ーー >数値で0以上のリストを抽出しようとして苦労しています 文字列そっくりや、文字列含むならFindメソッドや Application.WorksheetFunction.Match が使えると思う。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1031480880 しかし、「0より大」を見つけるのは、Findでは出来なさそう。 http://www.moug.net/faq/viewtopic.php?t=43593 ーー 1行ずつ判別し。条件にあえば、リストボックスのAddItemをする、しかないと思う。 ーー 行数が多い場合は、 VBAでフィルターを使い、「0より大」を条件にし、残った行(可視セル。条件に合ったせるの行)を1つずつリストボックスのAddItemをする。
補足
すみません。いきなりの質問でした。あるデータベースの範囲から文字にマッチするリストボックスに抽出するのに次のワークシート関数で抽出しました。 Dim MatchFlag1 As Boolean Dim i As Long Dim addrow As Integer Dim Searchdate As String Searchdata = Text.Value 'リストボックスをクリア List.Clear For i = 1 To Range("database").Rows.Count - 1 If Not Text.Value = "" Then On Error Resume Next MatchFlag1 = False MatchFlag1 = (WorksheetFunction.Search(Searchdata, Range("database").cels(i, 2)) >= 0) On Error GoTo 0 Else MsgBox "texboxに入力して下さい。", vbExclamation, "入力エラー" Text.SetFocus Exit Sub MathcFlag1 = True End If '条件に該当したデータをリストアップ If MatchFlag1 Then List.AddItem Range("database").Cells(i, 1) addrow = List.ListCount - 1 List.List(addrow, 1) = Range("degabase").Cells(i, 2) で抽出できたのですが、このイメージで「数値の列で"0以上"」を抽出したいのです。文字列2列目、数値3列目です。 フィルターも思いついて使用しましたが、結局は全行が表示されてしまいました。 説明が悪く申し訳ありませんでした。勉強します。 追加ですが、ほかのフォームのリストボックスで表示列がボックスのプロパティカウントを10列以上にしても、抽出後addrowは10を超えるとエラーになりますが10列が限界なのでしょうか。 よろしくお願いします。