• ベストアンサー
  • すぐに回答を!

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

お世話になっております。 したい事が二つありまして、 まず一つ目は毎日保存している「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
  • 閲覧数325
  • ありがとう数5

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • Access名前に本日の日付のあるCSVを開きたい

    Accessのクエリ結果をテキストエクスポートでCSV形式で保存しています。その際に、CSVの名前をCSV+format(date,"yyyymmdd")にしています。 エクスポート後に、この本日が変数となっているCSVファイルをアプリケーションの実行で開きたいのですが、コマンドラインの書き方が分かりません。 現在は、"C:\Windows\System32\notepad.exe" "C:\BBB\GGG\CSV%date:~0,4%%date:~5,2%%date:~8,2%.csv" としていますが、書き方が間違えているというエラーになります。 VBAまたはマクロでどのようにすればこれができるか教えてください。 よろしくお願いします。

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

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

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

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

その他の回答 (4)

  • 回答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の日付の) >データをマクロでコピーし、別のシートに貼り付けたいのです。 もう少し具体的でないとわからないですね。 最新の日付のデータとはどこにあるどんなデータなのか? 別のシートに貼り付けたい、の別のシートとは何を指しているのか? そこら辺がちゃんとわかればアドバイスできるかと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 一点目の方は出来ました。 二点目なのですが、 マクロを書き込んでいるのがファイル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)とは違う要求なのだろうと思います。 宜しくお願い致します。

  • 回答No.3
  • 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)保存させます。 もう一つのシートは違うマクロをまわした結果、前営業日の日付でファイルの中にシートが追加されていきます。 どちらも、カレンダーの暦通りの前営業日になります。なので月曜日であれば金曜日の日付で、また、もし金曜日が祝日でお休みならば木曜日の日付になります。 説明が下手で申し訳ございません。 どうぞ宜しくお願い致します。

  • 回答No.2
  • 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と定義付けしております。 もし、それでもここがダメという所がおわかりでしたらご教示いただければ幸いです。 宜しくお願い致します。

  • 回答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です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • PHPでの日付について

    PHPとPostgreSQLを利用しています。 日付を取得して、現在の日付と比べて7日以内であれば、指定の文言を表示して、7日以上であれば表示しないようにしたいです。現時点では以下のように記述しています。 $today = date(Y-m-d); if($today - $update_day <= 7) { echo "表示"; } else { echo "非表示"; } ちなみに $todayも$update_dayも形式は2005-09-18のような形です。 ご教授願います。

    • ベストアンサー
    • PHP
  • 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&#65374;と、BODY&#65374;の入力順は考慮しない)、そのファイルの中に存在するレコード(数百件あり)をDBにINSERTします(このDBへのINSERT処理部分はここでは「処理A」と置き換えることにします)。INSERTし終わったファイルは、「D:\CSV\BACKUP」に移動します。 4.上記「3.」をファイルがなくなるまで繰り返します。ただし、yyyymmddの降順に処理を行う必要があるので、「yyyymmdd &#65293; 1日」の順番で処理をします。「&#65293;1日」する際は、うるう年なども考慮する必要があります。 どのような記述にすればいいのか知識が乏しく。 どうかご教示をお願いいたします。

  • マクロ 日付の内容でセルを塗りつぶす

    セルに記載された日付が、『TODAY以上なら赤色』・『TODAY以下なら青色』・『それ以外なら塗り潰し無し』にしようと下記のマクロを記述しましたが、思うようになりませんでした。どうしたら治るでしょうか?御指導お願い致します。 Sub セルを色で塗りつぶす() Dim C As Integer C = 5 Do While Cells(5, C).Value <> "" With Cells(6, C) Dim Today As Date Today = Date Select Case .Value Case Is <= Today .Interior.ColorIndex = 8 Case Is >= Today .Interior.ColorIndex = 3 Case Else .Interior.ColorIndex = xlNone End Select End With C = C + 1 Loop End Sub

  • エクセル2007 マクロ CSVにコピー後日付がおかしくなった

    エクセル2007を使用しています CSVファイルを開き日付をコピーするマクロを作成しております ■問題 エクセル上2011/2/11という文字が、11/2/2011とCSVファイル上表示されてしまいます。 以下の対策をとってはいるのですがうまくいきません Workbooks.Open Filename:= _ "\\\\\\\\\\\\\.csv", Local:=False 他に対策はないでしょうか?

  • エクセルマクロでファイルを開いて保存したいです。

    エクセルマクロでファイルを開いて保存したいです。 エクセルファイルでファイル名「編集」という物を開きます。 このSheet1には中央にコマンドボタンが作成して有ります。 このボタンをクリックして以下の作業をマクロで行いたいです。 1.エクセル標準の「ファイルを開く」のメッセージボックスが開く 2.ここは使用者が作業をしてもらう   マイドキュメントだったり、マイネットワークだったり、   (ファイルの種類はCSVにする)   処理をしたいCSVファイルを探してもらい選択後、開くをクリック   例えば20100922.CSVを選択し開くをクリック 3.クリックと同時にそのファイルが展開されて、「編集」のエクセルファイルの   Sheetにシート名「集計」が作成されそのシートにCSVファイルの全内容がセルA1から貼り付く。   さらに登録してあるマクロモジュールで編集処理がされ   マクロを引き継がず、シート「集計」だけを   ファイル名は固定でそのファイル名の後ろに作成日(システム日付)を入れて   参照したCSVファイルの保管場所に保存する。   ファイル名例:売上20100923.xls(売上は固定) 4.エクセル「編集」のファイルからシート「集計」を削除する。 5.メッセージBOXで「編集終了」と表示 次回エクセルファイル「編集」を開くと、コマンドボタンだけである。 また作成された「売上20100923」はマクロがないから開くときに マクロのメッセージは出ない。というようにしたいです。 NO.2のファイルを選択する作業は作業者にしてもらいますが シート1のコマンドボタン1回を押すだけでNO.1~NO.5まで完結させたいです。  NO.3のマクロ処理はマクロの記録でモジュールができています。 このマクロの作成方法と、そのマクロが出来たら その文のどこに作成済みの処理文を入れればいいのかわかりません。 よろしくお願いします。 ここでつまづいています。この後この選択したファイルの全内容が シートの集計に展開されません。 Private Sub CommandButton1_Click() Call 集計 End Sub Sub 集計() FullPath = Application.GetOpenFilename("CSV,*.CSV") If FullPath <> "False" Then Sheets("Sheet1").Select Sheets.Add ActiveSheet.Name = "集計" With ActiveSheet.QueryTables.Add(Connection:="CSV;" & FullPath, Destination:=Range("A1"))   マクロの記録で作成したマクロ   シート"集計"をマクロを引きつかずファイル名売上&システム日付で保存   シート"集計"を削除する

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

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

  • エクセル マクロ 条件付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

  • VB2010でのSQL日付フォーマット表記変更

    VB2010Expressを使用しています。 VBにてあるCSVファイルの内容をmdbファイルに移行するプログラムを作成しています DateTimePickerの日付を条件にしているんですがCSVの日付表記が『yyyymmdd』になっていて下記のコードでは『 (Me.Date日付.Text).ToString("yyyyMMdd")』の部分で『'String' から 'System.IFormatProvider' への変換時にランタイム エラーが発生する可能性があります。』とエラーが出ます。 自宅PCでは『(Me.Date日付.Text).ToString("yyyyMMdd")』を『DateAdd("d", 0, Me.Date健診日.Text).ToString("yyyyMMdd")』にしたらエラーなく動いたのですが、今日職場のPCで検証したら『型が合いません的なエラーが出てしまいます。(日付部分でのエラーみたいなのですが職場でのエラーをメモし忘れました、スイマセン) 日付のフォーマット変更そしてPCの違いによるエラーの発生原因についてご教授お願いします。 Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FolderPath & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName + " WHERE 日付 BETWEEN " + DateAdd("d", -1, Me.Date日付.Text).ToString("yyyyMMdd") + " AND " + (Me.Date日付.Text).ToString("yyyyMMdd") Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using '===============CSV-importへの登録=============== コード省略 Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try

  • 開いたファイルの削除

    Excel2000使用。VBAマクロで、 デスクトップに保存したあるcsvファイルを開いた後、 作業中のブックのSheet2の後ろに貼り付け、 新たに作成されたSheetに"結果"という名前をつけた後 はじめに開いたcsvファイルを閉じたいのですが、 最後の一文「はじめに開いたcsvファイルを閉じる」部分ができません。 同じ作業中のブックで Program File中のあるtxtファイルを開いた後、 作業中のブックのSheet1の後ろに貼り付け、 新たに作成されたSheetに"原因"という名前をつけた後 はじめに開いたtxtファイルを閉じる。-というマクロはできているのですが・・・ たぶんマクロの中身がどこかおかしいのでしょうけど同じように記述しているのに片方はできて片方ができないなんて・・・情けないです。 できてない部分ができるようなVBAマクロをどなたか教えてください。 よろしくお願いします。