• ベストアンサー
  • 困ってます

VBAについて

VBAについて質問です。 データをコピーして新規ブックとして名前(年、月、日)をつけて別のフォルダ(デスクトップ上のフォルダ)に毎朝8時に保存したいのですが、Cディスク内に直接保存されてしまいます。 コードは以下の通りです。 Sub 自動保存() With workbooks("サンプル.xism") Worksheets("Sheet3").Range("B6:B205").Value = .Worksheets("メインモニタ").Range("F13:F212").Value Worksheets("Sheet3").Range("D6:D205").Value = .Worksheets("メインモニタ").Range("K13:K212").Value Worksheets("Sheet3").Range("F6:F205").Value = .Worksheets("メインモニタ").Range("P13:P212").Value Worksheets("Sheet3").Range("H6:H205").Value = .Worksheets("メインモニタ").Range("U13:U212").Value End With Worksheets("Sheet3").Select Worksheets("Sheet3").Copy Application.DisplayAlerts = False With ActiveWorkbook.SaveAs "C:\サンプル2_" & Format(Date , "yyyymmdd") . Close End With Application.DisplayAlerts = True Application.OnTime DateValue(Date + 1) + TimeValue("8:00:00") , "自動保存" Worksheets("メインモニタ") . Activate End Sub ご教授宜しくお願いします。

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

  • 回答数2
  • 閲覧数127
  • ありがとう数2

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

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

質問者様は、ファイルのパスについての表記はご存じでしょうか? [ (ドライブ名): ]から始まり、ドライブ・フォルダ・ファイル名を [ \ ]で区切って表現します。 例えば、[ Cドライブ ]の直下にある[ AAA.txt ]と言うファイルの場合、 フルパスは[ C:\AAA.txt ]となります。 [ Dドライブ ]の直下の[ Test ]フォルダの中の[ BBB.txt ]ファイルなら、 フルパスは[ D:\Test\BBB.txt ]になります。 質問者様のコードでは、保存先( SaveAs関数の引数 )に [ C:\サンプル2_yyyymmdd ]としていますから、 Cドライブ直下に保存される訳です。 保存先をデスクトップにされたいのでしたら、 デスクトップのパスを指定しなくてはなりません。 デスクトップのパスはパソコンによって異なります。 Windows7をCドライブにインストールした例だと、 [ C:\Users\(ユーザ名)\Desktop ]になります。 ※(ユーザ名)は、ご自分のWindowsユーザ名です この場合、コードでは下記のようになります。 ActiveWorkbook.SaveAs "C:\Users\(ユーザ名)\Desktop\サンプル2_" & Format(Date , "yyyymmdd") . Close 拙い説明ですが、お分かりいただけたでしょうか?

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

質問者からのお礼

返事遅くなり申し訳ありません。 説明が分かりやすく大変勉強になりました。有難う御座います。 ファイル保存はお陰様でうまくいきました。 VBA初心者の為わからない事だらけです.... また何かわからない事が有ればご指導お願いします。

