• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数ブックから指定のデータを抽出してリストにしたい)

複数ブックからデータを抽出してリストを作成する方法

queuerev2の回答

  • ベストアンサー
  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

回答の続きです。 マクロ本体の動作に必要なFunctionプロシージャです。 これもリストのあるブックの標準モジュールに置いて下さい。 'リストに新しい地区を挿入し、その領域を返す Function InsArea(ByVal ListSheet As Worksheet, ByVal AreaName As String, _ ByVal RowPosition As Long, ByVal DataRowsCount As Long) As Range Dim RU As Long Dim RL As Long RU = RowPosition RL = RowPosition + DataRowsCount ListSheet.Range("b" & RU & ":d" & RL).Insert xlShiftDown ListSheet.Range("b" & RU & ":d" & RU).Merge ListSheet.Range("b" & RU).Value = AreaName If DataRowsCount <= 0 Then Set InsArea = ListSheet.Range("b" & RU & ":d" & RU) Else Set InsArea = ListSheet.Range("b" & RU + 1 & ":d" & RL) End If End Function '地区のデータ領域を返す。 '引数はデータ領域左上のセル '最下行は、下に結合セルがあればその前、 'なければデータが入力されている最下行のセルの1つ下 '列数は3 Function GetDataArea(DataAreaUL As Range) As Range Dim MergedCells As Range Dim Lowest As Range Dim r As Range Dim cc As Long Dim Sh As Worksheet cc = 3 Set Sh = DataAreaUL.Parent Set MergedCells = FindMergedAll(DataAreaUL.EntireColumn) If MergedCells Is Nothing Then 'set Lowest = GetLowest(DataAreaUL) Set Lowest = Sh.Cells(Sh.Cells.Rows.Count, _ DataAreaUL.Column).End(xlUp).Offset(1) Else Set r = Intersect(Sh.Range(DataAreaUL, _ Sh.Cells(Sh.Cells.Rows.Count, _ DataAreaUL.Column)), MergedCells) If r Is Nothing Then 'set Lowest = GetLowest(DataAreaUL) Set Lowest = Sh.Cells(Sh.Cells.Rows.Count, _ DataAreaUL.Column).End(xlUp).Offset(1) Else Set Lowest = r(1).Offset(-1) End If End If Set GetDataArea = Sh.Range(DataAreaUL, _ Sh.Cells(Lowest.Row, Lowest.Column + cc - 1)) End Function '結合セルの検索 'セル範囲を引数にするとその範囲で検索開始、引数なしで次を検索 'IsMissing(Range1)使用のためRange1はVariant Function FindMergedInRange(Optional ByVal Range1 As Variant) As Range Static First As Range Static Previous As Range Static RangeToFind As Range Dim Found As Range If Not IsMissing(Range1) Then Application.FindFormat.Clear Application.FindFormat.MergeCells = True Set RangeToFind = Range1 Set First = RangeToFind.Find(What:="", SearchFormat:=True) If First Is Nothing Then Set FindMergedInRange = Nothing Else Set FindMergedInRange = First.MergeArea End If Set Previous = First Else Set Found = RangeToFind.Find(What:="", after:=Previous, _ SearchFormat:=True) If Found.Address = First.Address Then Set FindMergedInRange = Nothing Else Set FindMergedInRange = Found.MergeArea Set Previous = Found End If End If End Function '結合セルをすべて検索 Function FindMergedAll(ByVal Range1 As Range) As Range Dim AllFound As Range Dim Found As Range Set AllFound = FindMergedInRange(Range1) If Not AllFound Is Nothing Then Do Set Found = FindMergedInRange() If Found Is Nothing Then Exit Do Else Set AllFound = Union(AllFound, Found) End If Loop End If Set FindMergedAll = AllFound End Function 'すべて検索した結合セルの中の文字列を検索 Function FindStrInMergedAll(ByVal Str As String, ByVal Range1 As Range, _ Optional ByVal LookAt As XlLookAt = xlWhole) Dim MergedAll As Range Set MergedAll = FindMergedAll(Range1) If MergedAll Is Nothing Then Set FindStrInMergedAll = Nothing Else Application.FindFormat.Clear Set FindStrInMergedAll = MergedAll.Find(What:=Str, LookAt:=LookAt) End If End Function

