• ベストアンサー

エクセル)日付を取得しファイルを検索してセルの値をコピー

初めまして。 会社で急にエクセルを扱うことになり、本などを買って勉強中な初心者です。 今の私では難しすぎるので質問させてください。 ---------------------------------------------------------------- C:\AAA\本数集計値.xlsのaシート ......A.....B.....C.....D.....E......F......G......H 1...2009........9 2............3......4......5......6......7......8......9 3 4 5............10....11...12...13...14....15....16 本数集計値.xlsのaシートは上の図のようになっていて、A1に年、C1に月、B2~H2までは日にちを手入力で入力してあります。 ただし、B列には、週の頭として必ず木曜日が入ります。 このファイルには4週分の日付が入力してあります。4週過ぎたら日付だけ変えて再利用しています。 C:\BBB\第XX週本数計測値.xlsのbシート ....A.....B.....C.....D.....E.....F.....G.....H.....I 1..................9 2..................3......4......5.....6......7.....8.....9 3..................xx 4 5..................yy 第XX週本数計測値.xlsのbシートは上の図のようになっていて、C1に月、C2~I2までは日にちが入ります。 こちらも、週の頭は木曜になっています。 XXには"C1"月"C2"日から"I2"日までがその年の第何週目か、を入力してあります。 BBBフォルダには第01週本数計測値.xlsから数字が違うだけのファイルを毎週作っています。 xx、yyには3~5桁の数字が入ります。 ■質問 本数集計値.xlsの各セルに手入力された年月日から、何週目かを取得し、その週のファイルをC:\BBB\から検索し、該当する第XX週本数計測値.xlsのbシートの値、xx、yyを本数集計値.xlsのaシートの同じ日付の所定のセルにコピーしたいのです。(例えば9/3は36週目なので第36週本数計測値.xlsをBBBフォルダから検索し、そのbシートのxx、yyをコピーし、本数集計値.xlsの9/3の真下のセルB3にxx、B4にyyとペーストしたいのです) 長々と書きましたが、こんなことができそうな気がするのですが、 どうかご教授の程よろしくお願い申し上げます。

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

  • ベストアンサー
回答No.3

回答2の修正です。 >ただし、B列には、週の頭として必ず木曜日が入ります。 通常の数え方の第XX週と、木曜を週初とする数え方は微妙に違うのですね。しかし、木曜日に関しては通常の数え方と同じでいいと思うので 修正前:WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&B2)) 修正後:WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&$B2)) として、その週のセルでは木曜日の日付のWEEKNUMを計算すればいいでしょう。修正前は、日付文字列を「$A$1&"/"&$B$1&"/"&B2」ということで当日の日付から第XX週を算出していましたが、修正後は「$A$1&"/"&$B$1&"/"&$B2」 としてどのセルでもB列の木曜の日付を見るようにします。 つまり =INDIRECT("'C:\BBB\[第"&WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&$B2))&"週本数計測値.xls]b'"&ADDRESS(3,COLUMN()+1)) =INDIRECT("'C:\BBB\[第"&WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&$B2))&"週本数計測値.xls]b'"&ADDRESS(5,COLUMN()+1)) 以上です。

kururu1023
質問者

お礼

cistronezkさん、ご回答ありがとうございます。 関数だけでもここまでできるのですね。 まだ全部入力ししてはいませんが思っているのにかなり近い動作にできそうです。 ありがとうございます。

その他の回答 (2)

回答No.2

ファイルは違えど、参照するのはbシートの3行目と5行目ということでしょうか。もしそうなら本数集計値.xlsのaシートにおいて B3: ='C:\BBB\[第36週本数計測値.xls]b'$C$3 B4: ='C:\BBB\[第36週本数計測値.xls]b'$C$5 という参照式を入力する方法もあります。 1セルずつ入力するのは大変なので、関数で動的に参照式を作成する方法を示します。VBAほどではありませんが、ある程度は作業量が減ると思います。 (1)第XX週の取得方法 ・WEEKNUM関数を使用します(使用するにはアドインで「分析ツール」にチェック) =WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&B2)) とすることで第何週か取得可能。以上から参照先セルの文字列は B3: ="'C:\BBB\[第"&WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&B2))&"週本数計測値.xls]b'"&ADDRESS(3,COLUMN()+1) B4: ="'C:\BBB\[第"&WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&B2))&"週本数計測値.xls]b'"&ADDRESS(5,COLUMN()+1) で作成できます。両式の違いは、Address関数の第1引数が3(行目)か5(行目)かの違いだけです。この違いを吸収してひとつの式だけにする方法もあります。ご自分でやってみてください。 (2)参照文字列から実際の値の取得方法 ・INDIRECT関数を使用します。 =INDIRECT("'C:\BBB\[第"&WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&B2))&"週本数計測値.xls]b'"&ADDRESS(3,COLUMN()+1)) =INDIRECT("'C:\BBB\[第"&WEEKNUM(DATEVALUE($A$1&"/"&$B$1&"/"&B2))&"週本数計測値.xls]b'"&ADDRESS(5,COLUMN()+1)) 以上をB3、B4に入力したらこの2セルを選択して他のセルにコピペします。 必要なら、全体を選択してコピペで値貼り付けをします。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

