Excelでセル内容でフォルダを作成して保存する方法

このQ&Aのポイント
  • Excelのマクロボタンをクリックすると、指定したセルの内容で指定したフォルダにPDFで保存される機能を改善したいです。
  • 具体的には、特定のシート上のセルの内容をフォルダ名として、指定したフォルダ内にフォルダを作成し、セルの他の内容をファイル名にしてPDFで保存します。
  • また、同じ顧客名の場合は既存の顧客フォルダに保存する機能も追加したいです。
回答を見る
  • ベストアンサー

エクセルでセル内容でフォルダを作って保存

今はマクロボタンをクリックすると特定のセルの内容で指定したフォルダにPDFで保存されるようにして使っているのですがその前段取りが結構手間がかかって間違いも多いので改良したいのです。 やりたいことは、 決まった名前(見積書)のシート上のセルの内容(顧客名)で、例えばデスクトップの決まったフォルダ(見積書)の中に、A1セルの内容(顧客名)でフォルダを作成し、セルB2+C3の内容(日付+見積No)をファイル名にPDFで保存する、ということは出来るのでしょうか? 更にA1(顧客名)が同じなら既存の顧客フォルダにB2+C3で保存したいのですが。。。 かなり贅沢な要求だと思いますが、もし可能であればよろしくお願いします。

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

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

・デスクトップに"見積書"フォルダーがある。 ・1つのブックに複数のシートがある。 ・その1つのシートの名前が"見積書"。  ※3 ・出力する対象シートが※3 ・このシートのA1セルに出力するフォルダー名が埋まっている ※1 ・B2,C3にファイル名が埋まっている。   ※2 ・※1が無かったら作成する。 ・※2があったら上書きする。 という理解でいいですか? ならば、 Option Explicit Sub MakePdf()    Const OyaDir = "C:\Users\papa\Desktop\見積書" '出力先親フォルダー  Dim PutDir As String  Dim FromSh As Worksheet  Dim PutFile As String  '対象シートを特定  Set FromSh = ThisWorkbook.Sheets("見積書")    '出力先フォルダーの組み立て、なければ作成  PutDir = OyaDir & "\" & FromSh.Cells(1, 1).Text  If IsExistDirA(PutDir) = False Then   MkDir PutDir  End If    '出力先ファイル名を組立て出力  PutFile = PutDir & "\" & _   FromSh.Cells(2, 2).Text & _   FromSh.Cells(3, 3).Text & ".pdf"  FromSh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PutFile End Sub Function IsExistDirA(a_sFolder As String) As Boolean  Dim result  result = Dir(a_sFolder, vbDirectory)  If result = "" Then   IsExistDirA = False  Else   IsExistDirA = True  End If End Function でいかがでしょうか。

akira0723
質問者

お礼

完璧です!! 昨日は何度か試してみて動かず。 既存のマクロを削除したり、シート名や指定セルを色々・・・ でも過去のHohoPapaさんの実績から、きっとコードは正しいはず、と思って今日改めて思考錯誤して動きました。 ダミーシートでセルやフォルダ名を質問の通りにしてみたら一発で動きました。 そこで改めて、会社のサーバのパスに置き換えて、セルも確認したら期待通りに動くことを確認しました。 (わかりやすい解説のおかげ)

その他の回答 (3)

  • SI299792
  • ベストアンサー率48% (715/1479)
回答No.4

>最初はこんな数行で  実はデスクトップだと楽なんです。サーバやクラウドがあり得ないから。  最近サーバの事がよくありますが、質問者はサーバがどうか書いてくれません。サーバの可能性を考慮してプログラムを作らなければなりません。  と思ったら、今度はクラウドで誤動作した事ありました。そこまで考慮できません。(クラウトまで考慮してプログラムを作ったら効率が落ちます) (愚痴です)

akira0723
質問者

お礼

解決したので早々にBSを決めて締め切らないといけないのですが、2番目のご回答と非常に迷いましたが、汎用性を考慮してHohoPapaさんにさせていただきます。 SI299792さんのご回答は当方の要求事項を完全に満たしており、かつ一番最初にご回答いただいているのですが汎用性を考慮して2番目のご回答にさせていただきますのでご了承ください。 こちらの質問の仕方が悪かっただけですので、本当に申し訳ありませんがご容赦!

akira0723
質問者

補足

