• ベストアンサー

日付の入ったタイトルのファイルをマクロで取り込みたい

お世話になっております。 したい事が二つありまして、 まず一つ目は毎日保存している「yyyymmdd_Balance」というタイトルのcsvファイルがあり、そこのファイル内の一部を別のエクセルファイルに貼り付けたいのです。 このファイルは他のデータより落としてきておりますので、yyyymmdd部分のみ毎日更新されます。また、当日の日付ではなく、ビジネスdayなので当日の日付ではありません。 そこで、日付け用にページをもうけ、 =IF(WEEKDAY(today)=2,TODAY()-3,TODAY()-1)をa_dateと定義し、 そのうえでマクロにて DM = Format(Range("a_date").Value, "yyyymmdd") Workbooks.Open Filename:="C:\Report\Data\DM&_Balance.csv" としたのですが、DMのところでエラーがでてしまいます。 別のファイルで同じようにしているのですが、それは正常にRunします。何が違っているのでしょうか? 2点目なのですが、今度はReportというファイルの中に毎日ビジネスdayの名前でページを追加していっています。 (10月31日に作業をおこなっているのであれば20081030という名前のページ) ここでも先程と同じように、このビジネスdayの名前のシートを選択し作業をおこなっていきたいのですが、これもどのようにマクロで記述すれば宜しいのでしょうか? どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.5

ファイルBというのが"C:\Report\Data\" & DM & "_Balance.csv"で ファイルAというのがReport.xlsということですよね? 確認ですがファイルBからコピーしたい前営業日のデータは、必ずファイルBの中で一番最後にあるシートになりますか? あと、ファイルAには、ファイルBからコピーしたデータを新しいシートとして追加していくのではなく、あるシートの最終行にどんどんと前営業日のデータをコピーしていくと言うことでよいのでしょうか? また、データをペーストしたいシートは、いつも同じシートですか?それとも、週単位や月単位などで増えていくものでしょうか? その場合、データをペーストしたいシートはエクセルの一番最後のシートになりますか? 不明点が多いため、上記の点確認させてください。

515131
質問者

お礼

qualheartさん ありがとうございます。解決しました。 すぐにここにきてそう記載しないとと思っていたのですが、身辺があわただしくて全くアクセスする時間と精神的余裕がありませんでした。 ご回答くださったにのご連絡が遅れ本当に申し訳ございません。 ありがとうございます。

その他の回答 (4)

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.4

ANo.1です。 >1個目のほうは指定された通り >Workbooks.Open Filename:="C:\Report\Data\"&DM&"_Balance.csv" >としたのですが、エラーが出ます。(構文エラーとの表示) スペースが抜けているためです。 Workbooks.Open Filename:="C:\Report\Data\" & DM & "_Balance.csv" のように、「&」の前後には半角スペースを入れてください。 >2個目なのですが、シートの追加ではなく、シートは既に追加されて >いる状態なので(月初から一日一枚、前営業日の日付で追加されて >います)、最新の日付の物の(ないし、上と同じようにDMの日付の) >データをマクロでコピーし、別のシートに貼り付けたいのです。 もう少し具体的でないとわからないですね。 最新の日付のデータとはどこにあるどんなデータなのか? 別のシートに貼り付けたい、の別のシートとは何を指しているのか? そこら辺がちゃんとわかればアドバイスできるかと思います。

515131
質問者

お礼

