Excel VBA質問箱 IV

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

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


7027 / 13644 ツリー ←次へ | 前へ→

【41641】複数のシートからの検索・貼付け ハルオ 06/8/18(金) 2:32 質問[未読]
【41642】Re:複数のシートからの検索・貼付け かみちゃん 06/8/18(金) 4:53 発言[未読]
【41648】Re:複数のシートからの検索・貼付け ハルオ 06/8/18(金) 10:12 発言[未読]
【41656】Re:複数のシートからの検索・貼付け ponpon 06/8/18(金) 13:41 発言[未読]
【41659】Re:複数のシートからの検索・貼付け ハルオ 06/8/18(金) 15:48 質問[未読]
【41664】Re:複数のシートからの検索・貼付け Kein 06/8/18(金) 17:06 回答[未読]
【41665】Re:複数のシートからの検索・貼付け ハルオ 06/8/18(金) 18:21 お礼[未読]

【41641】複数のシートからの検索・貼付け
質問  ハルオ  - 06/8/18(金) 2:32 -

引用なし
パスワード
     初歩的な質問で恐縮ですが、どなたかお知恵をよろしくお願いします。

下の様にシートに各データがあり、同様のデータのシートがブック内に幾つかあります。(シートの名前は色々)

これらのシート全体から別のシートに検索欄をつけ例えば「ロット」で検索してそのシートに該当する製造日、個数、品名を製造日順に表示するプログラムを組みたいのですが・・・

どうかよろしくお願いします。

 A    B    C    D
ロット  製造日  個数  品名
a001  8/10    10   qqq
a005  8/12    15   www
a007  8/17    5   eee
a010  8/10    20   rrr
a005  8/18    14   www
 ・   ・    ・  ・
 ・   ・    ・  ・



 A    B    C    D
a005 (検索ボタン)

a005  8/18   14    www
a005  8/12   15    www

【41642】Re:複数のシートからの検索・貼付け
発言  かみちゃん  - 06/8/18(金) 4:53 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> これらのシート全体から別のシートに検索欄をつけ例えば「ロット」で検索してその
> シートに該当する製造日、個数、品名を製造日順に表示する

まずは、一般操作でひとつのシートからオートフィルタで抽出して貼付けること
はできませんか?
できるなら、その操作を「マクロの記録」で記録してみましょう。

次に、その操作をすべてのシートにどのように適用するのかということになりますが、
すべてのシートの処理をするには、以下のようなコードでできます。
以下のコードは、Sheet1という名前のシート以外を処理対象とする例です。

Sub Sample()
 Dim ws As Worksheet
 
 For Each ws In Worksheets
  If ws.Name <> "Sheet1" Then
   ws.Activate
   '各シートでの処理
  End If
 Next
 MsgBox "処理が終了しました"
End Sub

これらをヒントにしていただき、わからないところがあれば、おたずねいただければと
思います。

【41648】Re:複数のシートからの検索・貼付け
発言  ハルオ  - 06/8/18(金) 10:12 -

引用なし
パスワード
   早速のご回答ありがとうございます。

ご指摘いただいているオートフィルタでの抽出なのですが、検索する元データ種類が大変多く、その中から手作業で探しているととても時間がかかってしまう状況なのです。

お知恵を頂いた折大変恐縮ですが、簡素化できる方法はないでしょうか。

【41656】Re:複数のシートからの検索・貼付け
発言  ponpon  - 06/8/18(金) 13:41 -

引用なし
パスワード
   こんにちは。

>ご指摘いただいているオートフィルタでの抽出なのですが、検索する元データ種類が大変多く、その中から手作業で探しているととても時間がかかってしまう状況なのです。

???
オートフィルタでの抽出すれば、手作業で探している ことはないと思いますが・・

新しいシート("抽出用")を用意し、そのA1に抽出したいロットを記入して実行してみてください。
ただし、シートは提示したフォーマット以外のシートがないことが条件です。
かみちゃんから提示があったようにシートを回して、オートフィルターをかけています。

Sub test()
 Dim SH As Worksheet
 Dim myCrt As String
 
 Application.ScreenUpdating = False
 '抽出用シートの設定
 With Sheets("抽出用")
  .Range("A5").CurrentRegion.ClearContents
  .Range("A5").Resize(, 4).Value = Array("ロット", "製造日", "個数", "品名")
  myCrt = .Range("A1").Value
 End With
 
 'シートを回して、オートフィルター
 For Each SH In ThisWorkbook.Worksheets
  If SH.Name <> "抽出用" Then
   With SH
    .Range("A1").AutoFilter 1, myCrt
    .AutoFilter.Range.Offset(1).Copy Sheets("抽出用").Range("A65536").End(xlUp).Offset(1)
    .AutoFilterMode = False
   End With
  End If
 Next
 
 '抽出用シートを日付順にソート
 With Sheets("抽出用")
  .Range("A5").CurrentRegion.Sort Key1:=Range("B5"), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortTextAsNumbers
 End With
 Application.ScreenUpdating = True
 MsgBox "処理が終了しました"

End Sub

【41659】Re:複数のシートからの検索・貼付け
質問  ハルオ  - 06/8/18(金) 15:48 -

引用なし
パスワード
   ご丁寧な回答どうもありがとうございます。

早速コードを組んで試してみました所、集計方法が違うシートが幾つか混じっているためか、下記の位置でエラーが発生してしまいます。

>シートを回して、オートフィルター
>   :
> .Range("A1").AutoFilter 1, myCrt

「RangeクラスのAutoFilterメソッドが失敗しました」

そこで、何度も申し訳ありませんが、複数の特定のシートだけにオートフィルターをかけるにはどのような方法があるのでしょうか。

【41664】Re:複数のシートからの検索・貼付け
回答  Kein  - 06/8/18(金) 17:06 -

引用なし
パスワード
   >For Each SH In ThisWorkbook.Worksheets


For Each SH In Sheets(Array("Sheet1", "Sheet2", "Sheet3"))

などとします。特定しているわけなので、当然ですが

>If SH.Name <> "抽出用" Then

という判定は不要になります。

【41665】Re:複数のシートからの検索・貼付け
お礼  ハルオ  - 06/8/18(金) 18:21 -

引用なし
パスワード
   かみちゃんさん、ponponさん、Keinさん

皆さんからアドバイスを頂いたおかげで何とかうまくいきそうです。

この度は色々とありがとうございました。感謝感謝です。

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