• ベストアンサー

エクセル2000マクロ検索方法

imogasiの回答

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

booka.xlsとbookb.xlsを\My Documentsに作らせてもらった。アウトプットファイルはbookbのsheet2に作らせてもらった。データのファイル(Book)が違うため勝手が違い多少苦労しました。booka.xlsのVBE画面に下記test01をコーディングしてください。Thisworkbookを使って切りぬけましたが、もっと良い答えが出ることを期待しつつ。小数例でテスト済です。結果も別ファイルにしたかったが、夜もふけて来て・・・。 Sub test01() '----最下行数を得る Workbooks.Open "c:\My Documents\bookb.xls" a = ThisWorkbook.Worksheets("sheet1").Range("a2").CurrentRegion.Rows.Count b = Worksheets("sheet1").Range("a2").CurrentRegion.Rows.Count '-----ポインターを初期設定 i = 2 '2行目からデータ。BookaのSheet1の行ポインター j = 2 '2行目からデータ。BookbのSheet1の行ポインター k = 2 '2行目からデータ。BookbのSheet2の行ポインター '---- p01: '-----終わり判定 If i > a + 1 Then GoTo p02 If j > b + 1 Then GoTo p03 '----Sheet1のキーとSheet2のキーの比較をする '----一致する時なにもしないで、 Comp: If ThisWorkbook.Worksheets("sheet1").Cells(i, 1) = Worksheets("sheet1").Cells(j, 1) Then GoTo Equal If ThisWorkbook.Worksheets("sheet1").Cells(i, 1) > Worksheets("sheet1").Cells(j, 1) Then GoTo High If ThisWorkbook.Worksheets("sheet1").Cells(i, 1) < Worksheets("sheet1").Cells(j, 1) Then GoTo Low '--------マスターとトランザクションあり。何もしない。 Equal: i = i + 1 'マスターとトランザクションを進める j = j + 1 GoTo p01 '-------- マスターなし。新規トランザクション・新顔 '------本問題ではこのケース無しとしていると見える。 High: j = j + 1 GoTo p01 '--------トランザクションなし '-------本問題では、このケースをSheet2へ書き出す Low: MsgBox ThisWorkbook.Worksheets("sheet1").Cells(i, 2) ThisWorkbook.Worksheets("sheet2").Cells(k, 1) = ThisWorkbook.Worksheets("sheet1").Cells(i, 1) ThisWorkbook.Worksheets("sheet2").Cells(k, 2) = ThisWorkbook.Worksheets("sheet1").Cells(i, 2) i = i + 1 'マスターを進める k = k + 1 GoTo p01 '-------マスターの終わり p02: For l = i To a ThisWorkbook.Worksheets("sheet2").Cells(k, 1) = Worksheets("sheet1").Cells(l, 1) ThisWorkbook.Worksheets("sheet2").Cells(k, 2) = Worksheets("sheet1").Cells(l, 2) k = k + 1 Next l ThisWorkbook.Close End '------本問題では起こり得ないと仮定 p03: End End Sub