ありがとうございます。 一点目の方は出来ました。 二点目なのですが、 マクロを書き込んでいるのがファイルAだとすると、Cドライブに保存してあるファイルBからファイルAへデータをコピーペーストしたいのです。 ファイルBに関して詳しく書くと、暦通上の前営業日(月曜にRunさせると前の週の金曜日。また、金曜日が祝日であれば木曜日というようになっている)のデータを他のシステムより読み込んできて、その日(前営業日)の名前で(yyyymmdd)でシートが追加されていきます。 ですので、10月14日にRunさせた後は20081001という形で2.3.6.7.8.9.10の計8ページが存在しています。 そのうえで、ファイルAでマクロをRunさせると、前営業日の名前のついているページから(前営業日のデータを)もってくるマクロを作成したいのです。 うまく伝わりましたでしょうか? 説明が上手くできずにご迷惑をおかけしてすみません。 どうぞ宜しくお願い致します。 また、単純な改行はどのように記述するのでしょうか? 基本的なことで申し訳ございません。 ネットに記載されていた方の物を利用し(3行目のみ)   ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCells.Replace What:=Chr(10), Replacement:="<br>" としたのですが、なんの反応もありませんでした。 併せてご教示いただければ嬉しいです。

515131
質問者

補足

なお、改行に関してなのですが もっと詳しくしたい動きを書くと 毎日一行ずつ一番下に、ファイルBよりペースト(付けたし)していきます。 なので ActiveSheet.Range("A1").Select Selection.End(xlDown).Select を記述しています。 ネットによく出ているAlt+Enter(入力後のEnter)とは違う要求なのだろうと思います。 宜しくお願い致します。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

>そこで、日付け用にページをもうけ、・・・ 今いち事情がよくわかりませんが、マクロで実行しているのですよね? VBAにもDate型変数が用意されていますので、シートを使わなくても計算可能です。 単純に1日前(月曜日は3日前)というのであれば、  da = Date - 1  If Format(da, "w") = 1 Then da = da - 2  Fname = Format(da, "yyyymmdd") & "_Balance.csv" で、Fnameにファイル名が得られます。 でも、ちょっと疑問なのが、休日をどうするのかということ。(祭日、休日はないというのであれば問題ないですが、正月も休み無しなのかな?) 休日がある場合は、別にカレンダーを用意しておけば簡単ですが、それ以外の方法として、1日ずつ遡ってファイルを探し、最初に見つけたものが該当するファイルと見当をつけるという考え方もあります。 (万一、ファイルが他の原因で欠落している場合を考慮すると、見つけた後で何らかのチェックが必要ですが。) その場合の例を・・・ da = Date '//今日の日付 cnt = 0   '//カウンター Do cnt = cnt + 1 Fname = Dir("C:\Report\Data\" & Format(da - cnt, "yyyymmdd") & "_Balance.csv")  '//cnt日前のファイルがあるかをチェック Loop While Fname = "" And cnt < 7  '//あればループを抜ける If Fname = "" Then MsgBox ("none") Else MsgBox (Fname) 何かの事故でファイルがごっそりとない場合、延々と探しまくらないように、cntでカウントして打ち切るようにしています。(↑例では7日前まで探して、無ければ打ち切り)

515131
質問者

お礼

ご連絡が遅れてしまい大変申し訳ございません。 二つのシートからデータを各々とってきたいという事で、 一つのシートは会社のシステムを別途Runさせておとしてくるシートになり、前営業日の日付を利用したタイトルで(yyyymmdd_Bala)保存させます。 もう一つのシートは違うマクロをまわした結果、前営業日の日付でファイルの中にシートが追加されていきます。 どちらも、カレンダーの暦通りの前営業日になります。なので月曜日であれば金曜日の日付で、また、もし金曜日が祝日でお休みならば木曜日の日付になります。 説明が下手で申し訳ございません。 どうぞ宜しくお願い致します。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

はじめまして もし質問文の中の数式、 =IF(WEEKDAY(today)=2,TODAY()-3,TODAY()-1) が転記ミスでないのなら、この数式が間違っています。 =IF(WEEKDAY(TODAY())=2,TODAY()-3,TODAY()-1) とWeekday関数の中の「Today」は「Today()」としなければいけません。

515131
質問者

お礼

回答ありがとうございます。 私の説明が足りず申し訳ございません。 別のシートでの定義付けで=TODAY()をtodayと定義付けしております。 もし、それでもここがダメという所がおわかりでしたらご教示いただければ幸いです。 宜しくお願い致します。

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.1

