VBAマクロでワークシートを見比べて判定する方法

このQ&Aのポイント
  • VBAマクロを使用して、ワークシートを比較し判定する方法について教えてください。
  • 具体的には、Workbook A.xlsとWorkbook B.xlsという2つのファイルがあります。
  • ワークシートAにワークシートBの情報を統合し、修正したいです。また、判定列の値によって完了か未完了か判断したいです。
回答を見る
  • ベストアンサー

VBAマクロでワークシートを見比べて判定したい

VBAマクロでワークシートを見比べて判定したい Workbook A.xlsとWorkbook B.xlsがあります。 AにBの情報をいれ、修正したい A.xls(sheet1) 番号  判定 1111   1 2222   0 3333   1 4444   1 B.xls(sheet1) 番号   3333    5555 判定の1は未完 0は完了 Bのファイルに出てくる番号は未完(1)、 出てこないものは完了(0) つまり上の結果のA.xlsは 番号  判定 1111   0 2222   0 3333   0 4444   1 5555   1 A.xlsには過去の分に併せ、Bに出てきたものすべてを出します。 マクロ初心者で基本的なことかもしれないのですが、ご教授願いますm(__)m

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

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

処理するに当たって、 既にA.xlsにある判定はリセットし、改めて判定し直す。 A.xlsに無い番号がB.xlsにあったら、A.xlsに追加する。 B.xlsに無かったら判定は0、B.xlsに有ったら判定は1とする。 番号順に並べる。 ということでよいですか? データはちゃんと詰まっていて、間に空行が無いものとして処理しています。 両方のブックを開いた状態で実行してください。 Sub test() Dim ShA As Worksheet, ShB As Worksheet Set ShA = Workbooks("A.xls").Worksheets(1) Set ShB = Workbooks("B.xls").Worksheets(1) Dim RowA As Long, RowB As Long RowA = 2 Do Until ShA.Cells(RowA, 1).Value = "" Cells(RowA, 2).Value = 0 RowA = RowA + 1 Loop RowB = 2 Do Until ShB.Cells(RowB, 1).Value = "" Dim Fnd As Range Set Fnd = ShA.Columns(1).Find(ShB.Cells(RowB, 1).Value, , , xlWhole) If Fnd Is Nothing Then With ShA.Cells(ShA.Rows.Count, 1).End(xlUp).Offset(1) .Value = ShB.Cells(RowB, 1).Value .Offset(, 1).Value = 1 End With Else Fnd.Offset(, 1).Value = 1 End If RowB = RowB + 1 Loop Columns("A:B").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1 End Sub

RENTAOSAKA
質問者

お礼

判定はご推察のとおりです。質問の仕方が悪くてすみません><; まずはお礼だけさせていただきますm(__)m

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

配列数式を復習しておりました。本御質問には無理矢理な回答だと思いますが、ご参考まで。 Sub test() Dim refRange As Range, targetRange As Range, mycell As Range With Workbooks("B.xls").Sheets("Sheet1") Set refRange = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp)) End With With Workbooks("A.xls").Sheets("Sheet1") Set targetRange = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp)) End With For Each mycell In targetRange.Offset(0, 1) mycell.FormulaArray = "=(SUM((RC[-1]=[B.xls]Sheet1!" & refRange.Address(ReferenceStyle:=xlR1C1) & ")*1)>0)*1" Next mycell targetRange.Offset(0, 1).Value = targetRange.Offset(0, 1).Value End Sub

RENTAOSAKA
質問者

お礼

違う角度でのご回答ありがとうございます^^ 今後の参考にさせていただきます。

