Excelのマクロでファイル名を変数として扱う方法

このQ&Aのポイント
  • Excelのマクロでファイル名を変数として扱う方法について教えてください。
  • 「名前が出費の場合(→動いた)」というマクロでは動作するが、「名前を『日付+出費』という変数を含むものにした」というマクロでは動作しない状況です。
  • どの部分を修正すれば、変数を含むファイル名でも正常に動作するようになりますか?
回答を見る
  • ベストアンサー

090624出費、090625出費のような、名前に変数があるファイル

デスクトップ上に毎日UPされる生データを、他のbookにコピペしたく下記のように書いたのですがうまくいきません。 (1)名前が『出費』のときは動いたマクロの、ファイル名だけ変えました。 (2)名前を『日付+出費』に変更すると動きません。 (3)名前を『日付+出費』に変えても、ファイルを開くところまでは動作することを確認してます どこを直したら動きますか?教えてください。 書いたマクロ 名前が出費の場合(→動いた) Sub データ更新() If Dir("C:\Users\np\Desktop\"出費.csv") <> "" Then Workbooks.Open Filename:="C:\Users\np\Desktop\"出費.csv" Else MsgBox "Not found" End If Range("A5").Select Selection.Copy Windows("家計簿.xlsm").Activate Range("D2").Select ActiveSheet.Paste Windows("出費.csv").Activate Range("B15:B35").Select Selection.Copy Windows("家計簿.xlsm").Activate Range("D3").Select ActiveSheet.Paste Sheets("Graph1").Select End Sub 名前を『日付+出費』という変数を含むものにした→動かない Sub データ更新() If Dir("C:\Users\np\Desktop\" & Format(Now, "yymmdd") & "出費.csv") <> "" Then Workbooks.Open Filename:="C:\Users\np\Desktop\" & Format(Now, "yymmdd") & "出費.csv" Else MsgBox "Not found" End If Range("A5").Select Selection.Copy Windows("家計簿.xlsm").Activate Range("D2").Select ActiveSheet.Paste Windows(" & Format(Now, "yymmdd") & "出費.csv").Activate Range("B15:B35").Select Selection.Copy Windows("家計簿.xlsm").Activate Range("D3").Select ActiveSheet.Paste Sheets("Graph1").Select End Sub

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

http://okwave.jp/qa5069540.html の続きでしょうか? >Windows(" & Format(Now, "yymmdd") & "出費.csv").Activate Windows(Format(Now, "yymmdd") & "出費.csv").Activate ⇒" & が余計についているのではないかと。

yngnhplss
質問者

お礼

動きました!素晴らしい。。いや~解決してスッキリです! ありがとうございました。

