|
▼グライダーマン さん:
こんばんは。
>>
>>> A B C D E
>>> 日付 No 設備名 処置内容 交換部品
>>>3/1 1 ・ ・ ・
>>> ・ 3 ・ ・ ・
>>>3/3 1 ・ ・ ・
>>> ・ 7 ・ ・ ・
>>> ・ 2 ・ ・ ・
>>> ・ 4 ・ ・ ・
>>> ・ 3 ・ ・ ・
>>> ・ ・ ・ ・ ・
>>>
>>>上記のような感じで下方向(Sheet1)へ毎日入力していきます。
>>>そこでユーザーフォームのテキストボックスに検索したい番号(B列)を入力し、
>>>その番号全部の行を(Sheet2)に貼り付けたいと思います。
>>>(上記の例では1を条件にすれば3/1と3/3の行がSheet2に貼り付けられます。)
>>>VBAに挑戦してやっと3ヶ月になりますが、どうも難しくてわかりません。
>>>どなたか教えてください。
>>ユーザーフォーム(Userform1)には、
>> テキストボックス(Textbox1)
>> コマンドボタン(Commandbutton1)
>>のふたつのコントロールを貼付けて下さい。
>>
>>テキストボックスに検索番号を入力します。
>>コマンドボタンのクリックで検索開始です。
>>標準モジュールに
>>'=========================================================
>>Sub main()
>> UserForm1.Show vbModeless
>>End Sub
>>
>>フォームモジュールに
>>'=========================================================
>>Private Sub CommandButton1_Click()
>> Worksheets("sheet2").Cells.ClearContents
'Sheet2の全てのセルをクリア
>> With Worksheets("sheet1")
>> .[j1].Value = .[b1].Value
'Sheet1のセルJ1にフィルタ条件の見出し項目・・、つまり「No」という文字列をセット
>> .[j2].Value = TextBox1.Text
'Sheet1のセルJ2に抽出番号をセット
>> With .Range("a1", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 5)
'Sheet1のA列を基準にして、データの入力範囲を見つけています
>> .AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[sheet1!j1:j2], _
>> CopyToRange:=[Sheet2!a1]
'フィルタ処理実行 フィルタ結果をSheet2のセルA1にコピーする
>> End With
>> End With
>>End Sub
>ichinoseさん、お答えどうもありがとうございます。
>このコードを入力して実行してみましたが、
><RangeクラスのAdvancedFilterメソッドが失敗しました>
>とエラーが出ました。
>それを無視して実行してみましたが、抽出されずにSheet1のデータがSheet2に貼り付けられました。私のやり方が悪いのかも知れませんが。
>それとコードに説明文を付け加えてもらえませんかちょっと私には難しい
>ところが多々有りました。
>この質問が解決したら、一段落してもう少し自分でスキルアップしてみたいと思います。
>どうぞよろしくお願いします。
[j1]は、Range("j1")と同じだと思って下さい。
Range〜と記述するより、簡単なのでセルが確定しているときは愛用しています。
><RangeクラスのAdvancedFilterメソッドが失敗しました>
のエラーがどうすれば出るのか探ってみましたが・・・。
.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[sheet1!j1:j2], _
CopyToRange:=[Sheet2!a1]
この辺のシート名等は、間違っていませんよね?
それから、既存のデータで試すのは後にして、
まず、新規ブックに適当なサンプルデータを作成して
試してみて下さい。
尚、エラーの原因がまだわかっていませんのでExcelのバージョン等も
教えて下さい。
私の方でも再確認しましたが、動いていますが・・・。
|
|