関連するQ&A

  • シート単体の時のみマクロを有効に。

    メニュー画面となる「menu.xls」ファイルと、コードごとの管理の為の「コード.xls」ファイルがあります。 「menu.xls」はシート「メニュー」・「リスト」・「フォーマット」の構成で、この「フォーマット」シートにコードの名前をつけて保存したものが、「コード.xls」となっています。 「フォーマット」シートにはいくつかのVBAを施してあるんですが、これを 「menu.xls」として開くときには実行させず(無効化)、「コード.xls」として開くときには実行(有効化)させたいのです。 現在、「コード.xls」としてシート「フォーマット」を開いた時はマクロがWorkbook_Openで動作してくれて構わないのですが、「menu.xls」として開いた時もシート「フォーマット」のWorkbook_Openが動作してしまい、エラーが出てきてしまいます。 「フォーマット」シートに実行判定を付ければいいのでしょうか? どうしたらいいか全くわかりませんので、ご教授頂きたくお願い申し上げます。

  • エクセルのマクロでシートのコピー

    いつもお世話になっております。 エクセル2000で次のことをマクロで行いたいのです。 いくつかWorkbookが開いている状態で、シートのコピーを行うのですが、シート名やブック名はその都度違います。 具体的には、Workbook"A" に "a"、"b"、"c" の3つのシート、Workbook"B" に "f"、"g"、"h"の3つのシートがあり、 Workbook"A" の Sheet("a") を Workbook"B" の Sheet("h") の前にコピーしたいのです。 Sheets(1).Copy before:=Workbooks("B.xls").Sheets(3) ところがWorkbookの名前がその都度変わるので困っています。 ブック間の移動は ActiveWindow.ActivateNext などで行っていますがシートのコピーがどうしても分からないので お願いします。  

  • XCELのVBAマクロで次のことが実行できますか。

    XCELのVBAマクロで次のことが実行できますか。 (前提)WINDOWSで (1)MYDOCのフォルダAにExcelファイルA1.xlsからA9.xlsまで9個のファイルと、もう一つマクロBBの入ったExcelファイルB.xlsがあります。 (2)各Ai.xlsには、Aisheet(i=1カラ9)と名前のsheetが1つのみあります。 (処理したいこと) A1.xlsを開き、A1sheetを、B.xlsへcopyし、そのシートに対してマクロBBという処理を実行します。 続いて同様にA2.xlsを開き、A1sheetを、B.xlsへcopyし、そのシートに対してマクロBBという処理を実行します。 以下A9まで実行したい。 (質問)Bのマクロに新たにCCというマクロを作り、CCを実行することで、自動的に(処理したいこと)を実行してしまうようなものを作れますか。 また作るとしたらおおよそどんな風に作ればいいでしょうか。 ご回答よろしくお願いします。

  • ■マクロを使い別のワークブック&シートを参照して表示させる

    ■マクロを使い別のワークブック&シートを参照して表示させる AとBのワークブックがあり、集計をしてワークブックBシートaに( ) の中身を入れたい場合マクロで記述するにはどうしたらいいでしょうか ? ワークブックA(出荷部門報告) No. 商品番号 注文数 出荷完了(1:完了、0:未完) 1  AAA   50   1 2  BBB   30   0 3  CCC   10   1 4 DDD 20 0 ワークブックB シートa(管理) 未出荷商品番号 残必要数 必要日数 (BBB)    (15)  (1) (DDD) (19)  (19) シートb(生産部門報告) 商品番号 生産完了  BBB 10 BBB 5 CCC 10 DDD 1 シートc(調達部門報告) 商品番号 生産必要日数/1 AAA   25 BBB   30 CCC   3 DDD   1 <ワークブックBシートaに入るのは出荷未完(0)のみ> <シートb、cは追加(変更)されていきます> 質問で意味が分からない部分がありましたら、追加いたしますのでよろ しくお願い致します。

  • VBA初心者です><;教えてください・・・

    VBA初心者です><;教えてください・・・ A.xlsとB.xlsとC.xlsを開いているとして 現在、A.xlsが一番上でアクティブなのを B.xlsを1番上でアクティブにさせたい場合、 Workbook("B.xls").Activate とするとSubまたはFuncyionが定義されていませんとエラーになります。 これはどうしたらよいのでしょうか。 マクロの途中でやりたいので、Subが使えない気がするのですが。。。 宜しくお願いいたします

  • 【VBA】Vlookupを更新した後にマクロを実行

    こんばんは VBAでWorkbook_Openを使用するマクロを組んでいるのですが、 ワークシートを開くと、Vlookupが更新される前に実行されてしまうため、自分が欲しい結果とは異なるものが表示されてしまいます。 ワークシートを開くとVlookupを更新してからマクロが実行される方法はありませんか?

  • VBA(Excel):他のブックからシートごと取込みたい

    他のブックからシートを取込む(シート名を変更して)VBAがわからないのですが、どなたか詳しい方がいましたら、ご教授下さいませ。 以下を例として、ご回答いただけると幸いです。 よろしくお願いします。 ---------------------------------- 次の3つのブックが存在するとします。 a.xls b.xls c.xls a.xlsにはシートが1つだけあり、シート名は"sheet1"です。 b.xlsにはシートが1つだけあり、シート名は"sheet1"です。 c.xlsにはシートが3つあり、シート名は"sheet1"、"sheet2"、"sheet3"です。 a.xlsにVBAマクロを作り、a.xls上で実行させて、 a.xlsの"sheet1"は残したまま、 b.xlsの"sheet1"のシート名を"sheet1-b"に変更して、 a.xlsのシートとして取込み、 同様に今度は、 a.xlsの"sheet1"、"sheet1-b"は残したまま、 c.xlsの"sheet1"のシート名を"sheet1-c"に変更し、 c.xlsの"sheet2"のシート名を"sheet2-c"に変更し、 c.xlsの"sheet3"のシート名を"sheet3-c"に変更し、 a.xlsのシートとして取込み、 最終的に、a.xlsには、 "sheet1"、"sheet1-b"、"sheet1-c"、"sheet2-c"、"sheet3-c" の、5つのシートが存在するようにしたいのです。 (各シート上のデータは、a.xlsの各シートとしてすべて移行されている) ----------------------------------

  • ワークシート間の色の共有化について

    Excelで2つのワークシートA、BでIF文を使って、ワークシートAに入力してある文字をワークシートBに表示させるIF文を作りました。しかし、文字は表示されるのですが、文字の色が表示されません。 どなたかわかる方がいましたら教えてください。 よろしくおねがいします。 IF文の内容は、 =IF([ワークシートA.xls]Sheet1!$A$1=1,[ワークシートA.xls]Sheet1!$B$1,"") です。

  • 既存ワークシートにピボットテーブルを作成するマクロ

    既存のワークシートにピボットテーブルを作成するマクロを登録したいのですが、どうもマクロ実行時には指定した既存シートを参照してくれません。 記録時には既存ワークシートのA1を指定しましたが、VBAで確認すると、TableDestination:=Range("A1")となっています。 恥ずかしながら、VBAは詳しくありません。 TableDestination:=Range("A1")が作成先の指定なのでしょうか? ワークシートに作成するにはどのように指定すればいいのでしょうか?

  • 【VBA】マクロについて

    【VBA】マクロについて質問です。 マクロで複数のシートの特定のセル(A5(日付)、A7(社名)、B3(担当者)など)を別ブックのひとつのシートにまとめて、 日付 社名 担当者 シート1 A5 A7 B3 シート2 A5 A7 B3 シート3 A5 A7 B3 のように下へ下へ積み上げていくにはどうゆうマクロを組めばいいでしょうか。 同じ作業を複数のファイルで行わなければいけないため、マクロを組みたいのですが、よくわかりません>< ファイルによってシートの数が違うので、それにも対応すると有難いです。 どうぞよろしくお願いいたします。

専門家に質問してみよう