関連するQ&A

  • エクセル マクロ for next 繰り返し

     マクロは初心者です。  以下のコピーペーストを  for ~ next で3回繰り返すコードを書くには?  変数  処理  回数指定  次に  「データ範囲の指定とコピー貼り付け」になります。   ご教示願えれば幸甚に存じます。    ◎同じ処理を二回例示します。  Range("D2").Select Windows("新規_1502.csv").Activate Range("C2:F" & 最終行).Select  Selection.Copy Windows("sinki 1502_新規.xlsm").Activate ActiveSheet.Paste ActiveSheet.Paste Range("K2").Select Windows("新規_1502.csv").Activate Range("G2:J" & 最終行).Select Selection.Copy Windows("sinki 1502_新規.xlsm").Activate ActiveSheet.Paste ActiveSheet.Paste

  • vbaで別のシートにセルで選択した列を反映させたい

    初めて質問させて頂きます。 vbaで別のシートにセルで選択した項目を反映させたいのですが出来ず困っております。 どなたかご教授頂けますでしょうか。 SR.xlsm ・B4からB100まで4桁の店舗コードがあります。 ・C4からC100までは住所。 ・D4からD100までは電話番号。 master.xlsx ・A1に店舗コードを貼り付けたい ・B2に住所を貼り付けたい ・D3に電話番号を貼り付けたい 作業内容としては以下をしたいのです。 例えばSR.xlsmのB50を選択してボタンをクリックすると master.xlsxが自動的に立ち上がり、 master.xlsxのA1 ⇒ B50を貼り付け master.xlsxのB2 ⇒ C50を貼り付け master.xlsxのD3 ⇒ D50を貼り付け 以下、自分なりにやってみたのですがどのセルを選択してボタンを押してもB4の列しか反映されません。 大変お手数をおかけいたしますがご教授願いますでしょうか。 宜しくお願い致します。 Sub click() ' ' click Macro ' ' Range("B4").Select Selection.Copy Workbooks.Open Filename:= _ "\\0000000\22\33\44\master.xlsx" ActiveSheet.Paste Windows("SR.xlsm").Activate Range("C4").Select Application.CutCopyMode = False Selection.Copy Windows("master.xlsx").Activate Range("E2").Select ActiveSheet.Paste Windows("SR.xlsm").Activate Range("D4").Select Application.CutCopyMode = False Selection.Copy Windows("master.xlsx").Activate Range("E4:H4").Select ActiveSheet.Paste Windows("SR.xlsm").Activate Range("E4").Select Application.CutCopyMode = False Selection.Copy Windows("master.xlsx").Activate Range("H2:H3").Select ActiveSheet.Paste End Sub

  • Excel マクロでファイル名を変数に・・・

    初心者です。検索してもわからなかったので質問です。 下記のようなマクロの処理で「AAA」というファイル名のExcelに「2.xls」からデータをコピーし貼り付けています。    ・    ・ Windows("AAA.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("AAA.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy    ・    ・ 今回は「2.xls」ではなく「3.xls」、「4.xls」、・・・といったように違うファイル名で同じ処理を行ないたいので「2」と指定するのではなく「(ファイル名).xls」といった形にしたいのですが、それは可能なのでしょうか。 ご意見宜しくお願いいたします。

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • Excel マクロ : マクロの記録の表記方法の変更

    Excelで質問です。 下記のようなマクロの記録を使用し「顧客一覧」のブックにデータを追加しています。 しかし、処理の中で一項目コピーするごとにファイルを行ったり来たりしているようで処理が遅いようです。何か解決策はあるのでしょうか? ・ ・ ・ Windows("顧客一覧.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("顧客一覧.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy Windows("顧客一覧.xls").Activate Range("B4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C8").Select Application.CutCopyMode = False Selection.Copy   ・   ・

  • 「コピペ」するExcelマクロで困っています。

     エクセルのマクロの自動作成ツールで、下のようなコピペのマクロを作ってみました。 シートをコピーして貼り付けるところまでは動きますが、その後に用済みの「ABCD.csv」を閉るところで、メッセージ画面が出て止まってしまいます。  良く見てみると、その後に開く「はい」「いいえ」「キャンセル」の選択画面(参考画面)の指示が自動では記入出来ないようで、色々調べてみましたがどうもうまくいきません。 Windows("ABCD.csv").Activate   Range("A1:B10").Select Selection.Copy Windows("DATA.xlsm").Activate   Range("A1").Select ActiveSheet.Paste   Windows("ABCD.csv").Activate ActiveWorkbook.Saved = False ActiveWindow.Close  この画面で、「いいえ」を選択するマクロを、誰か教えてください。 マクロを始めてまだ一週間なのでまったくわからず困っています、よろしくお願いします。

  • エクセルでマクロを組み始めたばかりの者です。下記の

    エクセルでマクロを組み始めたばかりの者です。下記のようなマクロを組んでみましたが、27行目もしくは41行目のActiveSheet.Pasteで「実行時エラー‘1004‘: 変更しようとしているセルまたはグラフは保護されているため読み取り専用となっています…」というエラーメッセージが出て止まってしまいます。 しようとしている内容は、転送ボタンを押し各シートの指定セルへ一括転送(コピー)をしたいのです。 その際、転送先はシート保護をしておきたいのです。 エラーはエクセル2010で確認しましたが、職場のPCを使用するため2007や2003等他のバージョンを利用する可能性もあります。また、仕事で使用するため早急に使わなければならず焦っています。 Option Explicit Private Sub CommandButton2_Click() Call Macro2 End Sub Sub Macro2() Workbook.Open Filename:=”K:¥共有¥○○○.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”○○○.xlsm”).Activate Range(”E7”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False Workbook.Open Filename:=”C:¥Users¥Desktop¥×××.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”×××.xlsm”).Activate Sheet(”△△△”).Select Range(”AF18:AI34”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False Workbook.Open Filename:=”K:¥共有¥□□□.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”□□□.xlsm”).Activate Sheet(”▽▽▽”).Select Range(”AF18:AI34”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False MsgBox " 『○○○』と" & vbCrLf & "『×××』と" & vbCrLf & "『□□□』の" & vbCrLf & "規格を変更しました。" End Sub どの様に修正すれば良いのでしょうか? マクロが原因でしょうか?または他の原因があるのでしょうか? マクロ初心者のため、修正方法など具体的な詳細をお教えいただけないでしょうか。 お手数をおかけして申し訳ございませんが、よろしくお願いします。

  • VBA作製ができません。どなたか教えてください。

    前回同じタイトルで質問させていただいた物を自分なりに本で調べて 作ってみました。しかし壁にぶつかりました。 Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select この式は7列目の一番下の空欄のセルを選択できる式のようですが、 指定した範囲のなかで7列目の一番下のセルを選択したいのですがどうすればいいでしょうか? つまり列だけじゃなく行も選択したいです。 教えてください。 こんな式を作りました。  もし式を簡単に効率よくできる方法があればアドバイス下さい。 If Range("G4").Value = SpecialCells Then Range("H4").Select Else Range("G4").Select Range("G4").Copy Windows("Book1.xlsx").Activate Range("G18:G26") = Selection.Areas.Count Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("D4").Select Range("D4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 4).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("E4").Select Range("E4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 5).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("H4").Select End If

  • VBAの勤務割表の式を短く

     月間の勤務割表を作成しています。 1列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。 列に日付、行を個人名(max16名)とし1列3行を名前の定義で13種類作成してあります。 別シートの各セルの入力番号に応じて13種類を貼り付けていますが、式を簡単にできませんでしようか?  お教えくださいませんでしょうか?勉強不足は否めませんが。 尚名前の定義は、1行3列に1--で勤務1・""-""で日勤・""公休""で公等にしてあります。 OS Windows7 Office2010 Sub 図形の貼付け2() If Worksheets("メイン").Range("J9").Value Then Select Case Worksheets("メイン").Range("J9").Value 1人-1日 Case 1: ActiveSheet.Range("勤務1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 2: ActiveSheet.Range("勤務2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 3: ActiveSheet.Range("勤務3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("日勤1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("日勤2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("日勤3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select Else Select Case Worksheets("メイン").Range("I9").Value Case 2: ActiveSheet.Range("明け").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("夜勤").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("公").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("有").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 7: ActiveSheet.Range("特").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 8: ActiveSheet.Range("振").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 9: ActiveSheet.Range("欠").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select End If End Sub

  • Excel 2010 で勤務割表を作成しています。

    月間の勤務割表を作成しています。 3列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。 列に日付、行を個人名(max16名)としますから、3列3行の枡が496個となります。 各枡とも1列目の1行目に勤務種別コード(1~5)を記述し、このコードNoにより4種の図形を貼付けています。 1つ1つの枡(496個)に以下のコードを書き実行しています。膨大な行数を要します。 使用するパソコンにおいては実行速度がかなりかかります。 これをもっと単純化する手法についてご教示いただければ幸いです。 Sub Macro1() Select Case Range("I6").Value '1人目-1日 Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Range("J7").Select ActiveSheet.Paste Case 2: ActiveSheet.Shapes("四角形2").Select Selection.Copy Range("I7").Select ActiveSheet.Paste Case 3: ActiveSheet.Shapes("四角形3").Select Selection.Copy Range("J7").Select ActiveSheet.Paste Case 4: ActiveSheet.Shapes("直線1").Select Selection.Copy Range("I6").Select ActiveSheet.Paste Case 9: ActiveSheet.Shapes("四角形3").Select Selection.Copy Range("J7").Select ActiveSheet.Paste End Select  '|   '| <同じことを一つ一つの枡ごとに繰り返し記述しています。>   '| Select Case Range("CU51").Value '16人目-31日 Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Range("CV52").Select ActiveSheet.Paste Case 2: ActiveSheet.Shapes("四角形2").Select Selection.Copy Range("CU52").Select ActiveSheet.Paste Case 3: ActiveSheet.Shapes("四角形3").Select Selection.Copy Range("CV52").Select ActiveSheet.Paste Case 4: ActiveSheet.Shapes("直線1").Select Selection.Copy Range("CU51").Select ActiveSheet.Paste Case 9: ActiveSheet.Shapes("四角形3").Select Selection.Copy Range("CV52").Select ActiveSheet.Paste End Select End Sub

専門家に質問してみよう