やはり作る人からするとデスクトップが扱いやすいのですね。 過去にもここで色々教えてもらっており、素人なのでご指摘の通り場所を指定しないで質問するとデスクトップを例にしたコードをご回答いただくのですが、それを実際のサーバーに変えるのに大きく手間取ったことがあります。 逆にその経験から、DEST TOPで作っていただければと思ったのですが、ご回答は(感動するほど)あまりにシンプルで最初に ChDrive "C:" これをどうするのか?でしたが、HohoPapaさんのご回答で解決しました。 但し、現在のサーバのフォルダ構成がこのシステムにあっていないので当分はデスクトップで使用させていただき、フォルダをサーバーに移動する時にはHohoPapaさんのコードを使うことにしたいと思います。

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

質問の趣旨(この業務の目的)がわかりにくい。 質問には、丸投げしているのだから、問題のシートの一部(A,B,C列など、10行程度)を載せて質問してほしい。 ・顧客別の見積書の目録のようなものを作りたいのか? ・同一顧客宛の見積書は、(多分、月が違うのだろうが)同じフォルダーに入れておきたいのか? ・請求書の、発出は随時か、毎月(定例)か?  >A1(顧客名)が同じなら・・は、時期が違う見積書か?その得意先名フォルダに得意先+年月などのファイル名で、収納するなどを想定しているのか。 ・もし、毎月の見積書の実物コピーをもつならば、フォルダーに持たない方がよいのでは。 必要があれば元データから、その場でイメージを作成するとか。1,2か月分に 限定するとか。 ーー デスクトップにアイコンがあるとはいえ、デスクトップ(アイコン)がごちゃごちゃして、良くないのでは。数が多くなると、探すのが、むつかしくなるように思う。 ーー 目録的な、例えば、後日問合せや、調査のためのものなら、もっと得意先名を一覧化した表的なものを(1ファイルに)作る方がよいのでは。 ファイルを別にすると、VBAでは扱いが、より複座地下する。 ーー また、見積書の書式(実物)イメージで保存するのではないようだが、なぜPDFで保存するのか。 ーー マクロなんて言っているところや、発想がどうも経験の少ない人が、思い付きで質問しているように思えてならない。近くに相談できる人が必要と思う。  まだ会社の通常業務をプログラムで、処理するのは無理があるのでは? ーー デスクトップにフォルダを作る、なんてWEB照会すれば記事がむつかる。 Googleで「vba デスクトップ フォルダ作成」で照会すれば記事が出る。 1例は http://officevba.info/specialfolder/ ーー Sub デスクトップに「あいうえお」名のフォルダを作成するマクロ() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CreateFolder "C:\Users\XXX\Desktop\あいうえお" Set FSO = Nothing End Sub XXXは質問者の場合のユーザー名に置き換えること。 削除は Sub test01() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") FSO.DeleteFolder "C:\Users\XXX\Desktop\あいうえお" End Sub

akira0723
質問者

お礼

早々のご回答ありがとうございました。 非常に参考になりました。

  • SI299792
  • ベストアンサー率48% (715/1479)
回答No.1

デスクトップに「見積書」フォルダは必ずあるのですね。 VBA に不可能はありません。 ' Sub Macro1() '   ChDrive "C:"   ChDir CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\見積書"   On Error Resume Next   MkDir [A1]   On Error GoTo 0   ActiveSheet.ExportAsFixedFormat xlTypePDF, [A1] & "\" & [B2] & [C3] End Sub \ はコピペすれば¥になります。そのままにして下さい。

akira0723
質問者

お礼

早々のご回答ありがとうございます。 最初はこんな数行で新規にフォルダ作成して、ファイル名つけて、かつ既存のフォルダがあればその中に保存までが満たされるハズがない、と思いながらせっかくご回答いただいてので、試すだけはと思い試したところやっぱり駄目でした。 が、良くやるミスでセル番地の指定をしておらず。 セルを修正したところ何故か完璧に動きました!!! 不思議で気持ち悪いですが早速使わせていただきます。

