• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excel2000マクロ記述方法)

Excel2000マクロ記述方法と抽出条件方法のマクロ記述

このQ&Aのポイント
  • Excel2000を使用して、特定の条件に基づいてデータを抽出する方法について学びます。
  • シート名WORKのデータの中の特定の列と、シート名マスターの特定の列の値を比較し、一致するデータを抽出する方法をマクロ記述します。
  • 非表示項目がYではなく、倉庫と同じ値のデータを抽出するマクロの記述方法を説明します。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

質問の表がよく分からず、以下のようにしています。  2つのシートとも1行目は項目名、  ファイル名B.xlsシート名WORKの  C列(倉庫) と  ファイル名a.xlsシート名マスター B列(倉庫) を照合して、   2つの項目内容が完全に一致した場合、    マスターE列(非表示項目)に『Y』(半角Y)が入っていなければ、    シート名WORKのA列からF列を抽出して、シート名PICKに書いています。      どう見ても私には6列分に見えたので6列取り出しています。      (『PICK』は勝手につけたシート名です。状況に合うように変更して下さい) Book名やシート名の『 "a.xls"、"マスター"、"b.xls"、"WORK"、"PICK" 』については、状況に合うよう変更して下さい。 ブックやシートの定義部分が長くなってしまいました、実際プログラムらしいのはFindくらいでしょうか。 この例でいえば、Book"b.xls"に標準モジュールを挿入し、下記コードをコピーして貼り付けます。ご参考に。(当方、Excel2000です) '抽出するシートの標準モジュールに貼り付け Sub 抽出()   Dim bkMS As Workbook    'マスターのBookを定義   Dim wsMS As Worksheet    'マスターのシートを定義     Set bkMS = Workbooks("a.xls")     Set wsMS = bkMS.Worksheets("マスター")   Dim rgFind As Range     '検索範囲を定義     Set rgFind = wsMS.Range("B2:B" & wsMS.Range("B65536").End(xlUp).Row)   'ワーク  Bookとシートの定義   Dim bkWK As Workbook    'データのBookを定義   Dim wsWK As Worksheet    'データのシートを定義   Dim wsPK As Worksheet    'データの抽出結果の出力シートを定義     Set bkWK = Workbooks("b.xls")     Set wsWK = bkWK.Worksheets("WORK")     Set wsPK = bkWK.Worksheets("PICK")   Dim rgLook As Range     '検索で見つかったセル(マスタのB列)   Dim rwWK As Long      'データ行カウンタ   Dim rwMS As Long      'マスタ行カウンタ   Dim rwPK As Long      '抽出行カウンタ   Dim KMK As Integer     '出力項目カウンタ   Const KMKnum = 6      '出力項目数   rwWK = 2: rwMS = 2: rwPK = 0   '出力シートをクリアする   wsPK.Cells.ClearContents   'データシートのC列がなくなるまで続ける   While wsWK.Cells(rwWK, 3) <> ""     'マスタを調べる     Set rgLook = rgFind.Find(What:=wsWK.Cells(rwWK, 3).Text, LookAt:=xlWhole)       '見つかったら       If Not rgLook Is Nothing Then         '『非表示項目』が『Y』でなかったら抽出         If rgLook.Offset(0, 3) <> "Y" Then           rwPK = rwPK + 1           For KMK = 1 To KMKnum             wsPK.Cells(rwPK, KMK) = wsWK.Cells(rwWK, KMK)           Next         End If       End If     rwWK = rwWK + 1   Wend   wsPK.Select   MsgBox "抽出が終了しました。" End Sub

noname#72697
質問者

補足

ありがとうございました 実際やってみたのですが少し教えてください。 シート名workは列がA列からR列の18列あります。 ファイル名a.xlsシート名マスター B列(倉庫) は3行目から データが入ってます。 マスターE列(非表示項目)に『Y』(半角Y)が入っている。 上記を踏まえて 下記の所を修正して動かしました。  Const KMKnum = 18    '出力項目数  Set rgFind = wsMS.Range("B3:B" & wsMS.Range("B65536").End(xlUp).Row) PICKのシートに抽出されてきたのですが、マスターE列(非表示項目)に『Y』(半角Y)が入って いる倉庫も出てきました。 後どこを修正すれば良いのでしょうか教えてください。 後 rwWK = 2: rwMS = 2: rwPK = 0 ここの意味がわかりません。 PICKのシートに抽出する行は2行目から出したいのですが。1行目はworkシートの項目名を入れたいのですが よろしくお願いします。