別ファイルから一致する項目を探し、
一致していれば抜き出しをする方法が
わかる方いましたらよろしくお願いいたします。
ファイル① シート①
A B C
ab01 2000 りんご
ab09 1500 ぶどう
ファイル① シート②
A B C
ac07 1300 りんご
ac13 1600 みかん
ファイル① シート③
A B C
ad25 2000 みかん
ad12 1600 ぶどう
ファイル②
A B C
ab01 3600 ぶどう
ab02 2100 みかん
ac13 1200 りんご
ac15 1500 りんご
ad01 1000 みかん
ad09 1500 ぶどう
このようなデータがあって、
ファイル②のA列の値が、
ファイル①のA列同じ数字があれば
ファイル②の値を全て抜き出す。
この場合だと、
ab01 3600 ぶどう
ac13 1200 りんご
B列 C列は一致していません。
ファイル①は各シートごとに頭の文字が一緒です。
初めはファイル②のD列に関数使って
一致と表示してフィルタでやろうかと思いましたが、
それも私の技量ではできず…
別シートに抜き出せるとベストなのですが、
わかる方いましたらご教授ください。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
いくつか質問があります。
1)ファイル①のファイル名は、何でしょうか。
2)ファイル②のファイル名は、何でしょうか。
3)ファイル①のシート①②③のシート名は何でしょうか。
4)ファイル①②とも見出しの有無はどうなっていますか。(1行目は見出しですか、データですか)
5)ファイル②のデータのあるシート名はなんですか。
6)別シートに抜き出すのは、ファイル②の別シートで良いですか。その場合、シート名はどうしますか。
7)二つのファイル①②は、同じフォルダ内にありますか。
8)マクロで実行しても良いですか。
No.3
- 回答日時:
「各シートの見出し行は空白」とのことですが、それなりの名称を設定しましょう(全シート同じ見出しにしてください)。
それが可能であれば、こんな感じで行けると思います。
ファイル②の標準モジュールに下記のマクロを張り付けて下さい。
ちなみに、下記コード中のBook1、Book2、および、SheetXは、alluvさんの環境に合わせて修正が必要です。
Sub Macro1()
Dim wbMoto As Workbook
Dim wsSaki As Worksheet
Set wbMoto = Workbooks("Book1")
Set wsSaki = Workbooks("Book2").Sheets("Sheet1")
wbMoto.Sheets("Sheet1").Copy After:=wsSaki.Parent.Sheets(wsSaki.Parent.Sheets.Count)
With ActiveSheet
wbMoto.Sheets("Sheet2").UsedRange.Copy _
Destination:=.Cells(Rows.Count, "A").End(xlUp).Offset(1)
wbMoto.Sheets("Sheet3").UsedRange.Copy _
Destination:=.Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Range("A:C").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=wsSaki.Range("A1:A" & wsSaki.Range("A1").End(xlDown).Row), _
CopyToRange:=.Range("D1"), Unique:=False
.Columns("A:C").Delete Shift:=xlToLeft
End With
End Sub
No.4
- 回答日時:
"受注管理"の標準モジュールに以下のマクロを登録してください。
登録後、保存する場合は、拡張子がxlsmになるので、ファイル名は"受注管理.xlsm"になります。
-----------------------------------------
Option Explicit
Public Const trgBook As String = "管理番号付属実績.xlsx"
Public Const mainBook As String = "受注管理.xlsm"
Public Sub 受注実績集計()
Dim mydic As Object
Dim sheets As Variant
Dim mainSheets As Variant
Dim i As Long
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxRow1 As Long
Dim row1 As Long
Dim row2 As Long
Dim key As String
If IsOpenWorkBook(trgBook) = False Then
MsgBox (trgBook & "がオープンされていません。処理を中止します。")
Exit Sub
End If
Set mydic = CreateObject("Scripting.Dictionary")
sheets = Array("仙台支店", "福岡支店", "名古屋支店")
'管理番号付属実績を処理
Workbooks(trgBook).Activate
For i = 0 To UBound(sheets)
If ExistsWorkSheet(sheets(i)) = False Then
MsgBox (sheets(i) & "が存在しません。処理を中止します。")
Exit Sub
End If
Call chumon_shukei(sheets(i), mydic)
Next
'受注管理を処理
Workbooks(mainBook).Activate
mainSheets = Array("Sheet1", "28年実績照会")
'ワークシートの存在チェック
For i = 0 To UBound(mainSheets)
If ExistsWorkSheet(mainSheets(i)) = False Then
MsgBox (mainSheets(i) & "が存在しません。処理を中止します。")
Exit Sub
End If
Next
Set sh1 = Worksheets(mainSheets(0))
Set sh2 = Worksheets(mainSheets(1))
sh2.Cells.Clear '実績照会のクリア
maxRow1 = sh1.Cells(Rows.Count, 1).End(xlUp).row ' Sheet1の最終行を求める
row2 = 2
'Sheet1を2~最終行まで繰り返す
For row1 = 2 To maxRow1
key = sh1.Cells(row1, 1).Value
If mydic.exists(key) Then
sh1.Rows(row1).Copy (sh2.Rows(row2))
row2 = row2 + 1
End If
Next
MsgBox ("処理終了")
End Sub
'注文の集計
Private Sub chumon_shukei(ByVal sheetname As Variant, ByVal mydic As Object)
Dim sh As Worksheet
Dim maxrow As Long
Dim row As Long
Dim key As String
Set sh = Worksheets(sheetname)
maxrow = sh.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
For row = 2 To maxrow
key = sh.Cells(row, 1).Value
mydic(key) = True
Next
End Sub
'ワークブックのオープンチェック
Private Function IsOpenWorkBook(ByVal bookName As String) As Boolean
IsOpenWorkBook = False
Dim wk As Workbook
For Each wk In Workbooks
If wk.Name = bookName Then
IsOpenWorkBook = True
Exit Function
End If
Next
End Function
'ワークシートの存在チェック
Public Function ExistsWorkSheet(ByVal sheetname As String) As Boolean
Dim ws As Worksheet
ExistsWorkSheet = False
For Each ws In Worksheets
If ws.Name = sheetname Then
ExistsWorkSheet = True
Exit Function
End If
Next ws
End Function
----------------------------------------------
マクロ実行時は、"管理番号付属実績.xlsx"(管理番号付属実績.xlsmではありません)をオープンした状態で、
マクロ「受注実績集計」を実行してください。
以下の前提で作成しています。
ファイル①:管理番号付属実績.xlsx
シート①:仙台支店
シート②:福岡支店
シート③:名古屋支店
ファイル②:受注管理.xlsm
シート①:Sheet1 ・・・・データのあるシート名
シート②:28年実績照会 ・・・・空のシート(ここへ作成)
上記のファイル、シートがない場合はエラーになります。(28年実績照会も空のシートを作っておいてください)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内のファイル全てに対して、シート名・ファイル名を変更する方法(マクロ VBA) 2 2022/04/02 10:56
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) エクセルの表示形式について教えてください あるセルの「A」という値と、別のセルの「B」という値を組み 4 2023/02/21 21:55
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
エクセルの2つのシートを並び...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
EXCELの「シートの見出し」のフ...
-
エクセルのシート連番の振り直し
-
エクセル シート同士の引き算
-
ワークシートそのものの色を変...
-
InputBoxに入力した言葉をシー...
-
エクセルのシー名を二段表示に...
-
エクセル、別のシートの表をポ...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
DATE関数 4月31日などのあ...
-
【ExcelVBA】マクロの入ったシ...
-
Accessのテーブルを既存のExcel...
-
accessへエクセルの複数のシー...
-
エクセルの非表示シートを一括表示
-
Numbersについてお伺いです。 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報
ご回答ありがとうございます。
補足いたします。
⑴管理番号付属実績
⑵受注管理
⑶①仙台支店②福岡支店③名古屋支店
⑷なにも入っていません。二行目からデータが入っているだけです。
⑸シート1
⑹28年実績照会
⑺検証結果というファイルに、①はそのままエクセルで。②は検証結果-実績確認ファイルの中にはいっています。
⑻よろしくお願いいたします。
以上、お手数ですがよろしくお願いいたします。