• ベストアンサー

この様な経験された事ありますか?

お尋ねします ユーザーフォームを使い客先データリスト(データ数:500件)から 目的の客先を抽出するのですが200件までしか抽出してくれません 抽出件数に制限があるのでしょうか? セルa1:No、b1:販売店名、c1:エンドユーザ、d1:販売店名、e1、販売店名 VBコードは以下です UserForm1にListBox1があり UserForm1をUserForm1.Showで表示させるとき Private Sub UserForm_Activate() Range("a1:c501").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _ Range("d1:d2"), CopyToRange:=Range("e1:e1"), Unique:=True End Sub としているのですが ListBox1には200件までしか表示されません ListBox1のプロパティの範囲RowSourceにe2:e501としていますのに セルd2には全て表示させるよう*を入力しています 上記だけを試してみると、ちゃんと500件、抽出するのですが実は 一寸大きなアプリケーションソフトの一部で動作させています メニュープログラム:880Kb、サブメニュープログラム:320Kb 本プログラム:1,200Kbが同時に開いています PCはデルでCPU:ペンティアム4、240GHz、メモリー512MB RAMです OS:XP(Pro)office2000(Pro)のエクセルを使用 素人考えでメモリを消費しすぎていて表示されないのかなと思っているのですが この様な経験をされた方、良い方法がありましたら、アドバイスお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 見させていただきましたが、いくつか思う点があります。 全体が見せられていないので、正確には言えませんが、 UserForm_Activate() が、今見ている限りだとしたら、もう少し工夫が必要ですね。 >客先データリスト(データ数:500件)から目的の客先を抽出するのですが200件まで >b1:販売店名、c1:エンドユーザ ?客先データリストとは、エンドユーザーのことですか? もし、そうなら、まず、VBAでは、AdvancedFilter の CriteriaRange は、その前に、書き入れるようにさせないといけませんね。それと、CriteriaRange部分は、変数にしたほうがよいです。それは、Criteria は、その書き込む内容によって、エリアのサイズが変えなくてはならないからです。 そして、例えば、初期値に、Set myCritRange = Range("D1:D2") とします。 セルd2には全て表示させるよう*を入力しています でしたら、  D 1 エンドユーザ   ←これらは手で入れません。 2 *        ←   '' となります。#1さんのこ指摘のように、販売店名のユニーク処理をされて出力されています。 以下のコードを見てください。本来は、もう少し、練り込む必要はあると思うのですが、当面の参考にならないでしょうか?それと、ユーザーフォームの場合は、Sheet名を指定したほうがよいです。それから、 >ListBox1のプロパティの範囲RowSourceにe2:e501 出力値は、Criteria部分の余裕を取ったほうがよいです。以下は、F列にしました。 Dim myCrRange As Range Dim mySh As Worksheet Private Sub UserForm_Activate()   Set mySh = Worksheets("Sheet3")   Set myCrRange = mySh.Range("D1:D2")    '出力データは、ちゃんと消さないと次の検索に出てきません。    mySh.Range("F1", mySh.Range("F65536").End(xlUp).Offset(, 2)).ClearContents    'Criteriaへの書き込み    myCrRange.Value = WorksheetFunction.Transpose(Array("エンドユーザー", "*"))    myFilterExecute myCrRange 'サブルーチンへ    ListBox1.ColumnCount = 3 '3列表示    '列が離れすぎていたら、    'ColumnWidths | 30 ; 30 ;30  'などと入れます。    'RowSource よりもListのほうが動きが速い    ListBox1.List = mySh.Range(mySh.Range("F1"), mySh.Range("F1").End(xlDown).Offset(, 2)).Value    'ListBox1.RowSource = Range(Range("F1"), Range("F1").End(xlDown).Offset(, 2)).Address End Sub 'サブルーチン Private Sub myFilterExecute(myCrRange As Range)   mySh.Range("A1", mySh.Range("A65536").End(xlUp).Offset(, 2)).AdvancedFilter _     Action:=xlFilterCopy, _     CriteriaRange:=myCrRange, _     CopyToRange:=mySh.Range("F1") ', Unique:=True End Sub '終了時 Private Sub UserForm_Terminate() Set mySh = Nothing Set myCrRange = Nothing End Sub 以下の部分がキーとなります。 Set myCrRange = mySh.Range("D1:D2") D1:D2 に入れています。 myCrRange.Value = WorksheetFunction.Transpose(Array("エンドユーザー", "*"))   ↓ 複合検索する場合。 Set myCrRange = mySh.Range("D1:E2") myCrRange.Columns(1).Value = WorksheetFunction.Transpose(Array("販売店名", "亜細亜")) myCrRange.Columns(2).Value = WorksheetFunction.Transpose(Array("エンドユーザー", "日本*")) 販売店名 亜細亜の エンドユーザー 最初の二文字が「日本」 というデータを探す、という内容です。 なお、私個人の作リ方ですと、販売店名+顧客データのデータソースを、丸出しにしません。このコードでは、シートは、非表示でも、ユーザーフォームに出力できます。

