• ベストアンサー

保存先のフォルダ名を指定したいとき

希望する事は ファイルを保存するフォルダを指定し、 ファイル名(インプットボックスをつかって 変数として入力させたもの)をつけて保存したい。 フォルダは事前に作成してあるが 保存したい場所はそのときによってまちまちなので 保存するたびにフォルダを指定したい。 具体的には C:\入力済みデータ\【○○】としたいのですが この【○○】の部分を、そのときに応じて選択するにはどうすればいいでしょうか。 または、浅知恵で Application.Dialogs(xlDialogSaveAs).Show arg1:="c:\" というかたちでダイアログボックスを出すまでは出来たのですが ファイル名は空欄になってしまいますよね。 InputBoxでファイル名を変数として入力させたものを 上のファイル名に入れることは可能ですか? どうぞよろしくお願いします。

  • miz_k
  • お礼率35% (10/28)

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

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

これでできませんか? まず条件どおり、C:\入力済みデータ の中にいくつかのフォルダを用意しました。 Excel 2003 を新規に立ち上げ、新規ワークブックに標準モジュールを挿入し、以下のコードを書き込んで実行しました。 Sub hoge() Dim initPath As String initPath = "C:\入力済みデータ" Dim saveFilePath As String saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xls),*.xls") If Not (saveFilePath = "False") Then ThisWorkbook.SaveAs saveFilePath End If End Sub "ファイル名を指定して保存" のダイアログが表示され、初期フォルダとして C:\入力済みデータ が開かれています。 ファイル名は何も指定されていません。 ダイアログの中には当然、先に作っておいたいくつかのサブフォルダが一覧表示されているので、ユーザーは 1) サブフォルダを選択する。 2) ファイル名を入力する。 3) [保存] ボタンをクリックする。 というアクションを行う。 私のところではダイアログ表示時の初期フォルダとして My Documents ではなく、きちんと C:\入力済みデータ が開かれましたよ。

miz_k
質問者

お礼

いいヒントをいただいて、自己解決いたしました。 大変参考になりました。 ありがとうございます。

miz_k
質問者

補足

いろいろとありがとうございます。 言葉足らずで申し訳ないのですが インプットボックスで入力させたファイル名は 一度「ファイル集計」シートの「セルB2」に格納しています。 このデータは ファイルナンバー = Range("B2")として ChDir "C:\入力済みデータ" ActiveWorkbook.SaveAs Filename:=ファイルナンバー & ".xls" のように一度入力済みデータフォルダに保存します。 ただし、入力済みデータフォルダに保存させようとしたときに、 もし同名のファイルが入力済みデータフォルダ存在していた場合、 サブナンバーをつけるようにしているのです。 (たとえば123-456というファイルがすでに入力済みフォルダに存在していて また123-456というファイル名で保存しようとした場合 「セルB2」の値を123-456-1という値に変え、123-456-1というファイル名で保存させる) 方法は以下のような感じです。(他にいいやり方があるかも知れませんが汗) Sub ファイル検索() Dim i As Integer Dim ファイルナンバー As String Sheets("ファイル集計").Select ファイルナンバー = Range("B2") With Application.FileSearch .LookIn = "C:\入力済みデータ"     .SearchSubFolders = False     .Filename = ファイルナンバー & "*.xls"     .FileType = msoFileTypeExcelWorkbooks     If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then      MsgBox ("サブナンバーに" & .FoundFiles.Count & " をつけて保存します")     Sheets("ファイル集計").Select Range("B2") = ファイルナンバー & "-" & .FoundFiles.Count End If End With End Sub 無事に入力済みデータフォルダに保存されたあと、 同じファイルを、もうひとつ納品用のフォルダに保存したいのです。 入力済みデータフォルダには、前述の理由で、以前入力したデータも 蓄積していかなければなりません。 (サブナンバーをつけることが出来無いので) ですが、たとえば10月に入力した部分だけを納品したいとき 2007-10というようなフォルダにまとめて納品したいというのが希望です。 ですから、2007-10というフォルダを作り、そこに保存をしたいのです。 教えていただいたように 保存する際にファイル名を入力させたのでは サブナンバーがつかないし、ファイルのB2セルにもファイル名を反映できないのではないかと思うのですが…

その他の回答 (5)

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.6

