Excel VBA質問箱 IV

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

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


1152 / 13645 ツリー ←次へ | 前へ→

【76026】(Excel2003)検索後、ListBoxに行抽出できない くら 14/8/24(日) 21:11 質問[未読]
【76027】Re:(Excel2003)検索後、ListBoxに行抽出... kanabun 14/8/24(日) 21:35 発言[未読]
【76028】Re:(Excel2003)検索後、ListBoxに行抽出... くら 14/8/24(日) 23:19 質問[未読]
【76029】Re:(Excel2003)検索後、ListBoxに行抽出... kanabun 14/8/24(日) 23:28 発言[未読]
【76031】Re:(Excel2003)検索後、ListBoxに行抽出... くら 14/8/24(日) 23:44 回答[未読]
【76033】Re:(Excel2003)検索後、ListBoxに行抽出... kanabun 14/8/24(日) 23:51 発言[未読]
【76034】Re:(Excel2003)検索後、ListBoxに行抽出... くら 14/8/25(月) 0:32 回答[未読]
【76030】Re:(Excel2003)検索後、ListBoxに行抽出... kanabun 14/8/24(日) 23:43 発言[未読]
【76032】Re:(Excel2003)検索後、ListBoxに行抽出... くら 14/8/24(日) 23:49 回答[未読]

【76026】(Excel2003)検索後、ListBoxに行抽出で...
質問  くら  - 14/8/24(日) 21:11 -

引用なし
パスワード
   マクロとコードを勉強し始めたばかりの初心者です。
状況は以下のとおりです。
Sheet2に商品名、型番、機番、商品コードを約500行ほど入力しております。
Sheet1にフォームコントロールボタンを描写し、このボタンを押すと検索窓(TextBox1,CommandButton1,ListBox1)が開くかんじです。
ここからTextBox1に商品名(A列)または商品コード(D列)の一部を全角で入力し、CommandButton1を押すとSheet2を参照し、一部でも合致した行に含まれる4列のデータすべてをListBox1に抽出表示したいというわけです。部分合致なので複数行の表示を想定し、ListBox1は横長となっています。

この一連の操作のコードが分からず困っています。よろしくお願いします。

【76027】Re:(Excel2003)検索後、ListBoxに行抽...
発言  kanabun  - 14/8/24(日) 21:35 -

引用なし
パスワード
   ▼くら さん:

>Sheet2に商品名、型番、機番、商品コードを約500行ほど入力しております。
>Sheet1にフォームコントロールボタンを描写し、このボタンを押すと検索窓(TextBox1,CommandButton1,ListBox1)が開くかんじです。
>ここからTextBox1に商品名(A列)または商品コード(D列)の一部を全角で入力し、CommandButton1を押すとSheet2を参照し、一部でも合致した行に含まれる4列のデータすべてをListBox1に抽出表示したいというわけです。部分合致なので複数行の表示を想定し、ListBox1は横長となっています。

> >Sheet1にフォームコントロールボタン

と書いてあるのに、あっち向いてホイッ のような発言で申し訳ないのですが、
フォームコントロール ではなく ユーザーフォーム でのたたき台です。

以下は UserForm1のコードです。
メニュ−[挿入]-[UserFormの挿入]でUserForm1を挿入し、
そこに

 TextBox1
 CommandButton1
 ListBox1

を配置して お試しください。

'-----------------------------------------------------------
Option Explicit
Private FRange As Range    'FilterRange
Private WkSheet As Worksheet '作業シート(非表示)

Private Sub UserForm_Initialize()
  Set FRange = Worksheets(2).[A1].CurrentRegion
  On Error Resume Next
  Set WkSheet = Worksheets("Temp")
  On Error GoTo 0
  If WkSheet Is Nothing Then
    With Worksheets
      Set WkSheet = .Add(After:=.Item(.Count))
    End With
    WkSheet.Visible = xlSheetHidden
  End If
  ListBox1.ColumnCount = 4
End Sub

Private Sub CommandButton1_Click()
 Dim ss As String
 Dim col As Long
  ss = TextBox1.Text
  If Len(ss) < 1 Then Exit Sub
  If IsNumeric(ss) Then col = 4 Else col = 1
  FRange.AutoFilter col, "*" & ss & "*"
  If FRange.Columns(1).SpecialCells(xlVisible).Count > 1 Then
    WkSheet.UsedRange.Clear
    Intersect(FRange, FRange.Offset(1)).Copy WkSheet.[A1]
    ListBox1.List = WkSheet.[A1].CurrentRegion.Value
  End If
  FRange.AutoFilter
End Sub

【76028】Re:(Excel2003)検索後、ListBoxに行抽...
質問  くら  - 14/8/24(日) 23:19 -

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

返信ありがとうございます。
途中経過ですが、
Private Sub CommandButton1_Click()で変数エラーがでるかんじで知恵を絞っているかんじです。
Sheet2の表は以下のようなかんじで
商品名   型番 機番 商品コード
軽自    I2-K 1  2001
普通自   I3-F 2  3002
トラック  I5-H 4  5004
電気自   I4-B 6  4006
トラック  I5-M 9  5009
軽トラ   IP2-G 8  2108



です。
検索ワードの想定ではトラや3002というワードで検索したいと考えています。