関連するQ&A

  • EXCEL マクロ どう記述したらよいですか?

    お世話になります。 まったくの素人です。 以下のような処理をしたいと考えております。 1)1つのフォルダに AAA.xls BBB.xls CCC.xls・・・をまとめておきます。   それとは別に、フォーマット.xls を用意します。 2)AAAを開き、aというシートにある列(1列)を選択、コピーし、   フォーマットの 【F列】 に 【値貼り付け】 で貼り付ける。   AAAは閉じる。 3)BBBを開き、aというシートにある列(1列)を選択、コピーし、   フォーマットの 【G列】 に 【値貼り付け】 で貼り付ける。   BBBを閉じる。 4)CCC・・・(aというシート名は固定、コピーする列も固定で1列のみです)。 5)以下、フォルダ内の全ファイルについて、同じ処理を繰り返し、   すべて貼り付け終えたら、完了。 宿題の丸投げのようで申し訳ないのですが、ご教示いただけると 幸いです。よろしくお願いします。

  • エクセルでマッチング

    2つのエクセルファイルの内容をマッチングさせたいんですけど、 例えば、aaa.xlsとbbb.xlsというのがあって、 aaa.xlsのA列とbbb.xlsのA列にファイル名、 bbb.xlsのB列にパッケージ名が格納されていて、 aaa.xlsのA列の1行目から順に、bbb.xlsのA列と 同じファイル名が存在するかマッチングさせていき、 マッチした場合にマッチした行のパッケージ名を aaa.xlsのB列に表示させたいんですけど、 関数なりマクロなりを使ってなんとかならないでしょうか?

  • EXCELで複数行の検索

    初心者です。 Aファイルのaaa、bbbなどをキーに Bファイルを検索してできるだけ簡単にマクロ等使わずに 下記のような抽出をする方法があれば教えてください。 よろしくお願いします。 Aファイル aaa bbb ccc Bファイル(例えば「ddd」と「あ」は別セルです) ddd あ eee い aaa う fff え bbb お ggg か ccc き 結果 Aファイル aaa う bbb お ccc き

  • エクセル関数を使って検索したいです。

    やりたいことは以下の通りです。 Sheet1~Sheet15が存在します。Sheet2~Sheet15には3列で行がそれぞれ異なる表があります。例えばSheet1は5行3列、Sheet2は10行3列、Sheet4は30行3列のように。ちなみにこれらの表は行が追加されていきます。 Sheet1にも同様に3列の表があるのですが、Sheet1のB列(2行目)に、式を作りたいです。 どんな式かと言うと、Sheet1のA列(1行目)に値を入れると、それと同じ値を、Sheet2~Sheet15のA列(1行目)と同じものを探し、そのSheetのB列(2行目)の値を返すというようにしたいです。 VLOOKUPを使うといいかと思うのですが、Sheetを14個もまたいで検索したい時にIFで作るとエクセル2003なので入れ子が7個以上になってしまいうまくいきません。 ちなみに、Sheet1に入力する値はAAA1やBBB2の様にアルファベットと数字の組み合わせです。 よって、例えばSheet2のA列にはAAA1、AAA2、AAA3、AAA4の様に、Sheet2のA列にはBBB1、BBB2、BBB3、BBB4の要に入力された状態になっています。 どなたかうまく切り抜ける方法を教えてください。

  • エクセルのマクロで、別ファイルの数値を参照する方法

    現在aaa.xlsというファイルを開いていて、 そのセルA1には20070621という数値が入っています。 別にbbb_20070621.xlsというファイルがあって、 そのファイルのsheet1内の、B1の値を参照したいと思います。 bbb_20070621.xlsのようなファイルが無数にあるので、 ファイルを開かなければいけないINDIRECT関数は使いたくありません。 =INDIRECT("[bbb_"&A1&".xls]Sheet1!B1") ファイルを開かず参照できるように、 できればマクロ(VBA)で組みたいと思っています。 RangeやCellでいろいろ試してみたのですが、 どうもうまくいかず、 分厚いマニュアルにも書いてありませんでした。。 初歩的な質問ですいませんが、 どなたかよろしくお願いします。

  • excel2000マクロ記述方法

    抽出条件方法のマクロ記述 1つのファイルのシートの中にデータがあります。 例ファイル名a.xlsシート名マスター     B列 C列   D列    E列 項目名 倉庫  翻訳  ソート  非表示項目     A057 レオナ工場  1     A870 セ新港    2    Y     A887 セ日向    3 もう1つのファイル 例ファイル名B.xlsシート名WORK     A列   B列   c列    d列    E列    連結コード  品名  倉庫 出荷1  加工1  AA 0G120 0G120  A870 0 0 0 AA 0H120 0H120  A057 0 0 0 AA 0S0100 0S010  A887 0 0 0 抽出条件方法 シート名WORKのデータの中のC列と、シート名マスターのB列の倉庫を参照して 非表示項目のYが入っていない、倉庫と同じデータをシート名WORKのデータを抽出したい 場合のマクロ記述の方法を教えてください。よろしくお願いします。 (抽出表示方法) AA 0H120 0H120  A057 0 0 0 AA 0S0100 0S010  A887 0 0 0     

  • 複数のexcelファイルの置換について

    AAA.xlsというファイルの中の情報を複数のexcelファイル(A.xls、B.xls、C.xls、D.xls)でリンク付けしてあるとします。 AAA.xlsをBBB.xlsに名前を変更するとリンクが成り立たなくなってしまいます。 そこで、一括でリンクを変更する方法を教えてください。 マクロでもいいです。 =[AAA.xls]Sheet1!$A$1 これを =[BBB.xls]Sheet1!$A$1 に一括変更したいのです。 よろしくお願いします。

  • excel2000マクロ抽出方法

    2つのファイルがあります。ブック名A.XLS シート名 WORK              ブック名b.XLS シート名 SORT              ブック名A.XLS シート名 WORKに下記のデータが入っています。 AD 1300G A227550 000PA505(C列2行目) 200112(F列)200201(G列)200202(H列)200203(I列)200204(J列)200205(K列)→1行目固定データ AD 1300G A227550 000PA533(C列3行目)   ブック名b.XLS シート名 SORTに下記のデータが入っています。 AD 1300G A227550 000PA505(A列2行目)200112(E列)200201(F列)200202(G列)200203(H列)200204(I列)200205(J列) →1行目E列~J列のデータは都度変わっている AD 1300G A227550 000PA533(A列3行目)    データ抽出条件  ブック名A.XLS シート名 WORKの F列~K列の1行目の列データとブック名b.XLS シート名 SORTの  E列~J列の1行目の列データが同じで、ブック名A.XLS シート名 WORKのC列の2行目以降のコードと  ブック名b.XLS シート名 SORTのA列の2行目以降のコードが同じだったら  ブック名b.XLS シート名 WORKの E列~J列の同じ行にデータを入れる。違うときは、  ブック名b.XLS シート名 WORKのデータはそのままにする。 上記の条件を満たしたマクロの記述の仕方を教えてください。 以上よろしくお願いします。

  • エクセル マクロ 簡素化

    マクロ初心者です。 下記のデータのコピペする、マクロを使用しています。 下記にはAAAとBBBの2つのエクセルへのコピペのみしか記述していませんが、 その下に50ファイル分のファイル名、コピー元、コピー先だけが違うマクロが並んでいます。 メンテナンスや更新に手作業で行っているので、非常に時間がかかります。 例えば、別のシートにファイル名、コピー元、コピー先の一覧を作成し、 そのシートでファイル名、コピー元、コピー先を修正し、コピペができるようになるなど、 どうにかして簡素化したいのですが、どのように実現すればいいか、教えてくださると助かります。 ---------------------------------------------------------------------- Private Sub CommandButton1_Click()   Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\AAA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A1:B1").Copy wb.Sheets("CCC").Range("A1:B1").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\BBB.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A2:B2").Copy wb.Sheets("CCC").Range("A2:B2").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True 'アイテム名、コピー元、コピー先、だけがちがう、同じようなマクロが50ファイル分ある。 End Sub

  • excelマクロ 別ファイルの特定列をコピーしたい

    C:\testの配下にexcelファイル「aaa.xls」「aaa_yyyymmdd.xls」「bbbxls」があります。 「aaa_yyyymmdd.xls」は「aaa.xls」のバックアップファイルです。 又、「bbbxls」にマクロを記述しようと思います。 ☆処理内容☆ 「aaa.xls」「aaa_yyyymmdd.xls」が開いていない状態で、「aaa.xls」のシート「sheet1」内の E列をコピーして「bbbxls」のシート「sheet3」のA列に貼り付け。 「aaa_yyyymmdd.xls」のシート「sheet1」内の E列をコピーして「bbbxls」のシート「sheet3」のB列に貼り付け。 その後、張り付けたA列を正としB列と比較して、差異があった場合はB列の差異があった部分の セルに色つけをした後、「aaa_yyyymmdd.xls」をC:\test:\oldフォルダに移動する。 上記のようなexcelマクロを作成中なのですが、できなくて困っております。 有識者の方、助けを貸してください。 よろしくお願い致します。