要するに、ExcelVBAで、フォルダを指定できる画面を表示できれば良いんですよね・・・ 「Access2003 VBA でフォルダ参照ダイアログについて」 (http://okwave.jp/qa3341236.html) では駄目?

回答No.4

VB6もですがVBAではフォルダだけを選択させるのは、大変なんです。 ファイル名の入力にInputBoxを使ってますが 代わりにフォームにして ファイル名とフォルダ名を入力させてはどうでしょう? 使用するコントロールは ファイル名:テクストボックス フォルダ名:リストボックスまたはコンボボックス とすれば、ファイル名は自由に入力できて、かつフォルダ名は規定のものから選択するように出来ます。

回答No.3

> の【○○】の部分に > 保存指定フォルダ = InputBox("保存するフォルダ名を半角で入力してください ", "保存フォルダ入力") すみません。ユーザーにはどこまでさせたくて、システム側はどこまでしてあげるのかの境界線がわからなくなりました。。。 ファイル名はユーザーに指定させたくなくて、その一個上のフォルダ名だけを指定させたいってこと? つまり、c:\aaa\bbb\ccc\ddd.xls のうち ccc の名前だけをユーザーに指定させたい? Dim initPath As String initPath = "C:\入力済みデータ\hoge.xls" Dim saveFilePath As String saveFilePath = Application.GetSaveAsFileName(initPath, "Excel File (*.xls),*.xls") ThisWorkbook.SaveAs saveFilePath 上記 2行目。 一階層減らして、代わりにファイル名を固定にしました。 これを実行して名前を付けて保存ダイアログを開いてみてください。 初期パスとして一階層上の "C:\入力済みデータ\" が開かれていて、そのサブフォルダ一覧がダイアログに表示されています。 更に、ファイル名も入力済みの状態です。 あとは質問者さんが言うように InputBox でユーザーに入力させたいフォルダ名をこのサブフォルダ一覧の中からマウスのダブルクリックで開いて [保存] ボタンを押すだけ。 操作手順的にも一般の Windows アプリの手順と同じなのでユーザーが混乱する事もないかと。

miz_k
質問者

補足

ありがとうございます。 やってみましたが、保存先として開いたのはmydocumentになってしまい ファイル名はhoge.xlsと出てしまうのですが… もう一度整理してみます。 手順としては データを入力したあと (1)インプットボックスでファイル名(↓ではファイルナンバーになっていますが…)を入力させる  ファイルナンバー = InputBox("ファイルナンバーを半角で入力してください ", "ファイルナンバー入力") (2)保存する場所を選択させる  C:\入力済みデータ…この下には10-01、10-02などのフォルダがすでにあるので、この中から選択させたい 選択が出来ないなら、インプットボックスでフォルダ名を指定させても可  保存指定フォルダ = InputBox("保存指定フォルダを半角で入力してください ", "保存指定フォルダ入力"…などで なので、ファイル名を固定されると困ってしまうのです。 もう、どうしたらいいかわからなくなりました(泣)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>Application.Dialogs(xlDialogSaveAs).Show arg1:="c:\" というかたちでダイアログボックスを出すまでは出来たのですが ファイル名は空欄になってしまいますよね。 その空欄にファイル名を入れるのではないですか。 「保存先」に下記例では「新しいフォルダ」に限定され、そのフォルダのファイルがその下の枠内に表示されている。 Sub test01() Application.Dialogs(xlDialogSaveAs).Show arg1:="C:\Documents and Settings\xxxx\デスクトップ\新しいフォルダ" End Sub ーーー もっと、ファイル名が例えば、fff○○の○○だけ入力したいのなら Sub test01() Application.Dialogs(xlDialogSaveAs).Show arg1:="C:\Documents and Settings\OTO\デスクトップ\新しいフォルダ\fff" End Sub とすれば、「ファイル名」欄に、fffが入って入力待機状態になります。

miz_k
質問者

補足

さっそくのご教示ありがとうございます。 やってみたのですが、思ったようにできませんでした。 もっと、ファイル名が例えば、fff○○の○○だけ入力したいのなら Sub test01() Application.Dialogs(xlDialogSaveAs).Show arg1:="C:\Documents and Settings\OTO\デスクトップ\新しいフォルダ\fff" End Sub とすれば、「ファイル名」欄に、fffが入って入力待機状態になります。 ↑の「fff」の部分を、 ファイルナンバー = InputBox("ファイルナンバーを半角で入力してください ", "ファイルナンバー入力") という形で入力させた値にしたいのですが… これだと、ファイル名欄に"ファイルナンバー"とテキストが入ってしまうのです。

回答No.1

InputBox を使う事が希望内容に入ってますが、使わなくちゃダメですか? 通常の 「名前を付けて保存」 ダイアログを使っちゃダメですか? Dim initPath As String initPath = "C:\入力済みデータ\【○○】\" Dim saveFilePath As String saveFilePath = Application.GetSaveAsFileName(initPath, "Excel File (*.xls),*.xls") ThisWorkbook.SaveAs saveFilePath 最後の ThisWorkbook は保存対象のブックに合わせて適宜変更。

miz_k
質問者

補足

さっそくのご教示ありがとうございます。 Dim initPath As String initPath = "C:\入力済みデータ\【○○】\" Dim saveFilePath As String saveFilePath = Application.GetSaveAsFileName(initPath, "Excel File (*.xls),*.xls") ThisWorkbook.SaveAs saveFilePath の【○○】の部分に 保存指定フォルダ = InputBox("保存するフォルダ名を半角で入力してください ", "保存フォルダ入力") という形で入力させた値を入れるにはどうしたらいいでしょうか…

関連するQ&A

  • エクセル ファイル名を指定して保存したい。

    現在次のようなマクロを最後に記述してそこでダイアログボックスに表示されるデフォルトのファイル名に都度日にちを手動入力して保存しています。 これを自動でファイル名を保存ダイアログボックスに表示できるようにしたいのですがどのような記述にしたらいいでしょうか ※ファイル名 A1に2016/9/15と入っている場合 「160915△△△△△△△..xlsm」と保存したい。 (「△△△△△△△」は固定) 現在使用中 Application.Dialogs(xlDialogSaveAs).Show Windows7/エクセル2013

  • エクセルの保存で。

    xls形式で保存したあとに、csv形式で保存するVBAを作りました。 csv形式で保存するときは指定したディレクトリ「c」を 表示してくれるのですが、 xls形式のときは実行時のカレントを指定しまいます。 なぜでしょう??? Sub filehozon() Dim MyFileA 'As String MyFileA = "c:\test" 'xls形式保存 Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileA, arg2:=1 Sheets(2).Copy Application.DisplayAlerts = False 'csv形式保存 Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileA, arg2:=6 ActiveWindow.Close Application.DisplayAlerts = True End Sub

  • VBAの組み込みダイアログの引数Argについて

    エクセルVBAでの質問です。 エクセルとして名前をつけて保存なら Sub aaa() Application.Dialogs(xlDialogSaveAs).Show ARG1:="ABC.xls", ARG2:=1 End Sub テキストファイルとして名前をつけて保存なら Sub bbb() Application.Dialogs(xlDialogSaveAs).Show ARG1:="ABC.txt", ARG2:=3 End Sub CSVファイルとして名前をつけて保存なら Sub ccc() Application.Dialogs(xlDialogSaveAs).Show ARG1:="ABC.csv", ARG2:=6 End Sub でうまくいきます。 今度は、ファイルを開こうとxlDialogOpenに変えました。 Sub aaa2() Application.Dialogs(xlDialogOpen).Show ARG1:="ABC.xls" ', ARG2:=1 End Sub Sub bbb2() Application.Dialogs(xlDialogOpen).Show ARG1:="ABC.txt", ARG2:=3 End Sub 以上二つはファイル名入りのダイアログは出ました。でもダイアログの画面にはフォルダーしか表示されません。 Sub ccc2() Application.Dialogs(xlDialogOpen).Show ARG1:="ABC.csv", ARG2:=6 End Sub これは実行時エラーになりました。 どうも、Application.Dialogs(xlDialogSaveAs)とApplication.Dialogs(xlDialogOpen)では引数ARG2が違うようです。 Application.Dialogs(xlDialogOpen)でのARG2は何の指定なのでしょうか?またその数値の意味はなんでしょうか?

  • エクセルのVBAで指定フォルダにアクセスしてくれません。

    下記のような流れでVBAを作成したところ、xls形式でダイアログを指定する際に指定のフォルダにアクセスしてくれません。記述がおかしいのでしょうか。教えてください。 '**************************************** 'ダイアログ表示(csv形式) Dim MyFileA As String MyFileA = "c:\test\bonaplus" & Format(Date, "yyyymmdd") Sheets("test").Copy Application.DisplayAlerts = False 'arg2:=6(csvファイル形式) Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileA, arg2:=6 ActiveWindow.Close Application.DisplayAlerts = True 'ダイアログ表示(xls形式) Sheets("data").Select Range("A1").Select Dim MyFileB As String MyFileB = "c:\test\bonaplus" & Format(Date, "yyyymmdd") Application.DisplayAlerts = False 'arg2:=1(xlsファイル形式) Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileB, arg2:=1 'ActiveWindow.Close Sheets("data").Select Range("A1").Select MsgBox "c:\testにファイルが作成されました。" ThisWorkbook.Close Application.DisplayAlerts = True '**************************************** *************マクロの説明始***************** 指定フォルダにcsv形式でダイアログを表示させる 指定フォルダにxls形式でダイアログを表示させる エクセルを閉じる *************マクロの説明終*****************

  • ファイル保存時のダイアログ表示フォルダを変更したい

    ファイル保存時にネットワーク上のフォルダを表示するダイアログを表示するには どのように記述すればよろしでしょうか。ご教授よろしくお願い致します。 以下、教えていただいたコードですが Const PathName = "\\●●\○○\" Call SetCurrentDirectory(PathName) Application.Dialogs(xlDialogSaveAs).Show このコードでファイルを開くダイアログを記述すると 設定したネットワーク上のフォルダを表示するのですが Application.Dialogs(xlDialogOpen).Show  ---OK ファイル保存のダイアログを記述すると では、デスクトップがダイアログに表示されます。 Application.Dialogs(xlDialogSaveAs).Show ---NG Application.Dialogs(xlDialogSaveAs).Show の場合(保存ダイアログ表示)は どのように記述すれば、ネットワーク上のフォルダを表示できますでしょうか。 よろしくお願い致します。

  • エクセルで所定のフォルダーにPDFファイルで保存

    エクセル、ワードでほぼ毎日送付する報告書をpdfファイルで送ることになりました。 ファイル名が指定の数字10桁(LOT No)で、これはエクセル表に入力してあるのでそのセルから引っ張ってきたいのです。⇒オペミス防止 少し調べてみたら非常に簡単な下記の3行で出来ることが分かったのですが、ついでにpdfファイル(D10のセル内容+.pdf)で保存画面が出て来れば非常に便利。 更なる欲としては、フォルダーまで指定できれば、マクロボタン化しておけば非常に便利なのですが。 1つ1つのマクロはここで絶大なるHELPを受けて出来ているのですが情けないことに全く応用が利きません。 Sub File() Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("D10") End Sub 尚、このコードはSheet1にしか適用されないようなので任意のActiveページで使いたいのですが。

  • ファイルの保存場所を設定してしまう方法

    ファイルを保存する時に、保存先を指定できるマクロ(下記参照)があります。 保存場所あらかじめ設定するには、何を足せばいいのでしょうか? Sub NameSave() Application.EnableEvents = False Application.Dialogs(xlDialogSaveAs).Show arg1:=ファイル名 Application.EnableEvents = True End Sub vbaは初心者です。 エクセル2003を使っています。 ご存知の方、どうぞ教えてください。 よろしくお願いいたします。

  • エクセルVBA 組み込みダイアログのコンパイルエラーについて

    ファイル保存のための組み込みダイアログでデフォルトの名前を指定したい場合、 Application.Dialogs(xlDialogSaveAs).Show 'ARG1:="あたらしいファイル", ARG2:=1) でOKなのですが、 キャンセルボタンを押された場合の処理をするため Dim boCheck As Boolean boCheck = Application.Dialogs(xlDialogSaveAs).Show 'ARG1:="あたらしいファイル", ARG2:=1) If boCheck = False Then キャンセルの場合の処理 Else そうでない場合の処理 End if とするとコンパイルエラーになります。 どこが悪いのでしょうか?

  • フォルダ作成と別名保存【VBA】

    教えてください 現在、下の2つのマクロを使っています。 「O27」の値でフォルダを作るものとブックを別名保存するものです。 これを1つにまとめたいのですが単純に1つにまとめるとフォルダは作成されるのですがブックの別名保存がセルの値を参照してくれません。 また、MkDir でフォルダを作成すると同じ名前のフォルダが先にあるとエラーになってしまいます。 この2点を解消できる方法はないでしょうか? よろしくお願いいたします。 Sub 別名フォルダ() MkDir Worksheets("オーダーシート").Range("O27").Value End Sub Sub 別名保存() Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("O27").Value End Sub

  • VBA 別名で保存する際のarg引数

    WINは7、Excelは2013を使用しています。 VBAで別名で保存する際、 Application.Dialogs(xlDialogSaveAs).Show arg1:=(shn & "_集計"), arg2:=1 とすると、ファイルの種類のところで、Excel 97-2003ブック が選ばれるのですが、 ここを Excel ブック を選ぶ様に設定したいと思っています。 しかし、arg2:= のところの入れる数字が分かりません。 申し訳ありませんが、ご教示下さい。 もし一覧が載っているサイトをご存知でしたら、教えて下さると大変ありがたいです。 よろしくお願い致します。

専門家に質問してみよう