- ベストアンサー
日付の入ったタイトルのファイルをマクロで取り込みたい
お世話になっております。 したい事が二つありまして、 まず一つ目は毎日保存している「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の名前のシートを選択し作業をおこなっていきたいのですが、これもどのようにマクロで記述すれば宜しいのでしょうか? どうぞ宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ファイルBというのが"C:\Report\Data\" & DM & "_Balance.csv"で ファイルAというのがReport.xlsということですよね? 確認ですがファイルBからコピーしたい前営業日のデータは、必ずファイルBの中で一番最後にあるシートになりますか? あと、ファイルAには、ファイルBからコピーしたデータを新しいシートとして追加していくのではなく、あるシートの最終行にどんどんと前営業日のデータをコピーしていくと言うことでよいのでしょうか? また、データをペーストしたいシートは、いつも同じシートですか?それとも、週単位や月単位などで増えていくものでしょうか? その場合、データをペーストしたいシートはエクセルの一番最後のシートになりますか? 不明点が多いため、上記の点確認させてください。
その他の回答 (4)
- qualheart
- ベストアンサー率41% (1451/3486)
ANo.1です。 >1個目のほうは指定された通り >Workbooks.Open Filename:="C:\Report\Data\"&DM&"_Balance.csv" >としたのですが、エラーが出ます。(構文エラーとの表示) スペースが抜けているためです。 Workbooks.Open Filename:="C:\Report\Data\" & DM & "_Balance.csv" のように、「&」の前後には半角スペースを入れてください。 >2個目なのですが、シートの追加ではなく、シートは既に追加されて >いる状態なので(月初から一日一枚、前営業日の日付で追加されて >います)、最新の日付の物の(ないし、上と同じようにDMの日付の) >データをマクロでコピーし、別のシートに貼り付けたいのです。 もう少し具体的でないとわからないですね。 最新の日付のデータとはどこにあるどんなデータなのか? 別のシートに貼り付けたい、の別のシートとは何を指しているのか? そこら辺がちゃんとわかればアドバイスできるかと思います。
お礼
ありがとうございます。 一点目の方は出来ました。 二点目なのですが、 マクロを書き込んでいるのがファイル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>" としたのですが、なんの反応もありませんでした。 併せてご教示いただければ嬉しいです。
補足
なお、改行に関してなのですが もっと詳しくしたい動きを書くと 毎日一行ずつ一番下に、ファイルBよりペースト(付けたし)していきます。 なので ActiveSheet.Range("A1").Select Selection.End(xlDown).Select を記述しています。 ネットによく出ているAlt+Enter(入力後のEnter)とは違う要求なのだろうと思います。 宜しくお願い致します。
- fujillin
- ベストアンサー率61% (1594/2576)
>そこで、日付け用にページをもうけ、・・・ 今いち事情がよくわかりませんが、マクロで実行しているのですよね? 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日前まで探して、無ければ打ち切り)
お礼
ご連絡が遅れてしまい大変申し訳ございません。 二つのシートからデータを各々とってきたいという事で、 一つのシートは会社のシステムを別途Runさせておとしてくるシートになり、前営業日の日付を利用したタイトルで(yyyymmdd_Bala)保存させます。 もう一つのシートは違うマクロをまわした結果、前営業日の日付でファイルの中にシートが追加されていきます。 どちらも、カレンダーの暦通りの前営業日になります。なので月曜日であれば金曜日の日付で、また、もし金曜日が祝日でお休みならば木曜日の日付になります。 説明が下手で申し訳ございません。 どうぞ宜しくお願い致します。
- rukuku
- ベストアンサー率42% (401/933)
はじめまして もし質問文の中の数式、 =IF(WEEKDAY(today)=2,TODAY()-3,TODAY()-1) が転記ミスでないのなら、この数式が間違っています。 =IF(WEEKDAY(TODAY())=2,TODAY()-3,TODAY()-1) とWeekday関数の中の「Today」は「Today()」としなければいけません。
お礼
回答ありがとうございます。 私の説明が足りず申し訳ございません。 別のシートでの定義付けで=TODAY()をtodayと定義付けしております。 もし、それでもここがダメという所がおわかりでしたらご教示いただければ幸いです。 宜しくお願い致します。
- qualheart
- ベストアンサー率41% (1451/3486)
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です。
お礼
ご回答いただきありがとうございます。 1個目のほうは指定された通り Workbooks.Open Filename:="C:\Report\Data\"&DM&"_Balance.csv" としたのですが、エラーが出ます。(構文エラーとの表示) 2個目なのですが、シートの追加ではなく、シートは既に追加されている状態なので(月初から一日一枚、前営業日の日付で追加されています)、最新の日付の物の(ないし、上と同じようにDMの日付の)データをマクロでコピーし、別のシートに貼り付けたいのです。 説明が足りず、ご迷惑をお掛けしてすみません。 どうぞ宜しくお願い致します。
お礼
qualheartさん ありがとうございます。解決しました。 すぐにここにきてそう記載しないとと思っていたのですが、身辺があわただしくて全くアクセスする時間と精神的余裕がありませんでした。 ご回答くださったにのご連絡が遅れ本当に申し訳ございません。 ありがとうございます。