関連するQ&A

  • エクセルvba. PDF保存 フォルダ内の順番

    エクセルVBAでPDFを作成すると、保存されたフォルダ内での順番が マクロ実行順から変わってしまいます。 Sheet1 顧客情報 Sheet2 請求書 Sheet1のA列の顧客名順でSheet2に差し込み保存した請求書PDFを フォルダ内でもA列の順番にする方法を教えてください。 よろしくお願いします。

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

    先日ここでデスクトップの決まったフォルダ(見積書)の中に、セルA1名のフォルダを作成し、そのフォルダ内にB2+C3をファイル名に保存したい、とし質問したら下記のたった6行で出来ることご回答いただきました。(ビックリ!) このコードは個々のデスクトップのファイルパスが不要なので、どのPCでもこのままC&Pで動くので非常に有用で早速使いたいのですが、新たな要求として、親フォルダの中に子フォルダ(フォルダA1)をつくらずに、デスクトップ上の決まった名前(見積書)のフォルダに直接B2+C3のファイル名で保存したく。 下記のご回答頂いたコードを試行錯誤してみたのですがやはりだめでした。 Sub Macro1()   ChDrive "C:"   ChDir CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\見積書"   On Error Resume Next   MkDir [A1]   On Error GoTo 0   ActiveSheet.ExportAsFixedFormat xlTypePDF, [A1] & "\" & [B2] & [C3] End Sub

  • エクセルで指定フォルダ内の増加ファイルの一覧を作る

    いつも大変お世話になっております。 この質問はエクセルで可能かどうかも当方には不明な課題です。 また可能だとしても当方で実行できないような高度な知識が必要ならあっさり諦めるつもりの投稿です。 サーバ上の特定のフォルダ内に不定期で新規のフォルダが作成され、その中にPDFファイルが保存されていきます。 その新規に保存されたPDFファイルのフルパスとファイル名をエクセルシートの最下行に追加していくことはできるのでしょうか? フルパスにはファイル名も入るのでパスだけでもOKです。 具合的な作業としては、エクセルシートのB列に複数の顧客フォルダのフルパスを下方向に記入していきます。 そのフォルダに新規のフォルダ(名称不明)が出来たら別のシートのB列に新規にできたファルダのフルバスとC列にPDFファイルのファイル名を最下行に追加していく。 作業内容はサーバー上のフォルダに顧客別のフォルダがあり、その中に製品名別のフォルダがあります。 新製品が出来たらその顧客別フォルダ内に新製品の品名フォルダーを作成して当該製品に関する品質データをPDFファイルで保存し行くことになっています。 この新製品のPDFファイルをエクセルにリストアップして、リンクを貼る作業を半年に一度やっています。 新規に増えた分を探すのが手間で抜けがあるハズと思っています。 どの顧客フォルダに新製品のフォルダが新規作成され、その中のPDFファイルの名前をVBAで一覧表にすることが出来ればかなり作業が効率化されるのですが。 更には新規顧客からの仕事の場合は顧客別フォルダが増設されることになるのですが、これは数が少ないので先ずは既存の顧客フォルダ内に増加した品名フォルダのパスとその中のPDFファイル名までが抽出出来れば非常に助かります。 当方の理解を超えた要求なので必要な条件が抜けているかもしれませんがご容赦。

  • セル内の文と同じ名前のフォルダにシートを保存させる

    マクロのフォームにチェックボックス2個とコマンドボタン1個があります。 Excelブック内にシートが3つあり、シート1内のセルA1,B1に入力されている内容をファイル名(例:A1_B1)にし、フォームのチェックボックス1にチェックを入れてコマンドボタンを押すとシート2、チェックボックス2にチェックを入れてコマンドボタンを押すとシート3を、C1に入力されている内容と同じ名称のフォルダに保存させるマクロを作成したいです。 なお、A1,B1,C1は固定で移動はしません。 また、保存先のフォルダは用意されています。 ファイル名が重複する場合は上書きするか確認したいです。 現在、マクロを勉強中です。 図々しいとは思いますが、もし可能であれば、どういう意図でコードを使用しているか等の解説もしていただければ助かります。 どうぞよろしくお願いいたします。

  • 【エクセル】セルの内容をテキストエディタに書き出す

    どなたかご教授お願いします。 エクセルのセルの内容をテキストエディタに書き出し、 希望のファイル名で保存したいと思っております。 例。    A     |     B 1  長文1      1111 2  長文2      2222 3  長文3      3333 4  長文4      4444 ↓ ↓ ずっと1000番ほどまで続きます。 このように、 セルAの内容をテキストファイルに書き出し、 セルBという名前でテキストファイルを保存したいと思っております。 「セルA1」 書き出し → ファイル名「セルB1」 「セルA2」 書き出し → ファイル名「セルB2」 「セルA3」 書き出し → ファイル名「セルB3」 ・・・ という風に、ずっと続きます。 どなたか、良い方法はありませんか? エクセルのマクロの使い方も全くわかりませんので、 できるのであれば、どんな方法でも結構です。 申し訳ありませんが、 マクロの場合は、初心者でもわかるように、 マクロのコードを教えてください。 しばらく色いろと試しましたが、 方法が全くわからず、お手上げ状態です。 どうぞ、よろしくお願いします。

  • セルの値を使ってファイルを保存

    1.現在以下の内容で"C8"セルの値を取得してファイルを保存しています。 Sub ファイル保存() C = Range("C8").Value ActiveWorkbook.SaveAs Filename:="C:\Users\moto\Desktop" & C & ".xls" End Sub 2.ファイル名保存時に"H1"の日付もプラスしたいです。 現在は"H1"セルには"2008/11/17"と記入されてますがこれを"20081117"と変更し、"20081117_A見積書"というファイル名で保存する。("C8"=A見積書)

  • エクセルVBAでセルを名前にしてフォルダを生成

    こんばんは。 セルA2 B2 C2にフォルダの名前にしたい文字や数字があり、 それをフォルダ名にすることをエクセルでしたいのですが コードを教えていただけないでしょうか? できたフォルダはデスクトップにあるようにしたいです。 よろしくお願いします。

  • エクセルで、良い方法ありますか?

    エクセルで作った見積書があります。見積書は今後、見積書A、見積書Bというように増えて行きます。 別のフォルダにある一覧表に各見積書の項目の文字や数値を自動で反映させたいのです。 前もって100件分の見積書のデータがリンクできるように見積書A、見積書B・・・とリンクの貼り付けで指定しておけばよいのですが、見積書の名前がお得意先名で保存することになるので、一覧表のリンクの貼り付けをしたい各セルに見積書のファイル名を前もってし指定ておくことができません。 お得意先名の名前で保存してある見積書を見積書A、B、C・・・というように順番になるような名前で別に保存して、一覧表に見積書A、B、C・・・でのセルをリンクできるように指定すればできないことではないのですが、他に良い方法があったら教えてください。 説明が下手ですみません・・・

  • VBA 指定フォルダに複数のセル内容で保存

    こんにちわ。 いつもお世話になっております。 さて、毎度VBAでお世話になっており、表題については指定のシートのみxlsx、pdfファイルで保存するような場合のコードは都度教えていただいて都度うまく行っていたのですが、フォルダやファイルの種類を変えるとうまく行かない場合が多く、試行錯誤で何とかしていたので須が、今回どうしてもあれとこれとを組み合わせてもうまく行かず。 今回の目的で使えそうなpdfでの保存コードは何故かコード中の「pdf」を「xlms」に変更してもpdfファイルで保存されてしまうのは理解できず。 そこでNETで調べたら当方にも分かり易い汎用の下記のサンプルコードがあったのですが > 'ドライブ等の名前を変数に > hozonPath = "K:\" のドライブの書式 ”K:\” が良くわかりません。 具体的に "\\Srv01\業務g\応援チーム\MyPicture" このフォルダに保存したいのですが、どう記載するのか教えてください。 ファイル名にしたいセルは単にA1、A2というように単にセルの列行の記載すればいいのですよね? あまりに初歩的過ぎて質問の意味が分かりにくいでしょうか? Sub hozon() Dim wb As Workbook 'ワークブック Dim ws As Worksheet 'ワークシート Dim hozonPath As String 'ドライブ等のパス用 Dim FolName As String 'A1セル用のフォルダ名用 Dim FilName As String 'A2セル用のファイル名用 '自ワークブック Set wb = ThisWorkbook 'アクティブシート Set ws = ActiveSheet 'ドライブ等の名前を変数に hozonPath = "K:\" 'A1セルの値を変数に FolName = ws.Range("A1").Value 'A2セルの値を変数に FilName = ws.Range("A2").Value wb.SaveAs Filename:=hozonPath & FolName & "\" & FilName End Sub

  • エクセルでセル内容でpdfで保存しメールの起動まで

    いつもお世話になっております。 ここで絶大なる支援を受けて表題に関するいくつかのマクロを教えていただいて色んな定常作業に組み込んで非常に便利に使い始めたのですが、下記の組み合わせが試行錯誤(当方の実力)ではどうしても達成出来ないのでHELPです。 1.エクセルの複数の指定セルを繋げてファイル名にする。   A1セルが「赤」、B1セルが「色」の場合はファイル名を「赤色」としたい。 2.上記のファイルを指定のパスのホルダーに保存する 3.そのpdfファイルを添付したメール画面でOutlookを起動する。 1.2.+指定アドレスに送信、まで全自動で完了する完成版はあるのですが、自動送信ではなくメールの起動までの方が非常に汎用性が高いので何とかお願いします。 また、ファイル名に2つのセルの内容をつなぐこともうまくいきませんでした。

専門家に質問してみよう