Workbooks.Open Filename:="C:\Report\Data\DM&_Balance.csv" では「DM&_Balance.csv」という名前のファイルを開こうとしてしまうので当然エラーになりますね。 Workbooks.Open Filename:="C:\Report\Data\" & DM & "_Balance.csv" としなければ駄目です。 あとシートの追加は Worksheets.Add.Move after:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = "YYYYMMDD" のように記述すればOKです。 「YYYYMMDD」の箇所は前のマクロと同じように、シート名になる日付をマクロでいったん変数定義しそれを当てればOKです。

515131
質問者

お礼

ご回答いただきありがとうございます。 1個目のほうは指定された通り Workbooks.Open Filename:="C:\Report\Data\"&DM&"_Balance.csv" としたのですが、エラーが出ます。(構文エラーとの表示) 2個目なのですが、シートの追加ではなく、シートは既に追加されている状態なので(月初から一日一枚、前営業日の日付で追加されています)、最新の日付の物の(ないし、上と同じようにDMの日付の)データをマクロでコピーし、別のシートに貼り付けたいのです。 説明が足りず、ご迷惑をお掛けしてすみません。 どうぞ宜しくお願い致します。

関連するQ&A

  • エクセルのマクロの記録でcsvファイルを開いたら日付が変わった

    エクセル2000のマクロの記録で「xxx.CSVファイルを開く」を作ってオート実行したところ、ある日付の列、2008/7/15 などがすべて2001/7/15、2025/7/1などとんでもない日付に変わってしまいます、手動で開くと正常です。一度手動で開いてファイルをxxx.xlsで保存してマクロを記録し、オートで実行すると正常です。セルの書式を見ると日付になっています、どこに問題があるのでしょうか。よろしくお願いします。

  • 今日の日付をマクロ化したいんです

    仕事でエクセルを使って受付表を作ってます。受付日を今までいちいち入力してたんですが、できればマクロをつかって毎日の入力作業を軽減したいと思うのですが、以前、関数のTODAYをマクロにしたんですが、これだと日付が更新されてしまうのでダメです。どうすればいいでしょうか?OS Xp エクセル2002です。

  • 入力した日付

    セルA1に名前を入れるとセルB1に名前を入れた日付が入って、その日付は明日も名前を入れた日付のままにするにはどうすればいいのでしょうか? NOW()やTODAY()では当日の日付が入ってしまって、翌日も当日になってしまうので・・ 入力して日付をそのまま変えたくないのですが。 教えて下さい。

  • WindowsDOSコマンドで次のBATファイル

    DOSコマンドです。ご教示願います。 DOSコマンドで以下のBATファイルを作成したいと考えています。 1.特定のフォルダ「D:\CSV」に以下の形式のファイルがあります。 ・HEAD_DATA_yyyymmdd.csv(yyyymmddは今日の日付西暦8桁) ・BODY_DATA_yyyymmdd.csv(yyyymmddは今日の日付西暦8桁) 2.上記の2つのファイルは「yyyymmdd」の部分が、システム日付を最大に、昨日、前々日と過去に遡った日付のファイルが複数存在します。「D:\CSV」に存在するファイル数は日によって違います。 3.「D:\CSV」に存在するファイルを日付の降順に1ファイル入力し(HEAD~と、BODY~の入力順は考慮しない)、そのファイルの中に存在するレコード(数百件あり)をDBにINSERTします(このDBへのINSERT処理部分はここでは「処理A」と置き換えることにします)。INSERTし終わったファイルは、「D:\CSV\BACKUP」に移動します。 4.上記「3.」をファイルがなくなるまで繰り返します。ただし、yyyymmddの降順に処理を行う必要があるので、「yyyymmdd - 1日」の順番で処理をします。「-1日」する際は、うるう年なども考慮する必要があります。 どのような記述にすればいいのか知識が乏しく。 どうかご教示をお願いいたします。

  • Excelのマクロで、開いた時に、行と日付が入るようにしたい

    教えてください。WinXP、Excel2000を使って、A1に日付、B1に記録をつけていて、枠線で囲んで、毎日記録しているのですが、一回一回、行を挿入するのが大変なので、マクロもしくはVBAで、ファイルを開いた瞬間に、自動的に1行挿入され、かつAの列に、その当日の日付が入るようにするにはどうしたらよいでしょうか?

  • エクセルのマクロについて

    エクセルのマクロを使って日付を入力したいのですが、上手く行きません。 何か良い方法があったら教えてください。 やりたいことは、あらかじめ選択されているセルに、今日(作業当日)の日付を入力することです。 これまで試したのは、 〔ctrl〕+;→マクロ作成日の日付を入力するようになってしまうので駄目 today関数→翌日になると、日付も翌日のものになってしまうので駄目 よろしくお願いいたします。

  • エクセルのマクロで外部ファイルを開く

    セルに入力した内容をファイルネームとして外部ファイルを開きたいのですが どうすればいいのかわかりません。 具体的には 1.外部ファイルはFDで供給されます。 2.FDに入れられるファイル名は毎日かわります。 3.ファイル名は固定された名称+日付のフォーマットです。(例:file0802) 4.やろうとしているのはA1に\"file\"、B1にtoday関数で日付を入力して   A1+B1をファイル名としマクロよりそのファイル名でFDのファイルを  開きたい。 5.開いたファイルの一部をコピーしてHDD上にあるエクセルのファイルに  ペースト、このファイルにマクロを組み込みたいのです。 help等をいろいろ見たのですがこの内容に関するものが見つけられません。 もしかしたら出来ないのでしょうか? よろしくお願いします。

  • マクロに関して。

    マクロに関して。 マクロは初心者です。毎日顧客データをCSVでダウンロードし、それを運送会社のラベル出しをするために、同じ手順で加工しています。(性と名前、住所などをひとつのセルにするとか) ファイルを開いた時でも、そのマクロが有効になっているように設定するにはどうすればよいのでしょうか? 宜しくお願いします。

  • エクセル マクロ 条件付csvデータ抽出

    マクロ初心者ですが難易度の高い仕事を任され困っています。 ディスクトップのAというファイル(C:¥Users¥Desktop¥A)にタイトルが「店名」+「-」+「日付(yyyymmddhhmm)」のcsvファイルが大量にあります。 sheet1のセルA1に「店名」を入力し、sheet1のセルA2に「抽出対象開始期間(yyyymmdd)」を入力、sheet1のセルA3に「抽出対象終了期間(yyyymmdd)」を入力し、該当するcsvファイルのデータをsheet2のA2から順に抽出したい(該当なしの際は該当なしを表示したい)のですがご教授お願いします。 ※csvファイル名が日付(yyyymmddhhmm)となっている為、抽出条件(yyyymmdd)では重複する可能性がありますが、重複する全てのデータを抽出したい。 長文で申し訳ありませんがよろしくお願いします。

  • VBA csvファイルを開いたまま自動マクロ動作

    一通り検索したのですが、分からなかったので質問させて下さい VBAでcsvファイルを読み込んで動作させる自動マクロ(ファイル)があります 通常ですと、csvファイルを指定のフォルダーに保存してマクロを実行させると思うのですが このcsvファイルを先に開いたままで、自動マクロを実行させることは可能ですか? 具体的には、あるシステムからダウンロードしたcsvファイルを開いたまま 自動マクロファイルを読み込んで実行したいのです 対象:Excel2007/2010/2013 OS:WindowsXP/7 csvファイル名:c20130727123456789.csv(日付+任意の数値9桁) 自動マクロファイル:自動マクロ.xlsm

専門家に質問してみよう