重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いつもお世話になっております。
エクセルのマクロで入力した複数のセルからファイル名を取り込み保存とフォルダも同様に作成する仕組みでマクロをネットで探して組みました。マクロボタンで両方共作成出来るようにしたのですが、作成した際、フォルダに入る様にしたいのですが教えて頂けないでしょうか?

因みにマクロは下記の様に組んでます。
①セルの情報をファイル名にするマクロ
Sub セルをファイル名にするマクロ()

Application.Dialogs(xlDialogSaveAs).Show Arg1:=ActiveSheet.Range("K1").Text & ("_") & ActiveSheet.Range("P17") & ActiveSheet.Range("M3") & ("_") & ActiveSheet.Range("P11")


End Sub

②セルの情報をフォルダ名にするマクロ
Sub フォルダ作成()
Dim tDir As String 'フォルダ作成パス
Dim nDir As String '作成するフォルダ名

'このワークブックのパスを取得
tDir = ThisWorkbook.Path

'tDirに作成するフォルダ名(称:XXX)
nDir = tDir & "\" & Range("K1").Text & Range("M2") & Range("P17") & ("_") & Range("P11")

'既にnDirがあるかどうか確認
If Dir(nDir, vbDirectory) = "" Then
'ない場合は作る
MkDir nDir
'あるなら何もしない
Else: End If

End Sub

エクセルのファイル名とフォルダ名は基本的に同一ですが、一部分のみ違います。

VBAは①と②を合算してフォルダに入る様にするか、もしくは、作成したファイルを(Callを使って)フォルダに移動でも良いかと思うのですが・・・。

尚、保存するフォルダはエクセルを通常保存しているフォルダ内とします。
大元のフォルダ内にエクセルファイルと新規でフォルダを作成してその新規フォルダ内に最終的に保存したいです。

まだまだ、初めて日は浅いので①と②を作成が限界です。何卒宜しくお願い致します。

質問者からの補足コメント

  • うれしい

    遅くなり申し御座いません。

    大変助かりました。参考にして勉強させて頂きます。

    何かありましたらまたご相談させて頂きます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/01/25 10:34

A 回答 (2件)

#1です


>上記で作成致しましたフォルダに後から追加したエクセルファイル(マクロ有効で保存したいです)

下記はSheets.Copyで新規ブックを作り保存していましたが、
Application.DisplayAlerts = False 'アラート抑制
Sheets.Copy 'マクロ無で保存のため、すべてのシートを新規ブックへ
ActiveWorkbook.SaveAs _
    fileName:=nDir & "\" & fname & ".xlsx"
ActiveWorkbook.Close '保存したブックを閉じる
Application.DisplayAlerts = True
End Sub

の部分を下記のようにします

SaveCopyAsで行いコピーを別名で保存しています。

Dim Result, new_book As String
new_book = nDir & "\" & fname & ".xlsm"
If Dir(new_book) <> "" Then
  Result = MsgBox("同名ファイルが存在します。" _
  & vbCrLf & "上書きしますか?", vbYesNo, "ブックの保存")
  'Noを選択した時、保存せず終了
  If Result = vbNo Then
    MsgBox "終了します。"
    Exit Sub
  End If
End If
ThisWorkbook.SaveCopyAs new_book

'自ブックは保存、終了していません。

Application.DisplayAlertsに関しては、If Dir(new_book) <> "" Then
同名ファイルの存在を確認する事で無くすことが可能ですね、
この回答への補足あり
    • good
    • 0
この回答へのお礼

Qchan1962様
御解答有難う御座います。
マクロ有効で保存出来ました^^
私がやりたかったことはまさにこれです。
出来れば元のエクセルファイルを閉じる時「変更を保存しますか?」と
聞かれるのですが、元のファイルを保存せず閉じる仕様だと大変助かります。再度ご教授頂けないでしょうか?
大変ご面倒お掛けして恐縮ですが、宜しくお願い致します。

お礼日時:2021/01/20 07:04

こんにちは、


Application.Dialogsになっておりますが、保存する際に必要ですか?
必要が無いようなら、保存パス、ファイル名で保存することも出来ます
不明な点が、いくつかありますが、、
こんな感じかな、、

保存先パスを作成
フォルダ名を作成
ファイル名を作成
保存先パスにフォルダが無ければフォルダを作成
保存先パス&フォルダ名にファイル名でファイルを保存

問題点
>セルの情報をフォルダ、ファイル名にする場合、使用できない文字がある事
>最終的に保存したいです
VBAで自ブックを保存する場合、マクロ有効で保存するか無効で保存するかでロジックが変わる事

最終的にDialogなどで確認して、実行するかを決めるか否か、、
と言う事で Dialogを出しませんが、サンプルです。
コードに一応、コメントを付けました。
通常ブックで保存します。

Sub a()
Dim fname As String 'ファイル名
Dim folname As String 'フォルダ名
Dim folpath As String 'フォルダパス
Dim nDir As String '作成するフォルダ パス&名前
With ActiveSheet
  'folname 作成するファイル名(称:XXX)
  fname = _
      .Range("K1").Text & _
      ("_") & _
      .Range("P17") & _
      .Range("M3") & _
      ("_") & _
      .Range("P11")
  'folname 作成するフォルダ名(称:XXX)
  folname = _
      .Range("K1").Text & _
      .Range("M2") & _
      .Range("P17") & _
      ("_") & _
      .Range("P11")
End With
'作成するフォルダパス
folpath = ThisWorkbook.Path 'マクロ実行ブックのパス

Dim UnAvailable, mg
'使えない文字をチェックする
For Each UnAvailable In Array("\", "/", ":", "*", "?", """", "<", ">", "|")
  'バイナリで照合
  If InStr(1, fname & folname, UnAvailable, vbBinaryCompare) > 0 Then
    '含まれていたら
    mg = mg & UnAvailable & vbCrLf
  End If
Next
If mg <> "" Then 'チェック結果
  MsgBox ("フォルダ・ファイル名に使えない文字 " & vbCrLf & mg & " が含まれています")
  Exit Sub
Else
  MsgBox ("Information" & vbCrLf & _
      "対象フォルダパス:" & folpath & vbCrLf & _
      "フォルダ名:" & folname & vbCrLf & _
      "ファイル名:" & fname)
End If

nDir = folpath & "\" & folname
'既にnDirがあるかどうか確認
If Dir(nDir, vbDirectory) = "" Then
  'ない場合は作る
  MkDir nDir
Else 'あるなら
End If

'名前を付けて保存(新規ブック、マクロ無(拡張子.xlsx)
Application.DisplayAlerts = False 'アラート抑制
Sheets.Copy 'マクロ無で保存のため、すべてのシートを新規ブックへ
ActiveWorkbook.SaveAs _
    fileName:=nDir & "\" & fname & ".xlsx"
ActiveWorkbook.Close '保存したブックを閉じる
Application.DisplayAlerts = True
End Sub

少々違いますが、Dialogを出す場合、プロパティにパスやファイル名、拡張子など設定すれば良いかと思います。
    • good
    • 0
この回答へのお礼

Qchan1962様
早速の御解答有難う御座います。
てても素晴らしいです!まさにこれですが、
マクロ有効で保存したいのですが如何したら宜しいでしょうか?
御手数お掛け致しますが宜しくお願い致します。

大変あつかましいお願いになってしまいますが、上記で作成致しましたフォルダに後から追加したエクセルファイル(マクロ有効で保存したいです)

此方も合わせて頂けないでしょうか?

大変申し訳御座いませんが宜しくお願い致します。

お礼日時:2021/01/19 14:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!