【76029】Re:(Excel2003)検索後、ListBoxに行抽...
発言  kanabun  - 14/8/24(日) 23:28 -

引用なし
パスワード
   ▼くら さん:

>返信ありがとうございます。
こちらこそ m(_ _)m
UserForm案、試してくださったんですね♪

>途中経過ですが、
>Private Sub CommandButton1_Click()で変数エラーがでるかんじで知恵を絞っているかんじです。
「かんじ」じゃ分りません。
どの行で、何というエラーメッセージが出るのですか?


>Sheet2の表は以下のようなかんじで
>商品名   型番 機番 商品コード
>軽自    I2-K 1  2001
>普通自   I3-F 2  3002
>トラック  I5-H 4  5004
>電気自   I4-B 6  4006
>トラック  I5-M 9  5009
>軽トラ   IP2-G 8  2108
>・
>・
>・
>です。
>検索ワードの想定ではトラや3002というワードで検索したいと考えています。

【76030】Re:(Excel2003)検索後、ListBoxに行抽...
発言  kanabun  - 14/8/24(日) 23:43 -

引用なし
パスワード
   ▼くら さん:

>Sheet2の表は以下のようなかんじで
>商品名   型番 機番 商品コード
>軽自    I2-K 1  2001
>普通自   I3-F 2  3002
>トラック  I5-H 4  5004
>電気自   I4-B 6  4006
>トラック  I5-M 9  5009
>軽トラ   IP2-G 8  2108

>検索ワードの想定ではトラや3002というワードで検索したいと考えています。

全角で「半角の商品コード」を検索するわけですか?

微調整で、以下のようにしてみてください

'-----------------------------------------------------------
Option Explicit
Private FRange As Range    'FilterRange
Private WkSheet As Worksheet '作業シート(非表示)

Private Sub UserForm_Initialize()
  Set FRange = Worksheets(2).[A1].CurrentRegion
  On Error Resume Next
  Set WkSheet = Worksheets("Temp")
  On Error GoTo 0
  If WkSheet Is Nothing Then
    With Worksheets
      Set WkSheet = .Add(After:=.Item(.Count))
    End With
    WkSheet.Name = "Temp"  '◆この行 追加を忘れていました m(_ _)m
    WkSheet.Visible = xlSheetHidden
  End If
  ListBox1.ColumnCount = 4
End Sub

Private Sub CommandButton1_Click()
 Dim ss As String
  
  ss = TextBox1.Text
  If Len(ss) < 1 Then Exit Sub
  ss = StrConv(ss, vbNarrow)
  If IsNumeric(ss) Then     '数値化可能なら 4列目
    FRange.AutoFilter 4, ss
  Else              'でなければ、1列目をAutoFilter
    FRange.AutoFilter 1, "*" & ss & "*"
  End If
  If FRange.Columns(1).SpecialCells(xlVisible).Count > 1 Then
    WkSheet.UsedRange.Clear
    Intersect(FRange, FRange.Offset(1)).Copy WkSheet.[A1]
    ListBox1.List = WkSheet.[A1].CurrentRegion.Value
  End If
  FRange.AutoFilter
End Sub

【76031】Re:(Excel2003)検索後、ListBoxに行抽...
回答  くら  - 14/8/24(日) 23:44 -

引用なし
パスワード
   kanabunさん
すいません。こういうのは正確性が大切でした。
実行してみたところ、
Private Sub CommandButton1_Click()
以下でコンパイルエラー(変数が定義されていない)

ということです。
よろしくお願いします。

【76032】Re:(Excel2003)検索後、ListBoxに行抽...
回答  くら  - 14/8/24(日) 23:49 -

引用なし
パスワード
   そうなんです。
PCに弱い人がいて、全角入力でも検索できるといいなというかんじです。
表中の数字を全角にしてしまう手も考えたのですが、表自体の更新作業がめんどくさそうということで全角でも半角でも検索できないかという案が出ました。
コードが極端に増えるなどの弊害があれば、表をいじることも考えるつもりでした。

【76033】Re:(Excel2003)検索後、ListBoxに行抽...
発言  kanabun  - 14/8/24(日) 23:51 -

引用なし
パスワード
   ▼くら さん:
>kanabunさん
>すいません。こういうのは正確性が大切でした。
そうですよ(^^)

>実行してみたところ、
>Private Sub CommandButton1_Click()
>以下でコンパイルエラー(変数が定義されていない)
>
>ということです。

Option Explicit
を宣言してありますから、宣言してない変数はみな 未定義の警告を受けます。
どの変数が (変数が定義されていない) なのですか?

【76034】Re:(Excel2003)検索後、ListBoxに行抽...
回答  くら  - 14/8/25(月) 0:32 -

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

解決しました。あらかじめ作っておいてさんざんいじったファイルに足しただけでなく、こちらの手違いで焦ってしまい、泥沼にはまっていました。

新しく最初から作り直した上でkanabunさんのコードを組み込んだところ、しっかりと動きました。申し訳ありません。
ただ、最初のコードだと4列目を検索していないようです。(4列目に漢字やひらがなを入れて実行しても表示されませんでした。)

引き続き微調整がんばって様子を見たいと思います。

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