acenoh
質問者

お礼

ありがとうございます サブルーチンの CopyToRange:=mySh.Range("F1") ', Unique:=True の所をE1に書き換えれば良いのですね 解決いたしました。

acenoh
質問者

補足

大変、細かくお教えいただきありがとうございます。 新しいマクロの記録でエクセルが自動作成してくれた マクロに少し手を加えただけで満足していました。 こう言う方法もあるのかと大変参考になりました。  早速コピーさせていただき実行しましたが 抽出はするのですがListBox1に1列目のNoが表示されるのですが2列目のエンドユーザを表示させるのには どこを書き換えれば良いのでしょうか よろしくお願いいたします。

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

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

提示されたソースとListBox1にどのような関わりがあるか読み取れませんが、、、 販売店名が重複しているのでは? Unique:=True で重複レコードを無視してますので。

acenoh
質問者

補足

ありがとうございます UserForm1の中にListBox1がありシート上のCommandButtonで表示させています Sub ユーザフォーム表示()  UserForm1.Show End Sub 販売店が販売した先がエンドユーザとしていますが 重複しない販売店数だけ表示させ、その中から選択させるようにしています。

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

関連するQ&A

  • >この様な経験された事ありますか?

    再度 Wendy02さんにお尋ねしたいのですが 前回の回答大変参考になりました。 新規bookでお教えいただいたマクロ動作する事を確認 しましたが、いざ目的のプログラムに移植しましたら UserForm1のListBox1には2列目が表示されてしまうのです 1列目、販売店名 2列目、販売店よみ(前回エンドユーザとしていた所です)勿論教えていただいた myCrRange.Value = WorksheetFunction.Transpose(Array("エンドユーザー", "*"))のエンドユーザーは販売店名に変更しています。 どうしても2列目の"販売店よみ"が表示されます どこを変更すれば"販売店名"をListBox1に表示させられますでしょうか? よろしくお願いいたします。

  • Excel マクロ リストボックス複数選択

    いろいろ拝見させていただいているのですが 理解が低いのが原因で困っています。 データのシートがあります。 ・B列には、起点となる人の名前が記載(300名ほど) ・データの入っている列は、A:CE データシートでB列にてオートフィルタをかけ 抽出シートに転記したい。 抽出シートでは、ユーザーフォームを組みました。 オプションボタン1 単一選択 オプションボタン2 複数選択 オプションボタン3 拡張選択 リストボックス(2・3に対して) コマンドボタン   終了 とした場合、単一選択はできたのですが 複数選択の場合 該当数が「0」の表記となってしまい、うまくいきません。 同じような質問が…というお返事があることを承知でお伺いしています。 いただいた回答を基に、勉強をしていきたいと思っていますので なにとぞよろしくお願い申し上げます。 Private Sub UserForm_Initialize() ListBox1.ColumnCount = 1 'リストボックスの列は1 ListBox1.BoundColumn = 0 'ListIndexの値(行数)を使用する ListBox1.MultiSelect = 0 '最初は単一選択状態にする ListBox1.RowSource = 'リストのソース ListBox1.ColumnHeads = True '列見出し表示 OptionButton1.Value = -1 'オプションボタン1を選択状態にする End Sub Private Sub OptionButton1_Click() ListBox1.MultiSelect = fmMultiSelectSingle '単一選択状態にする End Sub Private Sub OptionButton2_Click() ListBox1.MultiSelect = fmMultiSelectMulti '複数選択状態にする End Sub Private Sub OptionButton3_Click() ListBox1.MultiSelect = fmMultiSelectExtended '拡張(連続)選択状態にする End Sub Private Sub ListBox1_Click() 'リストボックスがクリックされたとき(単一選択) Dim 条件 As String 条件 = UserForm1.ListBox1.Text '氏名 With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End Sub Private Sub CommandButton1_Click() '選択終了ボタンがクリックされたとき(複数・拡張選択) Dim 条件 As String Dim lastRow As Long With ListBox1 If .ListIndex = -1 Then Exit Sub '何も選択されていない For 条件 = 0 To .ListCount - 1 If .Selected(条件) Then '行選択あり With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End If Next End With End Sub Private Sub UserForm_Deactivate() Unload UserForm1 '×ボタンを押したら、ユーザーフォームのunloadをする End Sub

  • VBA ユーザーフォーム リストボックス

    教えてください。 現在下記のようなコードでリストボックスに対象セルの値を表示しています。 Private Sub UserForm_Initialize() ListBox1.List = Range(Range("M5"), Cells(Rows.Count, 14).End(xlUp)).Value End Sub この時、例えば別シート(仮にsheet3)のセルを表示したい場合 どのようにすればいいでしょうか? ListBox1.List = sheets("sheet3").Range(Range("M5"), Cells(Rows.Count, 14).End(xlUp)).Value としてもエラーになってしまいます。 よろしくお願いします。

  • エクセルのマクロ コンボボックス他について

    下記のプログラムでユーザーフォームを作成しました。 まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。 しかし、エラーは出ていないので文法的には合っているようにおもいます。 それだけに、どこが違うのか尚更わかりません。 なお、Unload UserForm1 を Unload UserForm にした場合、 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を UserForm にした場合、 「実行時エラー424、オブジェクトが必要です。」のエラーが出ます。 どこが悪いのかわかりません。 どなたか、教えてください。 なお、エクセルは2003、OSはXPです。 Private Sub ComboBox1_Change() End Sub Private Sub ComboBox2_Change() End Sub Private Sub ComboBox3_Change() End Sub Private Sub CommandButton1_Click() Unload UserForm1 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value Unload UserForm1 Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value Unload UserForm1 Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value End Sub Private Sub UserForm_initialize() With ComboBox1 .AddItem "U" .AddItem "K" .AddItem "E" End With With ComboBox2 .AddItem "A" .AddItem "B" .AddItem "C" End With With ComboBox3 .AddItem "D" .AddItem "E" .AddItem "F" End With End Sub

  • リストボックスで選択した項目に該当するデーターをラベルに表示する

    よろしくお願いします ユーザーフォームにリストボックスが2つ ラベルが1つ 配置しています。 リストボックス1で選択した項目に該当するリストを リストボックス2に表示する。 次に リストボックス2で選択した項目に該当するデーターを ワークシートのセル(E5:E300)から選んで ラベル1に表示する。 このようにしたいのですがエラーが出ます。 Dim LastRow As Long Dim DstRow As Long Const FstRow As Long = 5 Dim MctRow As Long   -  -  - Private Sub UserForm_Initialize() With Me.ListBox1 .RowSource = Worksheets("入力").Range("A5:A300").Address(External:=True) End With End Sub   -  -  - Private Sub ListBox1_Click() Dim j As Integer Dim RowCnt As Long With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row ListBox2.Clear For RowCnt = 5 To LastRow If ListBox1.List(ListBox1.ListIndex) = .Cells(RowCnt, 3).Value Then ListBox2.AddItem For j = 0 To 1 ListBox2.List(ListBox2.ListCount - 1, j) = .Cells(RowCnt,5 + j).Value Next j End If Next RowCnt End With End Sub   -  -  - Private Sub ListBox2_Click() Dim SrcCode As Long SrcCode = ListBox2.List(ListBox2.ListIndex, 0)     ↑    ↑    ↑ ここでエラーになります。 実行時エラー 型が一致しません と表示されます With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row MctRow = Application.WorksheetFunction.Match(SrcCode, .Range("E5:E" & LastRow), 0) + 5 Label1 = Format(.Cells(MctRow, 5)) End With End Sub

  • VBA リストボックス  フォーマット

    現在下記のコードでリストボックスに表示をしていますが フォーマットを決めたい場合どのようにすればよいでしょうか? Private Sub UserForm_Initialize() With ThisWorkbook.Sheets("作業一覧参照") ListBox1.List = Range(.Range("L5"), .Cells(Rows.Count, 14).End(xlUp)).Value End With End Sub 現在はの表示のされかたは yyyy/m/d h:mm:ss です。 使用したいフォーマットは yyyy/m/d h:mm です。

  • 実行エラー'424' ????

    エクセルでユーザーフォームを作成しました。 (オブジェクト名) UserForm7 です。 これを 開くマクロは Sub 受入フォームの表示() UserForm7.Show End Sub です。 すると 実行エラー'424' オブジェクトが必要です。と デバックします。 ちなみにUserForm1も作成してあり マクロは Sub 仕入先マスタ表示() Dim mytbl As Range Set mytbl = Worksheets("T_仕入先").Range("仕入先リスト1") UserForm1.Caption = "仕入先選択" UserForm1.Label1.Caption = "■仕入先一覧■" With UserForm1.ListBox1 .ColumnCount = mytbl.Columns.Count .ColumnWidths = "2cm;3cm" .List = mytbl.Value End With UserForm1.Show   End sub は問題なくフォームが表示します。 どこがわるいのでしょうか?

  • フォームのリストボックスに値を表示させたい

    VBA フォームのリストボックスに値を表示させたい A1→aaa A2→bbb リストボックスに上記の値を表示させたいなら、 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "Sheet1!A1:A2" End Sub で出来ますが、シート上のセルで表示する値を指定するのではなく、VBA上で、リストボックスに表示させる値を指定したいのです。 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "aaa,bbb" End Sub を実行すると、VBA実行時エラー380になってしまいます。 UserForm1.ListBox1.RowSource = "aaa;bbb" もダメでした。 ご回答よろしくお願いします。

  • ListBoxのBackColor変更

    EXCEL2007のVBAにて質問です。 ユーザーフォームにリストボックスを配置して、選んだ物によって リストボックスの背景色を変更しようとしているのですが、うまくいきません。 例えばlistbox1を以下の様にセットし、 Private Sub UserForm_Initialize() UserForm1.ListBox1.AddItem ("ピンク") UserForm1.ListBox1.AddItem ("白") End Sub 下記の通り選んだ項目で背景色を変えたいのですが、 Private Sub ListBox1_Click() '選んだ項目で色変え If UserForm1.ListBox1.ListIndex = 0 Then UserForm1.ListBox1.BackColor = RGB(255, 128, 128) 'ピンクなら背景をピンクに Else UserForm1.ListBox1.BackColor = RGB(255, 255, 255) '白なら背景を白に End If End Sub クリックして項目を選択しても背景の色が変わりません。 何か見落としている事があるでしょうか? 又はやり方が悪いのでしょうか? お教え頂けると助かります。 以上、宜しくお願い申し上げます。

  • VBAでユーザーフォームのcaption表示

    VBAを初めたばかりです。 VBAでユーザーフォームを作成したのですが ユーザーフォームプロパティのcaptionで入力しても 下記プログラムで入力しても表示されません。 VBA作成時の画面にはしっかりと「項目」と 表示されていますが、プログラムを実行してユーザーフォームを 呼び出すと何も表示されていません。 ご教授ください。 Private Sub UserForm_Initialize() UserForm1.Caption = "項目" With ListBox1 .AddItem "1" .AddItem "2" End With End Sub

迷惑メール:脅迫
このQ&Aのポイント
  • アラーム - ハッキングされ、情報と写真が盗まれました。
  • 迷惑メールが届き、送金を要求される内容のものです。
  • 要求された送金は低価格な取引であり、48時間以内に行われる必要があります。
回答を見る

専門家に質問してみよう