• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:デスクトップの所定のフォルダにセルをファイル名で)

デスクトップの所定のフォルダにセルをファイル名で

このQ&Aのポイント
  • デスクトップの所定のフォルダにセルA1名のフォルダを作成し、そのフォルダ内にB2+C3をファイル名に保存するコードの使い方について教えてください。
  • デスクトップ上の決まった名前(見積書)のフォルダに直接B2+C3のファイル名で保存する方法を教えてください。
  • デスクトップ上の特定のフォルダにB2+C3をファイル名に保存するVBAコードを教えてください。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (788/1647)
回答No.1

これだけですけど。 フォルダを作っている所と、A1を外せばいいです。 ' Sub Macro1() '   ChDrive "C:"   ChDir CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\見積書"   ActiveSheet.ExportAsFixedFormat xlTypePDF, [B2] & [C3] End Sub やろうと思えば1行でできます。これならサーバでもできるでしょう。 長いので、_ を使って分けてもいいです。 ' Sub Macro2() '   ActiveSheet.ExportAsFixedFormat xlTypePDF, "C:\Users\MA\Desktop\見積書\" & [B2] & [C3] End Sub デスクトップと書いてあったからサーバは考慮しなくてもいいと思っていました。あの時は多少腹が立ちました。

akira0723
質問者

お礼

早々の度重なるご回答に感謝、感謝です。 一発で期待通りの結果が得られました。 先日は質問が中途半端だったせいでせっかくのご回答を無駄にしてしまいました。 前回は会社のサーバーのかなり深い色んなフォルダに、A1の子フォルダを作ってB2+C3をファイル名で保存する、が目的でしたのでNo2さんのご回答がピッタリでしたのでこちらを採用することにしました。 今回はVBAを知らない人でもエクセルを送ればデスクトップの指定のフォルダに自動保存できるようにすることが目的で、子フォルダを作ることは好ましくない用途で、諦めていたことができるようになりました。 本当にありがとうございました。

akira0723
質問者

補足

お世話になります。 途方も、おそらく親ホルダ(見積書)の下にA1フォルダを作る個所を削除すれば良いと思い、順列組み合わせで色々削除してみたのですが悲しいかな目的通りに動きませんでいた。 が、ご回答のコードはフォルダのパス不要でこれを仕込んだエクセルを送ればだれでもデスクトップ上の指定フォルダに自動保存できるのでこれは非常に有用なので何とかしたいと思い、SI299792さんに見つけてもらえるのを期待して2度目の同じ質問をさせていただきました。

その他の回答 (3)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

捕捉します。 VBAでセルの値を取得するときに [B2]や[C3]といった記述はアリなものの、 課題セルに表示形式を設定しているケース (とりわけ、日付シリアル値が埋まっているケース)では、 セル上に表示されている文字列をファイル名に使う場合に 意図した結果になりません。 そのため、私は、 FromSh.Cells(3, 3).Text あるいは、 Cells(3, 3).Text といったコードとしています。

  • SI299792
  • ベストアンサー率47% (788/1647)
回答No.3

Chdir を使いたくないなら、このように書けばいいです。   ActiveSheet.ExportAsFixedFormat xlTypePDF, _     CreateObject("WScript.Shell").SpecialFolders("Desktop") & _     "\見積書" & [B2] & [C3] あ、1行で済んだ。 余りに長いので_ で分けましたが。 最初からこれ上げたらよかったな。

akira0723
質問者

お礼

ファイルのセル内容での保存がこんなに簡単にできてしまうとはおどろきです。 使わせていただきます。 前回は失礼しました。 今回はありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

私だったら、 ChDir、ChDrive ステートメントは 現在のフォルダを変更した場合の影響範囲を考慮し あえて使うのを避け、以下のコードにします。 Sub MakePdf()  Dim PutDir As String  Dim FromSh As Worksheet  Dim PutFile As String  '対象シートを特定  Set FromSh = ThisWorkbook.Sheets("見積書")  '出力先ファイル名(フルパス)を組立て出力  PutDir = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\見積書"  PutFile = PutDir & "\" & _   FromSh.Cells(2, 2).Text & FromSh.Cells(3, 3).Text & ".pdf"  FromSh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PutFile End Sub '単にアクティブなシートを対象にするのであれば以下。 Sub MakePdf_B()  Dim PutDir As String  Dim PutFile As String  '出力先ファイル名(フルパス)を組立て出力  PutDir = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\見積書"  PutFile = PutDir & "\" & _   Cells(2, 2).Text & Cells(3, 3).Text & ".pdf"  ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PutFile End Sub

akira0723
質問者

お礼

いつもお世話になっております。 今回も1発で期待通りに動きました。 A1とかB2をわざわざ1,1とか2,2と書かれたコードは何度も見ていますので何か意味があるということは理解しています。 Q列とかになってくると数字も間違えたりしますし、最初は行列の順番を間違えていてそこで躓きました。 何度もの解説付きご回答ありがとうございます。 申し訳ありませんが、BSは前回、今回とも1発で動く回答を最初にご回答いただいたNo1さんにさせていただきますのでご了承ください。