セルの値でフォルダやファイル名とファイルの内容を一気に保存する方法

このQ&Aのポイント
  • A列の値をフォルダ名として作成し、B列の値をファイル名とし、C列の値をファイルの内容として保存する方法について説明します。
  • VBAを使用して、セルの値を取得し、フォルダやファイルを作成し、内容を保存する方法を紹介します。
  • 具体的なコード例を示しながら、順番に実行することで、目的の動作を実現することができます。詳細な手順を説明していますので、初心者の方でも理解しやすいです。
回答を見る
  • ベストアンサー

セルの値でフォルダやファイル名とファイルの内容を

セルの値で フォルダやファイル名とファイルの内容を一気に保存したいのですが、 どうしても式がわかりません。。 やりたいことはここにまとめてます。 ↓ http://bsmile.sakura.ne.jp/phptest/cc1.jpg 1 A列のフォルダと作って、 2 B行のファイル名で、 3 C行の内容のファイルを作りたいのです。 1については、 http://hamachan4.exblog.jp/10612140/ にある通り、 Dim mydir As String Dim i As Integer For i = 1 To Range("A" & Rows.Count).End(xlUp).Row mydir = "C:\Users\user\Desktop\test\" & Cells(i, 1).Value If Dir(mydir, vbDirectory) = vbNullString Then MkDir mydir Next i MsgBox "完了しました" End Sub フォルダを作る事はできそうなのですが、 2のフォルダパスをどう指定したらいいのか? (3はなんとなくできそうなですが、) で、色々みたんですが、どうしてもわからずで、 どういったVBAを組めばこの動作ができるでしょうか? どうかよろしくお願いいたします。 m(_ _)m

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

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

csvならこの程度、、、 Option Explicit Sub Ottotto() Const xPath0 = "C:\Users\user\Desktop\test\" Dim xSheet As Worksheet Dim xPath As String Dim xName As String Dim xText As String Dim nn As Integer Application.DisplayAlerts = False Set xSheet = ActiveSheet For nn = 1 To xSheet.Range("A" & Rows.Count).End(xlUp).Row xName = xSheet.Cells(nn, "B").Value xText = xSheet.Cells(nn, "C").Value xPath = (xPath0 & xSheet.Cells(nn, "A").Value & "\") If (Dir(xPath, vbDirectory) = vbNullString) Then MkDir xPath End If ChDrive (Left(xPath, 1)) ChDir (xPath) With Workbooks.Add Worksheets(1).Cells(1, "A").Value = xText .SaveAs (xPath & xName & ".csv") .Close False End With Next Application.DisplayAlerts = True End Sub

deepimpact
質問者

お礼

神様 ありがとうございました!! (^^)

その他の回答 (1)

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.1

手操作とはすこし感覚が違うので戸惑ったんじゃないかな。たぶん、見逃しただけだよ。 Openで、ファイルが無ければ作成されます。 http://home.att.ne.jp/zeta/gen/excel/c04p45.htm

deepimpact
質問者

補足

フォルダの設定の仕方がわからないんです。 Open "C:\Users\test.txt" For Binary As # これは理解できるんですが、 UsersがA1のセルに書いてあるフォルダだった場合 Open "C:\" & Cells(1, 1).Value & "\test.txt" For Binary As #1 かなと思ったんですが、エラーになってどうしようもないんです。 このフォルダの指定方法が知りたいです。