できるけれどExcelの初心者では難しいと思います。 せめてExcelはよく使っているがVBAは使ったことがないというレベルなら ここでの質問である程度の回答を得ることができるかもしれません。 どっちにしてもVBAが必要なようです。 ある程度自分で作ってみてそのうえでの質問をされたほうが解決が近いのではないでしょうか。 年月日から何週目かを計算する 曜日の求め方 その数値をもとにファイル名文字列を生成してファイルを開く などExcelの初心者にとってはいささかハードルが高いかもしれませんが 頑張ってください。

kururu1023
質問者

お礼

早速のご回答ありがとうございます。 Excelの関数は少し事務で使ったことはあったので少しはわかるのですが、VBAはさっぱりわからず、辞典やいろいろな事例が載っている本を数冊買って読んだり試したりしているのですが、難しいです(苦笑) >>年月日から何週目かを計算する >>曜日の求め方 >>その数値をもとにファイル名文字列を生成してファイルを開く もう少し本をめくってがんばってみようと思います ありがとうございます

関連するQ&A

  • EXCEL データのコピー

    sheet1枚で構成されたfile(ファイル名XX01)があります。 このaaaを、別のファイル(YY01)に置き換えます。 このとき、 XX01のセルa1をYY01のセルa13へ、 XX01のセルa4をYY01のセルa8へ、 XX01のセルa6をYY01のセルa7へ、 と多量にします。 このとき、この作業を複数回(XX01->YY01、XX02->YY02‥XX50->YY50)する場合、効率よくするにはどうしたらいいでしょうか。 今はinputデータXX01~XX50のうちXX01の一つしか手元にありません。

  • ExcelのVBAで、他のExcelファイルのセルのデータを取得

    ExcelのVBAで、他のExcelファイルのセルのデータをファイルを実際に開かずに取得する方法はありますか? Workboks.openを使わずに、具体的にどうすればいいのでしょう? (例)  AAA.xls のセル"C5"に BBB.xls のセル"B3"のデータを入力したい場合。 (AAA.xlsにマクロを起動するボタンがある) ただし、BBB.xlsの最初の3行は空白です。

  • エクセルマクロで日付検索について

    エクセルのマクロで日付を検索するマクロについて質問です。 ブックAのシート1のA列に A1 2017/3/13 A2 2017/4/1 A3 2017/4/19 A4 2017/5/16 A5 2017/7/17 A6 2017/9/5 というような日付が入っています。 ブックBのシート1のA1セルに2017/6/3と入力してマクロを実行した際に その日付に一番近い一つ前の日付を探し、見つけた日付のB列のセルを ブックBのシート1のA2セルに表示したいです。 今回の例であれば2017/6/3に対してブックAのシート1のA列はA4セルが当てはまり その当てはまったA4セルの1つ横のB4セルの内容をブックBのシート1のA2セルに表示するということです。 よろしくお願いします。

  • エクセル関数VLOOKUPの範囲の一部をセルで指定

    ファイル名2103.XLSあるとして、その2103.XLSファイルとは別のファイル名集計.XLSに、その2103.XLSファイルから関数VLOOKUPでデータの値を返したい場合、式の範囲には普通は [2103.xls]Sheet1!$A$1:$B$10 と入力されますが、この範囲の一部分をセルで指定できないでしょうか。例えば、ファイル名集計.XLSのA1セルに文字列で"2103"と入力されているとしまして、式の範囲 [2103.xls]Sheet1!$A$1:$B$10 の2103部分を[A1.xls]Sheet1!$A$1:$B$10のような式は出来ないでしょうか。

  • エクセルの日付機能

    エクセルの日付機能に関する質問です。 あるワークシートのA列に日、B列に月、C列に年が入力されています。これらの日付を行ごとに結合して、D列にdd/mm/yyという形式で表示させたいと考えています。 先ほど、D2に[=A2&"/"&B2&"/"&C2]という計算式を入力し、D列を右クリックして[セルの書式設定]→[表示設定]→[ユーザー定義]で[種類]欄に[dd/mm/yy]と入力しましたが、D2は日付として認識されず、ただの文字列として認識されているようです。 統合された文字列が日付として認識される良い方法を教えていただけないでしょうか?よろしくお願いします。

  • エクセル)ファイルを検索し、セルを参照

    Aフォルダ内に入っている複数のファイルがあります。 abc01xyz.xls abc02xyz.xls abc03xyz.xls それぞれのブックのシートX、セルA1にはファイル名にある数字と同じ数字が入っています。 ■質問 abc02xyz.xlsのセルB2に、abc(abc02xyz.xlsのシートX、セルA1の値-1)xyz.xls のシートY、セルB2の値をコピーしたいのですが、どんな関数を使えばよいのでしょうか、いろいろ本をめくったり、インターネットで調べたのですが、なかなか参考になるケースがなくて困っておりまして、どなたか詳しい方、ご指南いただけませんでしょうか・・・。 INDIRECT関数を使うのでしょうか

  • エクセルで複数のファイルのうちの特定のファイルのセルに計算式を挿入したい

    教えてください。 フォルダに300くらいのファイルがあり シート001.xls~シート300.xlsと名前が付いてます。 シート001.xls~シート100.xlsはセルC3に式A シート101.xls~シート200.xlsはセルC3に式B シート201.xls~シート300.xlsはセルC3に式C と言う風に違った計算式をいれたいのですが、マクロで いっぺんにやる方法は有りませんでしょうか。

  • エクセルVBA セルのコピー&ペーストで・・・

    A1のセルに、123 B2のセルに、456 C3のセルに、789 とある A.xlsファイルがあるとして B.xlsファイルの A4のセルに123 B4のセルに456 C4のセルに789とコピーしたいのです・・・と ここまでは出来たのですが、ここからが悩み所で、 上記の状況で、A4~C4までにはデーターが入っているので、次はその下のA5~C5までにデーターを入れたいのです。 A.xlsのデーター入力部分は一緒で、B.xlsのペースト部分は、入力していないセルの一番上にペーストしたいのです。 ちなみにちょっと作ってみましたがだめでした;; Windows("A.xls").Activate DATA = Range("A1:N100") Windows("B.xls").Activate With Cells(4, 1).End(xlDown).Offset(1, 0) = DATA(1, 1) っていうような感じで作ってみたのですが動かないです;; よろしくお願い致します

  • エクセル フォルダ内の.xlsファイルの集計

    エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。 作業としては あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む という形です。 その際に、各シートの特定セルの内容により出力するセルを変えたいと思っています。 実際には、 AAA.xlsというファイルの3枚目以降のシートで、L2セルに「B」と記述があれば別ブックのB3セルに、「C」と記載されていれば別ブックのC3セルに、それぞれD4セルの数値を集計する。 次にBBB.xlsというファイルに関しても同様に集計し、その結果はB4セルとC4セルに出力する これを当該フォルダに入っているファイル全てについて行う ※L2セルには「B」「C」以外の文字は入りません。 こういった作業ができればと思っています。 お時間のある方がおられましたら、ご教授いただけますでしょうか。 参考になるサイトなどがありましたら、アドレスだけでも御教えいただけると幸いです。 質問の仕方が悪いようでしたら、ご指摘いただければ再度説明させていただきます。拙劣な説明ですがどうかよろしくお願いします。

  • Excelで他Excelファイルのセルの値をVBAで参照したい時

    こんにちは。 Excelで他Excelファイルにあるセルの値をVBAで参照したい時って、 場所をどう指定したらいいのでしょうか。 やろうとしている事ですが、 c:\1.xlsに記述するVBAで c:\2.xlsのsheet1のA1の値を参照して、 それとc1.xlsのsheet1のA1の値が一致した時に、 c:\2.xlsのsheet1のB1の値を、 C:\1.xlsのsheet1のB1に書き出そうとしています。 派遣就業先でAccessで作ればいいものを なぜか社員の方たちでExcelで作ってしまったため、 そのメンテに四苦八苦しています。(笑) ご存知の方ぜひ教えてください。 よろしくお願いします!

専門家に質問してみよう