質問: programフォルダには summay.xlsxとsource_yyyymmdd.xlsxが存在しており、summay.xlsxは空で 例えば本日のsource.xlsxは下記の通りです。 source.xlsxを毎日フォルダに格納することにより自動で、summary.xlsxのA1:A3に 反映されるようにしたいと考えております。 当然、summary.xlsxのA列にsource.xlsxのA1から順番に参照する式を予め埋めておけば フォルダにファイルを格納するだけで自動で転記されていくと思いますが、source.xlsxのA:Aのデータは 可変で、summary.xlsxのA:Aに全て参照する=式を入れるととても思いファイルになってしまいます。 このような可変データをフォルダ格納をトリガーにして転記する場合で、可変数分だけ持ってきたい場合には どのようにするのが一般的またはベストな解決方法なのでしょうか。 この描写をうまくgoogle検索できなかったため、ご質問させていただきましたが、不明瞭な点があれば ご指摘ください。 source_20181017.xlsx | 列1 | 列2 | 列3 | | --- | --- | --- | | 犬 | | | | 猫 | | | | 猿 | | | source_20181018.xlsx | 列1 | 列2 | 列3 | | --- | --- | --- | | 狼 | | | | 虎 | | | | 鷹 | | | | 亀 | | | 以下が転記後の例になります。 _yyyymmddを添えておりますが、マクロ上本日の日付を含めたブックを参照する方法をとることが 煩雑ですし、仮にtoday()関数を使用して可変的に参照しても、必ずしもその日に本処理を実行するため 実際には同じsoure.xlsxファイルのブック名のみを参照することを想定しております。 また、A:A列だけなら手でコピペすれば良いのですが、実際には複数の参照先ブックから同じように 複数列を引用してくる(source_2,source_3等があるB:BやC:C二反映される)ため、これを存在する行の範囲だけ 自動で実行したいという主旨になります。 summary.xlsx ------------ ●20181017日にsource_20181017.xlsxを格納しsummary.xlsxを開いた場合に以下の内容が自動で反映される | 列1 | 列2 | 列3 | | --- | --- | --- | | 犬 | | | | 猫 | | | | 猿 | | | ●20181018日にsource_20181018.xlsxを格納しsummary.xlsxを開いた場合に以下の内容が自動で反映される | 列1 | 列2 | 列3 | | --- | --- | --- | | 狼 | | | | 虎 | | | | 鷹 | | | | 亀 | | |
回答: 簡単ですがこんな感じのマクロを書いてみました。 マクロを使うのでsummary.xlsxはsummary.xlsmで保存する必要があります。 ThisWorkbookに以下を仕込めば、ファイルを開いたときにsource.xlsxの中身をコピーしてきます。 転記元・先ともに仮に先頭シートのA列を対象にしていますが、必要であれば適宜対象を変更してください。 ``` Private Sub Workbook_Open() Dim ds As Worksheet ' 転記先シート Dim sb As Workbook ' source.xlsx Dim ss As Worksheet ' source.xslsの対象シート Set ds = ThisWorkbook.Worksheets(1) Set sb = Workbooks.Open(ThisWorkbook.Path & "\source.xlsx") Set ss = sb.Worksheets(1) ds.Range("A:A").Clear ss.Range("A:A").Copy ds.Range("A:A") sb.Close End Sub ```