関連するQ&A

  • セルの値でフォルダやファイル名とファイルの内容2

    昨日質問させていただいて、大丈夫とおもったら、 問題がでてきましたので、再度質問させてください。 (昨日のは締め切ってしまったので。。。) ===やりたい事==== セルの値で フォルダやファイル名とファイルの内容を一気に保存したいのですが、 どうしても式がわかりません。。 やりたいことはここにまとめてます。 ↓ http://bsmile.sakura.ne.jp/phptest/cc1.jpg 1 A列のフォルダと作って、 2 B行のファイル名で、 3 C行の内容のファイルを作りたいのです。 ===問題点==== 昨日質問させていただいて こちらのマクロで動くようになり ↓↓↓↓↓↓↓↓↓↓↓↓↓ csvならこの程度、、、 Option Explicit Sub Ottotto() Const xPath0 = "C:\Users\user\Desktop\test\" Dim xSheet As Worksheet Dim xPath As String Dim xName As String Dim xText As String Dim nn As Integer Application.DisplayAlerts = False Set xSheet = ActiveSheet For nn = 1 To xSheet.Range("A" & Rows.Count).End(xlUp).Row xName = xSheet.Cells(nn, "B").Value xText = xSheet.Cells(nn, "C").Value xPath = (xPath0 & xSheet.Cells(nn, "A").Value & "\") If (Dir(xPath, vbDirectory) = vbNullString) Then MkDir xPath End If ChDrive (Left(xPath, 1)) ChDir (xPath) With Workbooks.Add Worksheets(1).Cells(1, "A").Value = xText .SaveAs (xPath & xName & ".csv") .Close False End With Next Application.DisplayAlerts = True End Sub できた.csvファイルは確かにエクセルでひらけたので すっかり、安心していたのですが、 たとえば、できたcsvファイルをメモ帳やテラパッドのようなエディターで開いたら 「NULLがどーの」と文字化けの塊みたいになります。 基本的にできたファイルはメモ帳などで開きたいのですが、、、、 多分スクリプトの書き込む際の文字コードだとおもうのですが、 With Workbooks.Add Worksheets(1).Cells(1, "A").Value = xText .SaveAs (xPath & xName & ".csv") .Close False このあたり、どうスクリプトを書込めばいいかわかりません。 どなたかおしえていただけないでしょうか?? どうぞよろしくお願いいたします。

  • フォルダのファイル数をvbaで取得したい

    vbaなのですが、フォルダにgifファイルがたくさんはいっていますが、 その数を数えるコードを教えてください。 今は、 Sub Macro7() Dim File As String Dim i As Long File = Dir("C:\*.*", vbDirectory) Do While File <> "" File = Dir i = i + 1 Loop MsgBox "ファイル数は" & i & "です" End Sub のように、全てのファイル数をカウントして求めています。

  • VBA フォルダー内のファイル名・サイズの書き出し

    教えて下さい。 フォルダー名をダイアログを表示して選択する場合は、下記のコードを利用します。 Sub Test() Dim folderPath As Variant With Application.FileDialog(msoFileDialogFolderPicker) .Show folderPath = .SelectedItems(1) End With このfolderPathを利用して  フォルダー内のファイル名(B列)とサイズ(C列)をセルに書き出したいのです。 (ただし、ファイルサイズが2GBを超えるファイルも存在します。) -------------------------------------------------------------------- 下記が参考なりそうですが、フォルダー名の取得の仕方が  上記コードと異なるので思考が停止しています。 'Excel VBAでフォルダ内のファイルリストを作成 Private Sub ExGetFileList(strPath As String) Dim i As Long Dim tSfo As Object Dim tGf As Object Dim tFi As Object Dim tSub As Object Set tSfo = CreateObject("Scripting.FileSystemObject") Set tGf = tSfo.GetFolder(strPath) i = 4 For Each tFi In tGf.Files 'ファイル名 Cells(i, 2) = tFi.Name 'ファイルサイズ KByte Cells(i, 6) = Int(tFi.Size / 1024) i = i + 1 Next End Sub Private Sub CommandButton1_Click() ExGetFileList "e:\MyDir" End Sub どのように整合させれば良いですか ?

  • VBA 一つのフォルダの中のフォルダ名とファイル名

    一つのフォルダの中のフォルダ名とファイル名を取得したい場合は ************************************** Sub test() Dim MyFileName As String Dim MyFolderName As String Dim myFSO As Object Dim MyFolder As Scripting.Folder MyFolderName = "C:\" 'フォルダを取得 MyFileName = Dir(MyFolderName & "*.*") Do While MyFileName <> "" Debug.Print MyFileName MyFileName = Dir() Loop 'ファイルを取得 Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO With .GetFolder(MyFolderName) For Each MyFolder In .SubFolders Debug.Print MyFolder.Name Next End With End With Set myFSO = Nothing End Sub ************************************** の様に ファイル名・フォルダ名をそれぞれループして取得しないとダメでしょうか? もうちょっとスマートなコードはありますか?

  • フォルダの中にファイルがあるかどうかを読み取りたい

    vbaです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Option Explicit Sub test() Dim 検索フォルダ As String Dim 検索ファイル名 As String 検索フォルダ = "C:\Users\Public" 検索ファイル名 = "新しいテキスト ドキュメント.txt" If 検索フォルダの中に検索ファイル名がある Then MsgBox 検索ファイル名 & "は存在します" End If End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ こんな感じで、フォルダの中にファイルがあるかどうかを読み取りたいのですが これ以上どういうコードを書けばいいかわかりません。 「フォルダの中にファイルがあるかどうか」がわかれば、出来そうな気がするのですが ご教授いただけますか?

  • 実行時エラー 5 ファイル名の書き出し

    これはどういう意味のエラーなのでしょう? Const FolderName As String = "C:\Users" Sub ファイル名を書き出す() Dim myFile As String myFile = Dir(FolderName & "\*.*", vbDirectory) Do While myFile <> "" Debug.Print myFile myFile = Dir Loop End Sub このようにしてフォルダの中のファイル名を書き出していますが ある特定のファイル名になると、myFile = Dirの部分で、 実行時エラー 5 プロシージャーの呼び出し、または引数が不正 が発生します。 ファイル名をただ読み込んでるだけなのに、どうしてエラーが発生するのでしょうか?

  • フォルダーの中に特定ファイルを開くの続きですが

    フォルダーの中に特定ファイルを開くの続きですが 次の命令を書きましたが実行できないです。間違った所を教えてほしいです 見積番号とはフォームの中のテキストボックスです。それをクリックする関連するエクセルファイルが開くようにしたいですのでよろしくお願いします。 Private Sub 見積番号_Click() Dim LngRet As Long Dim stLinkCriteria As String Dim Ipath As String Ipath = "\\C:\全社員共通\[見積書]\見積\" stLinkCriteria = Ipath & "\" & 見積番号 & "*.xls" LngRet = ShellExecute(0, vbNullString, Ipath & stLinkCriteria, _ vbNullString, vbNullString, 1) End Sub

  • vbaで新規フォルダ作成時の名前の指定

    「あいいうえお」フォルダの中に年が変わったら「2015年」という名前でフォルダの作成を行いたいのですが、下記のコードでは「あいうえお2015年」という名前のフォルダを作成してしまいます。フォルダの作成で、「あいうえお」を除いたものを作成するにはどう変えればよいでしょうか? (12月のファイルで実行した時に例えば「2015年」フォルダを作成して、その中に「あいうえお2015-1月.xlsm]ファイルを作成します。同じ年なら「あいうえお11月.xlsm]などファイルのみを作成します。) お手数をおかけしますがどうぞよろしくお願いいたします。 Sub ブックコピー自動翌月分作成() Dim i As Integer Dim wb As Workbook Dim myDir_path As String, myNew_path As String 'フォルダパスとファイルパスを作成 myDir_path = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\") - 1) myNew_path = "あいうえお" & Format(DateAdd("m", 1, Replace(Replace(ThisWorkbook.Name, "あいうえお", ""), "月.xlsm", "")), "yyyy-m") & "月.xlsm" myDir_path = Left(myDir_path, InStrRev(myDir_path, "\")) & Left(myNew_path, 9) & "年\" 'フォルダの有無を確認、なければ作成 With CreateObject("Scripting.FileSystemObject") If Not .FolderExists(myDir_path) Then MkDir myDir_path 'MsgBox myDir_path & "を作成しました" 'MsgBox Left(myDir_path, InStrRev(myDir_path, "\")) & "に" & vbNewLine & MsgBox Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\") - 12) & "に" & vbNewLine & _ Left(myNew_path, 9) & "年" & "フォルダを新たに作成しました" End If End With 'ファイルの有無を確認、なければ保存,あれば処理中止 If Dir(myDir_path & myNew_path) = "" Then ThisWorkbook.SaveCopyAs myDir_path & myNew_path MsgBox myNew_path & "のファイルを新たに作成しました" Else MsgBox "翌月分のファイルはすでに存在するので処理を中止します", vbOKOnly, "処理中止" Exit Sub End If '新規作成したブックを開く,既に開いていれば処理中止 For Each wb In Workbooks If wb.Name = myNew_path Then MsgBox myNew_path & "は既に開いているので処理を中止します", vbOKOnly, "処理中止" Exit Sub End If Next Workbooks.Open myDir_path & myNew_path Workbooks(myNew_path).Activate End Sub

  • フォルダ内の対象となるデータ名の個数

    フォルダ内にある任意のデータ名の個数を数える エクセルのマクロを使って作成したいと思っています 任意のデータ名はA1セルに入力されている名前を使おうと思っています 以下にワイルドカードを使った場合のコードを貼っておきます。 Sub Sample2() Dim FolderPath As String Dim FileName As String Dim FileInt As Long Dim SetPath As String FolderPath = "C:\Users\ユーザ名\Desktop\データ" 'フォルダのパスを指定する FileName = "*.xlsm" 'ファイル名をワイルドカードと拡張を指定する FileInt = 0 'ファイル数を一度0にする '指定したフォルダパスとファイル名をセットする SetPath = Dir(FolderPath & "\" & FileName) Do While SetPath <> "" 'ファイル名が取得出来なくなるまでループ FileInt = FileInt + 1 SetPath = Dir() Loop MsgBox FileInt End Sub

  • エクセルにフォルダにある画像を貼付&整列する方法

    下記にあるマクロより、 選択したフォルダ内の画像ファイル(jpgファイル)すべてをA列に挿入、 B列にA列のファイル名の書き込みは出来ましたが、、、 この画像ファイルをファイル名ごとに整列する方法をお教え願います。 目的は、画像を横に並べ写真を比較したいです。 (例) 頭に「1」が付くファイル名・・・A列 頭に「2」が付くファイル名・・・C列 頭に「3」が付くファイル名・・・E列 よろしくお願いします。 (マクロ) Sub InsertPictures()  Dim i As Integer  Dim myDir As String  Const myHeight = 200 '行の高さ。0-409を指定。写真のサイズがこれで調整される。  Const myWidth = 50 '列の幅。0 - 255を指定。  Dim myFName As String    myDir = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")  If myDir = "False" Then Exit Sub  myDir = Left(myDir, Len(myDir) - Len(Dir(myDir)))    Application.ScreenUpdating = False   ActiveSheet.DrawingObjects.Delete   Columns(2).ClearContents   Rows.AutoFit      i = 1   myFName = Dir(myDir & "*.jpg")     Do While myFName <> ""    With Cells(i, 1)     .Activate     .RowHeight = myHeight    End With    With ActiveSheet     .Pictures.Insert myDir & myFName     With .Shapes(i)      .LockAspectRatio = msoTrue      .Height = myHeight     End With    End With    Cells(i, 2).Value = myFName    myFName = Dir    i = i + 1   Loop   Columns(1).ColumnWidth = myWidth   Columns(2).AutoFit  Application.ScreenUpdating = True End Sub

専門家に質問してみよう