関連するQ&A

  • Excel2007 VBAについて

    Excel2007 VBAについて質問です。 現在マクロでExcelデータを毎朝8時に保存フォルダに自動保存しているのですが、今回保存フォルダの中に年別フォルダ、月別フォルダを作成しその中に保存していきたいと思っています。 例 2013年フォルダの中に1月~12月のフォルダ 2013年2月25日の保存データは2013年フォルダ内の2月フォルダ内に保存。 ちなみに年度別フォルダは、2030年ぐらい迄作る予定です。 以下現在のマクロです。 Sub 自動保存() Dim 年 As String Dim 月 As String Dim 日 As String 年 = Year(Now()) 月 = Month(Now()) 日 = Day (Now()) With Workbooks (″サンプル.xlsm″) WorkSheets(″Sheet3″).Range(″B6:B205″).Value = Worksheets(″メインモニタ″).Range(″F13:F212″).Value End With Worksheets(″Sheet3″).Select Worksheets(″Sheet3″).Copy Application.DisplayAlerts = False Const mypath As String = ″C:¥保存データ¥″ With ActiveWorkbook.SaveAs″C:¥保存データ¥″_&年&″年″&月&″月″&日&″日″&″.xlsx″.Close End With Application.DisplayAlerts = True Application.Ontime DeteValue(Dete +1)+TimeValue(″8:00:00″),″自動保存″ Worksheets(″メインモニタ″).Activate End Sub すいませんがご指導願います。

  • エクセルのフォームのVBAについて

    VBAがまったくわからないのに参考書を見て高度な事に挑戦しています フォームは作れてフォームをクリックやら入力やらして作ったOKボタンを押すと シート2のA1B1C1‥の列に入力文字だけが羅列されます。 しかし次にやろうとするとA2B2C2‥と下に行かず又A1B1C1‥の列の文字が変更になり続きません。何がいけないのでしょうか? Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row .Range("A" & LastRow).Value = Worksheets("sheet1").Range("A5").Value .Range("B" & LastRow).Value = Worksheets("sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("A10").Value End With End Sub と参考書とおりいれたのですが‥。教えて下さい。

  • VBAでVlookup関数を組もうとしていますがエラーが出ます。VBAに詳しい方、教えてください

    VBAでvlookup関数を下のように組みましたが、(1)でエラーが出ます。VBAに詳しい方、教えてください。 Sub VLLOKUPによる表の検索4() Dim mykensakuchi Dim mykensakuhan Dim gyo As Integer (1) mykensakuchi = Worksheets("sheet1").Range("a" & gyo).Value mykensakuhan = Worksheets("sheet2").Range("b2:e9") saikagyo = Worksheets("sheet1").Range("a" & Rows.Count).End(xlUp).Row gyo = 2 For gyo = saikagyo To 1 Step -1 With Application.WorksheetFunction Range("b:gyo").Value = .VLookup(mykensakuchi, mykensakuhan, 2, False) End With Next End Sub

その他の回答 (1)

  • 回答No.1
  • bin-chan
  • ベストアンサー率33% (1403/4213)

できあがるファイルは「サンプル2_20130219」みたいな名前?Cドライブ直下でしょ? ActiveWorkbook.SaveAs "C:\サンプル2_" & Format(Date , "yyyymmdd") と書いてあるから、Cドライブ直下に作ってるんじゃないの? Dドライブがあり、D\Backupフォルダでもあって、そこに保存したいなら ActiveWorkbook.SaveAs "D:\Backup\サンプル2_" & Format(Date , "yyyymmdd") じゃないの?

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

質問者からのお礼

返事が遅くなり申し訳ないです。保存はうまくいきました。 有難うございました。

関連するQ&A

  • 【VBA】 超初心者です 複数のシートに転記したい

    Sub べんきょう() Worksheets(Array(1, 3)).Select Range("A1").value = 20 End Sub もしくは Sub べんきょう() Worksheets("sheet1").Select Worksheets("sheet3").Select False Range("A1").value = 20 End Sub でやってもsheet1にしか転記されないんです!! ご指導よろしくお願いします!

  • 他のブックでマクロを実行するには?

    以下のマクロを実行すると同一ブック内の他のシートに入力 されますが、これを他のブックのシートに入力されるように するには、具体的にどのようにすればいいのでしょうか? ご教授ください。 ---------------------------------------------------------------- Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1 .Range("B" & LastRow).Value = Worksheets("sheet1").Range("B1").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("B3").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("B5").Value .Range("E" & LastRow).Value = Worksheets("sheet1").Range("B7").Value .Range("F" & LastRow).Value = Worksheets("sheet1").Range("B9").Value .Range("G" & LastRow).Value = Worksheets("sheet1").Range("B11").Value End With End Sub

  • エクセルVBAについて

    エクセルVBA初心者で、勉強中の者です。 添付画像のような時間のグラフのようなものを作りたいと思っています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 時間グラフ作成() If Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:05") Then Worksheets("(2)(2)(2)(2)").Range("I2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With Elseif Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:10") Then Worksheets("(2)(2)(2)(2)").Range("J2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With  ・  ・   ・ End If End Sub 'それから、終了の時間を入れて、開始から終了までの間を塗りつぶす。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 以上のように作成しようと考えていましたが、いざやろうとすると 1行に対してあまりにも膨大な記述をしなくてはならないことに 気がつきました(一月分ともなると恐ろしいです・・・)・・・。 もっと効率的な方法はあるものでしょうか? よろしくお願いいたします。

  • エクセルVBAについて

    エクセルVBA初心者で、勉強している者です。 今、ガントチャートのようなものを作っているのですが、 下記のような記述をしたのですがうまく動きません。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 時間グラフ作成() If Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = "10:00" Then Worksheets("(2)(2)(2)(2)").Range("T2").Select With Selection.Interior .ColorIndex = 8 .Pattern = xlSolid End With End If End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ F2のセルを空にし、「""」で実行すると動きました。 色々調べてみたものの、煮詰まってしまいました・・・。 よろしくお願いいたします。

  • エクセルVBA

    VBAの素人です。 以下のようなVBAを実行しようと、何とか形にしました。 単独のBOOKではうまくいくのですが、同時に他のBOOKを開くと 「インデックスが有効範囲にありません」とエラーになります。 エラー箇所は、With Sheets("Sheet1").Range("B1")部分です。 修正をご教示頂ける方、何卒よろしくお願い致します。 全くVBA無知なのにすみません。 Private Sub Workbook_Open() test01 test02 Application.OnTime Now + TimeValue("00:10:00"), "終了" End Sub Sub 終了() Application.OnTime Now + TimeValue("0:00:02"), "test01", , False ThisWorkbook.Close Savechanges:=False Application.Quit End Sub Sub test01() With Sheets("Sheet1").Range("B1") .Value = Time .NumberFormatLocal = "mm:ss" End With Application.OnTime Now + TimeValue("0:00:02"), "test01" End Sub Sub test02() With Sheets("Sheet1").Range("B2") .Value = Time .NumberFormatLocal = "mm:ss" End With End Sub

  • VBAについて

    こんばんは、下記のVBAについて質問をさせてください…! シートの名前と特定の列の名前が一致したらデータを引っ張ってくるというVBAなのですが、下記のVBAではもってくるデータはE列でおわりですが、もっと沢山列がある場合で、例えばDA列とかまである場合はどうすればよいのでしょうか…?! まさか「.Range("A" & cellCnt).~」というのを一つ一つ入力するわけではないと思うのですが、記述の方法が分からず困っています。 どなたかご教示いただけると大変助かります…! ' データをとってくるシートの行 Dim dataCnt As Integer ' 貼り付け先のシートの行 Dim cellCnt As Integer cellCnt = 1 For dataCnt = 1 To Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row If Sheets("Sheet1").Range("L" & dataCnt).Value = Sheets(sheetIdx).Name Then With Worksheets(sheetIdx) .Range("A" & cellCnt).Value = Worksheets("Sheet1").Range("A" & dataCnt).Value .Range("B" & cellCnt).Value = Worksheets("Sheet1").Range("B" & dataCnt).Value .Range("C" & cellCnt).Value = Worksheets("Sheet1").Range("C" & dataCnt).Value .Range("D" & cellCnt).Value = Worksheets("Sheet1").Range("D" & dataCnt).Value .Range("E" & cellCnt).Value = Worksheets("Sheet1").Range("E" & dataCnt).Value End With cellCnt = cellCnt + 1 End If Next

  • VBA マクロ処理時間の短縮について

    下記のコードを作りましたが、マクロを実行すると砂時計マークが表示されて、処理が終了するまでに30秒くらいかかります。 コードを変更して、マクロ処理時間を短縮する事はできないでしょうか? Sub A列のコピー() Dim rw2 As Long Dim rw1 As Long Dim newdate As Date With Worksheets("sheet1") rw2 = .cells(.Rows.Count, "c").End(xlUp).Row newdate = .Range("c" & rw2).value For rw1 = rw2 - 1 To 1 Step -1 If .Range("c" & rw1).value <> newdate Then Exit For Next rw1 .Range(.cells(rw1 + 1, 1), .cells(rw2, 1)).Copy Worksheets("sheet2").Range("v6").PasteSpecial xlValue If rw1 + 26 <= rw2 Then .Range(.cells(rw1 + 26, 1), .cells(rw2, 1)).Copy Worksheets("sheet2").Range("v40").PasteSpecial xlValue Application.CutCopyMode = False End If Application.CutCopyMode = False End With End Sub 各セルは、6000行くらいまで表示されています。  よろしくお願いします。

  • エクセルVBA の変数を使うべきでしょうか?

    はじめまして。エクセル初心者です。 書籍やサイトで勉強させてもらっていますが、VBAがなかなか難しくてすぐに壁にぶつかってしまいます。少々困ってしまい、詳しい方のアドバイスを頂ければと質問を投稿させていただきました。 どうか宜しくお願い致します。質問ですが、 以下のようなコードで、sheet5のB列の任意のセルをダブルクリックした場合、sheet5のBCD列の同じ行のセル値がsheet1の指定した列に入力されるという処理を作りました。 これで一応目的の動作はするのですが、数が増えると「コンパイルエラー・プロシージャが大きすぎます」というメッセージがでてしまいます。列や行には規則性があるので、もしかしたら変数というものを使ってコードを書き直せばいいのかなと思いネットで調べてみたのですが、今のところさっぱり理解できません。 申し訳ありませんが、分かりやすくご教授いただけないでしょうか。バージョンは2003を使っています。 また、下のコードですと、sheet5のBCDいずれかのセルに空白があった場合、sheet1の列に入力されるときに入力される行がずれてしまいます。今は空白を何かで埋めて対処しているのですが、この問題の解決策も教えて頂けると助かります。どうか宜しくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Target.Address = "$B$2" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B2") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C2") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D2") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$3" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B3") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C3") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D3") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$4" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B4") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C4") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D4") Worksheets("sheet1").Activate cancel = True End If   ・     ・   ・     ・   ・     ・ End Sub

  • 印刷後のVBAの実行 (3)

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then If Range("D6").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D6").Select Exit Sub End If Else If ActiveSheet.Name = "Sheet2" Then If Range("C11").Value = "" Then Cancel = True MsgBox ("受付時間を入力してください") Range("C11").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("Sheet1").Range("D5") = "不要" Then GoTo P1 ActiveSheet.Range("A70:Y70").Copy If Worksheets("Sheet3").Range("A1").Value = "" Then Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues Else Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub sheet1のD5に「不要」と入っていたら 24~33行目の作業がキャンセルになりますが sheet2のD5にも「不要」と入っていたら、同じ様にキャンセルできる様に出来ますでしょうか? ご回答お願いします

  • 印刷後のVBAの実行 (2)

    Private Sub Workbook_BeforePrint(Cancel As Boolean)   If ActiveSheet.Name = "Sheet1" Then     If Range("D6").Value = "" Then       Cancel = True       MsgBox ("名前を入力してください")       Range("D6").Select       Exit Sub     End If   Else     If ActiveSheet.Name = "Sheet2" Then       If Range("C11").Value = "" Then         Cancel = True         MsgBox ("受付時間を入力してください")         Range("C11").Select         Exit Sub       End If     Else              Exit Sub     End If   End If   ActiveSheet.Range("A70:Y70").Copy   If Worksheets("Sheet3").Range("A1").Value = "" Then     Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues   Else     Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _       Paste:=xlPasteValues   End If   Application.CutCopyMode = False   ActiveSheet.Range("A1").Select End Sub 先日、上記のコードを回答者の方から教えてもらい、とても助かっていますが sheet1のD5に「不要」という文字が入っていた場合、 sheet3への貼り付け(23~30行目の作業)をキャンセルして、最後にsheet1のA1を選択するようにはどの様にしたらいいでしょうか?