schalke_04
質問者

お礼

お礼が遅くなって申し訳ありません。 詳細な回答、有難うございました。 いただいた回答を丸写しで終わらないように、しっかり勉強させていただこうと思います。

関連するQ&A

  • エクセルでフォルダ内のBookのセルの参照

    いつもお世話になっております。 決まったフォルダ内の複数のBook「個別情報(製品名)」のフルパスを別のBook「リスト」のA列に入れると、「個別情報(製品名)」のシート(規格)の指定のセルを「リスト」のシート(規格一覧)に行方向に引っ張ってくるようにしたいのですが。 1度に参照するシートは5-10枚。 参照するセル番地は決まっていて、多いと15個程度。 参照セルは「リスト」のシート(規格一覧)の最下行のセルに入るようにしたい。 閉じたままのBookのシートを指定して、セル参照が出来ることを少し前に知ったのですが、当方には難易度が高そうで躊躇していましたが最近コロナで時間が出来たのでチャレンジしてみようかと。 当方永遠のVBA初心者ですのでその辺もご配慮の上よろしくお願い致します。

  • 複数のExcelブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 全く同じものがあれば、そのアドレスを回答いただくだけでも助かります。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\\share\target」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内の「概要」シートの「C3」セルで統一されています。 【抽出一覧作成イメージ】 ・「集約.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元C3セルの値。 ・C3セル値を「集約.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • 複数のExcelブックから特定シートのセル範囲抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル範囲を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 このサイトで殆どよく似た回答を読んだのですがうまくいきません。VBA初心者です。 よろしくお願いします。 【前提】 ・実行する端末のOSはWindows 10 ExcelはOffice365 ProPlus ・対象フォルダはネットワーク接続フォルダ  この中に、複数のExcelブック(xlsx、xlsm)があります。 ・抽出したい対象は、各ブック内の「台帳」シートの「A3:Cの最終行」で  複数のブックの中には「台帳」シートが含まれていないブックも混在しています。 【抽出一覧作成イメージ】 ・「集約.xlsm」ブックの「集計」シートの2行目から抽出した結果を一覧表示する。 ・「集約.xlsm」ブックにマクロは登録する ・表示はA列に抽出元ブック名(=ファイル名)、B列からD列に抽出元「A3:Cの最終行」セルの値。 ・「A3:Cの最終行」セルの値を「集約.xlsm」ブックの「集計」に貼り付ける際には「値で貼り付ける」が望ましい。

  • 複数のエクセルブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\データ解析\データ」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内のシート(シート名はファイル名と同じ)の「BO6からBW16までの□の範囲」で統一されています。 【抽出一覧作成イメージ】 ・「集計.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元BO6セルの値。以降,C列・D列と 順に値を入れていきたい。 ・BO6~BW16までのセル値を「集計.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • Excel ブック内の指定したデータのコピーマクロ

    よろしくお願いします。 エクセルで自動登録で自動化をしていますが、これだと限界があり今回こちらに書き込みさせていただきました。 流れとしては、マクロスタートでダイアログがでて(可能なら奥底に格納されるブックなのでそのフォルダの一個前辺りの階層指定されて)そこで指定した毎日新しく作られるブック内の指定したシートの指定したセルにあるデータをコピー(ブックは開かないで読み込み)してテンプレートととしている空のブックを開き(開いたまま)指定したシートの指定したセルにペーストするマクロを作りたいです。 (指定したシートと指定したセルの名前は常に同じです) 自動記録で指定したブックを開いて読み込む事は出来ましたが、毎回別のブックなのでそれでは事足りないのです。 ネットで探しましたが… ・ダイアログでファイルを開くマクロは見つけましたが、開いた後内部のデータを読み込むなどマクロは見つかりませんでした。 つながるところがわかりません。 ・(存在するブックの場所指定で)ブックを開かないでその中のデータを読み込むマクロは見つけましたが、ダイアログで選ぶけど開かないでと言う事が出来るマクロは見つけられませんでした これらは元々出来ないのでしょうか? 可能で有ればご教示下ださると助かります。 よろしくお願いします。

  • 【エクセル2010使用】違うブックから[データの入

    【エクセル2010使用】違うブックから[データの入力規則]→[入力値の数値]→[リスト]を参照することは、可能なのでしょうか? 現在、同じブック内の別のシートに会社で取り扱っている[商品一覧]を作って、別のシートでドロップダウンするなどという使い方をしています。 ただ、取引先ごとにブックを分けているため、[商品一覧]がひとつでも増えてしまうとその都度、修正せざるをえません。 そのため、違うブックに[商品一覧]を作って、リストからドロップダウンできれば、修正するにしても一ヶ所のみで済むと思ったのですが、いろいろ調べてもうまくいかず、こちらで質問させて頂きます。 ※ちなみに、VLOOKUP関数を用いて入力された商品名から値段が表示されるように設定しています。 ただ、関数はできても[データの入力規則]は違うブック間ではやり取りができないのかな…と頭を悩ませております。 どなたかエクセル2010で、上記の希望を叶えてくれる手順をご存じの方がいらっしゃいましたら、教えて頂けると幸いです。 宜しくお願い致します。

  • 複数のブックのデータを集めて、グラフを書きたいです

    Book1、Book2には、異なる行列のデータがあります この2つのブックのデータを参照してグラフを書くマクロをVBAで組んでいます Book1,Book2のシートをそれぞれグラフに書くところまでは出来ました 質問1. Book1のA1~An(Aのセルすべて)を、Book2の指定のセル(例えばC1~Cn)に コピーしたい 質問2. Book2のセルB1~B100のデータと Book1からコピーしたC1~C300のデータを 同じグラフ上にプロットしたい AのセルをX軸のデータとして使用する 宜しくお願いします

  • 複数のブックのデータを一つのブックにまとめたい

    http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page1.htm ↑の 7. 指定したフォルダ内にあるExcelファイルを検索して開く の部分のマクロを利用して、集計.xlsというブックで、複数のブックを開くようにしましたが、そのブックを開いた時にそのブックのSheet2の中のデータのみコピーして、集計.xlsに貼り付けたいのですが、どのようにすればよいのか困っています。 指定したフォルダの中には、回答01.xls 回答02.xls ・・・と16個のブックがあります。順番に開いてコピーをするときに、どのようにブック名とシート名を指定すればよいのかわからず困っています。 何か参考になるものがあれば教えてください。 よろしくお願いします。

  • 複数のブックから必要な情報を一覧で抽出したい。

    エクセルで下記のような書類を作成したいのですが、いい方法があれば教えてください。 まず、 1)会社ごとに名簿リストのようなエクセルブックがあります。  (名前や年齢のほか、30項目以上ある内容に○などがついている状態) そして、 2)様式の指定された別のエクセルブックに名前を入力すれば、その様式で指定された情報を   1)の名簿から抽出して表示されるようにしたい。   ただし、2)の様式を指定されたエクセルに名前を入力する際には、1)の○○社の名簿のだれだれ、   △△社の名簿からだれだれ・・というようにその人を探します。 <問題点・疑問点> 様式が指定された表の行は隙間なく表示させたいが、抽出元が複数のブックなので、数式入力が 難しい? 同一人物が複数社にまたがっていることもあり、しかも内容は一致しない場合があるがどのように対応すればよいかわからない。 従って、現段階で考えているのは、 <方法案> (1) 1)の複数のブック(名簿リスト)をまず新しいエクセルブックに集計し一覧表示させる。    (その際には、○○会社というブック情報をA列に入れたい)    一覧集計した際に重複データには、エラー表示されるようにしておき、今回使用したい    データに修正する。 (2) 2)の様式の指定されたエクセルシートの横に追加シートを挿入して(1)を値貼付する。 (3) 一覧表の中から今回必要な人を選び出し、オートフィルタ―などで絞りだす。 (4) 様式の指定されたシートには追加シートで選び出した人の情報が表示されるようにする。 リンクデータの容量で重くなったりするのか、整合性の点が不安です。 何かいい方法があれば教えてください。

  • エクセルの複数ブックのシート名を全てリストにできるソフト探しています

    フォルダやブック名を取得してリストにしてくれるソフトは見つかったのですが、ブック名とシート名(フォルダ名などのパスもリストされても構いませんが)をリストにしてくれるソフトはないでしょうか?ひとつのブックのシート名ではなく複数のブックのシート名一覧です。ご存知の方いらっしゃったらよろしくお願いします。