• 締切済み

セルの値でフォルダやファイル名とファイルの内容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 このあたり、どうスクリプトを書込めばいいかわかりません。 どなたかおしえていただけないでしょうか?? どうぞよろしくお願いいたします。

みんなの回答

回答No.2

txtファイル書出し版 Option Explicit Sub Ottotto() Const xPath0 = "C:\Users\user\Desktop\test\" Const xExtent = ".txt" Dim xSheet As Worksheet Dim xPath As String Dim xName As String Dim xText As String Dim xFF02 As Integer Dim xREC 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) xFF02 = FreeFile() Open (xPath & xName & xExtent) For Output As #xFF02 Print #xFF02, xText Close Next Application.DisplayAlerts = True End Sub

deepimpact
質問者

お礼

ありがとうございます

noname#203218
noname#203218
回答No.1

下記でテキスト保存されます。 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 Dim FSO, Textfile As Object 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 Set FSO = CreateObject("Scripting.FileSystemObject") Set Textfile = FSO.OpenTextFile(xPath & xName & ".txt", 2, True) Textfile.Write xText Textfile.Close Set FSO = Nothing Set Textfile = Nothing Next Application.DisplayAlerts = True End Sub

deepimpact
質問者

お礼

ありがとうございます

関連するQ&A

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

    セルの値で フォルダやファイル名とファイルの内容を一気に保存したいのですが、 どうしても式がわかりません。。 やりたいことはここにまとめてます。 ↓ 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

  • VBAでExcelのセルの一覧からファイル名の変更が

    こんにちは。会社で大量のファイル名を変更していますが、Excelで一覧からを変更できれば能率的なので作っていますが、困っています。下記のものです。 Sub リネーム() Dim i As Long  Dim NEWファイル As String  Dim OLDファイル As String  Dim パス As String For i = 1 To Range("B65536").End(xlUp).Row パス = Cells(2, 1).Value OLDファイル = パス & Cells(i, 2).Value NEWファイル = パス & Cells(i, 3).Value If Dir(OLDファイル) <> "" Then Name OLDファイル As NEWファイル End If Next i End Sub ※A2にはC:\Documents and Settings\M.Co,\デスクトップ\リネームと入っています。B1には変更前の001.jpg、C1には変更するa-1.jpgとファイル名が入っています。実行してもファイル名は変更されません。エラーもでません。よろしくお願いします。

  • ファイルサーバーからローカルフォルダーに移動したい

    下記のVBAはローカル環境でデータを同じフォルダーにCSVとして吐き出す事を目的に調べながら作ったのですが、運用の関係上ファイルサーバーへ置く事になってしまいローカルの「ダウンロード」フォルダーにに吐き出せないか色々試してみているのですが、どうしても分かりません。お知恵をいただければ幸いです。 宜しくお願い致します。 '現在開いているシートをCSVデータで保存する Public Sub call_RangeSaveCSV() Dim fPath As String Dim fName As String Dim rng As Range '現在開いているブック情報をファイル名にするため、変数に格納 fPath = ActiveWorkbook.Path & "\" fName = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".")) & "csv" Application.DisplayAlerts = False '現在選択しているセル情報をrngに格納 Set rng = Selection '新規ブック作成→rngをA1にコピー→CSV保存→CSV閉じる Workbooks.Add rng.Copy ActiveSheet.Range("A1") ActiveWorkbook.SaveAs Filename:=fPath & fName, FileFormat:=xlCSV ActiveWindow.Close Application.DisplayAlerts = True End Sub

  • フォルダ内全ファイルからデータを取得する方法

    お力をお貸しください。 下記のようなコードを書きました。*ドライブにあるフォルダ内全ファイルからデータを取得して、一つの表にまとめようとしています。 が、Workbooks.Open sFileで、「ファイルが存在しません」というエラーがでます。 変数を確認しましたが、きちっと呼び込んでいるのに、ファイルが存在しないとなるのが分かりません。 ここで、データの最終行を取得するのに、ややっこしいコードを書いているのは、データが虫食い状態で、全部のセルが埋まっているのはC列しかないため、このようなことになっています。 よろしくお願いします。 Sub Macro1() Dim FName As String, FPath As String, cnt As Long, r As Long, m As Long, MyMonth As String Dim LastRows As Long Set Wsh = CreateObject("Wscript.Shell") Set Wsh = Nothing m = Range("A1").Value - 1 MyMonth = m & "月" FPath = "*:\" & MyMonth & "\" ChDir FPath FName = FPath & "*.xls" sFile = Dir(FPath  & "*") ' 画面更新オフ Application.ScreenUpdating = False With ThisWorkbook.Sheets(1) LastRows = Cells(Rows.Count, 1).End(xlUp).Row + 1 Do While sFile <> "" If sFile <> ThisWorkbook.Name Then Workbooks.Open sFile cnt = Cells(Rows.Count, 3).End(xlUp).Row + 1 ActiveSheet.Range("A1:" & "M" & cnt).Copy Destination:=ThisWorkbook.Sheets(1).Cells(LastRows, 1) ActiveWorkbook.Close SaveChanges:=False sFile = Dir() End If Loop End With '画面更新オン Application.ScreenUpdating = True ''名前をつけて保存 ' ' Application.DisplayAlerts = False ' Filedate = Format(Date, "yyyymm") ' ActiveWorkbook.SaveAs Filename:=FPath & "\" & Filedate & ".xls" ' Application.DisplayAlerts = True ' ''画面更新オン 'Application.ScreenUpdating = True ' ' End Sub

  • エクセルのマクロで複数セル指定は?

    以前(7月22日 質問No.936181)の質問でご回答を頂いたマクロなんですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyData As String Dim i As Integer Dim ImaNanji As String Dim SakkiNanji As String Dim ImaNanpun As String Dim SakkiNanpun As String SakkiNanpun = Cells(2, 3).Value ImaNanji = Cells(1, 3).Value ImaNanpun = Mid(ImaNanji, Len(ImaNanji) - 4, 2) If ImaNanpun <> SakkiNanpun Then Application.EnableEvents = False For i = 10 To 2 Step -1 MyData = Cells(i - 1, 2).Value Cells(i, 2).Value = MyData Next i MyData = Cells(1, 1).Value Cells(1, 2).Value = MyData Cells(2, 3).Value = ImaNanpun Application.EnableEvents = True End If End Sub A1のデータをB1からB10に一分おきにつぎつぎに書き込むというものなんですが、ひとつのセルではなく複数のセル(例えばA1からA30の30個のセル)をいっぺんに書き込むようにしたいのですが可能でしょうか? よろしくお願いします。

  • ファイル名を合成すると検索できないのでしょうか?

    下記のような式がありまして、一度作成したファイルは上書きされないはずですが何回やっても上書きされてしまいます。 これはファイルを検索していないのでしょうか? 既にファイルがあったら終了するはずですが何か間違えていますか? 'ファイル作成 Sub MakeCopyFile(newfile As String, orgfile As String) If SearchFile(newfile) Then Exit Sub End If Set fs = CreateObject("Scripting.FileSystemObject") fs.CopyFile orgfile, newfile End Sub ' ファイル検索 Function SearchFile(fname As String) As Boolean SearchFile = False Set fs = Application.FileSearch With fs .Filename = fname If .Execute() > 0 Then SearchFile = True End If End With End Function Sub Macro1() Dim name As String '名前 Dim fname As String 'ファイル名 Dim directory As String '作成先ディレクトリ Dim fullpath As String 'フルパス Dim orgfile As String '雛形のファイル名 Dim editbook As Workbook '個人データブック Dim id As String '番号 directory = "H:\test\" orgfile = "H:\test\雛形.xls" For i = 1 To 100 name = ThisWorkbook.Worksheets("Sheet2").Cells(i, 10).Value id = ThisWorkbook.Worksheets("Sheet2").Cells(i, 12).Value If name = "" Then Exit For End If 'コピーしたファイルを作成する fname = name + id + ".xls" 'ファイル名合成 fullpath = directory + fname 'フルパス合成 Call MakeCopyFile(fullpath, orgfile) 'ファイル作成 Workbooks.Open Filename:=fullpath Set editbook = Workbooks(fname) editbook.Worksheets("Sheet3").Cells(8, 14).Value = name editbook.Worksheets("Sheet3").Cells(8, 10).Value = id '※(その他必要な処理があれば追加してください) editbook.Close (True) Next i End Sub

  • エクセル2007 参照セルの値が認識されない

    エクセル2007の環境で下記マクロを実行すると、 アクティブシートのセルA1に数字が入っている場合、Sheet1のセルA1に値を転記しても そのセルA1の値をVLOOKUP関数で参照できません。 マクロに問題があるためなのか何処に問題があるのか分からないので教えてください。 宜しくお願いいたします。 【sheet】は アクティブシートの3行目から1000行目までのA列のセルをクリックしたらセルA1に値を表示 その後、下記【モジュール】を使用し、 アクティブシートのセルA1が空白の場合、 A列の数値をSheet1のセルA1に転記し、アクティブシートのA列の数値が空白になるまで循環する。 Sheet1のセルA1の値をVLOOKUP関数で参照した内容を表示、印刷します。 ----------------------------------------------------------------- '【sheet】 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Count > 1 + IsEmpty(.Value) Then Exit Sub If Application.Intersect(.Cells, Range("A3:A1000")) Is Nothing Then Exit Sub ActiveSheet.Cells(1, 1).Value = .Value End With End Sub ----------------------------------------------------------------- '【モジュール】 Sub TEST() Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long myMsg = "●●●" myTitle = "確 認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then Set WS1 = ActiveSheet Set WS2 = Sheet1 If WS1.Cells(1, 1).Value = "" Then With WS1 For i = 3 To 65536 If .Cells(i, 1).Value = "" Then Exit For WS2.Cells(1, 1).Value = .Cells(i, 1).Value WS2.Cells(1, 2).Value = ActiveSheet.Name 'WS2.PrintOut Copies:=1 Next i End With ElseIf WS1.Cells(1, 1).Value >= 1 Then WS2.Cells(1, 1).Value = WS1.Cells(1, 1).Value WS2.Cells(1, 2).Value = WS1.Name 'WS2.PrintOut Copies:=1 Else End If End If End Sub -----------------------------------------------------------------

  • 行方向の同じ値のセルを結合するマクロ

    ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。 どうぞよろしくお願いいたします。 Sub セル結合() Dim r As Integer '行数 Dim i As Integer 'カウンタ r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1 Application.DisplayAlerts = False For i = 1 To r Cells(i, 1).Activate '項目の一つ下のセルをアクティブに If ActiveCell.Value = ActiveCell.Offset(1).Value Then Range(ActiveCell, ActiveCell.Offset(1)).Merge End If Next Application.DisplayAlerts = True End Sub

  • excelファイルを検索してセル内容を転記する方法

    VBA初心者です。 Aというディレクトリがあり、その中に1,2,3,4というフォルダがあります。 1には「apple1.csv」、「orange1.csv」、「banana1.csv」 2には「apple2.csv」、「orange2.csv」、「banana1.csv」 ・・・ 4には「apple4.csv」、「orange4.csv」、「banana4.csv」 が入っています。 この1から4のフォルダのapple1,apple2,apple3,apple4のファイルをとりだし、それぞれのA1~A10セルを新たなファイルに自動転記する(apple1はA1~A10,apple2はB10~B10・・・)といった具合のマクロを組みたいと思っています。 あるフォルダの中のexcelファイルであれば、以下のソースコードを用いてコピーしたいファイルを選択してセルを転記しているのですが、今回のように、ディレクトリがいくつもあり、その各ディレクトリ中のファイル名の共通項を検索してそのセルを転記する方法が全く分かりません。 どなたかわかる方アドバイスをお願いします。 Sub ブック保存() Dim j As Integer Dim ファイル一覧 As Variant ファイル名一覧 = Application.GetOpenFilename("apple,*.xlsm", MultiSelect:=True) If VarType(ファイル名一覧) = vbBoolean Then Exit Sub Application.EnableEvents = False For i = 1 To UBound(ファイル名一覧) Set ブック = Workbooks.Open(ファイル名一覧(i)) With ThisWorkbook.Worksheets(1) For j = 1 To 10 .Cells(j, i) = ブック.Worksheets(1).Cells(j, 1).Value Next End With ブック.Close Next Application.EnableEvents = True End Sub

  • 選択されているシートを移動したい

    一定ではない複数のシートがあり、 そのうちの右端の1枚は必ず「ファイル集計」というシートになっています。 この、ファイル集計以外のシートを 新しいブックを作って移動させるにはどうしたらいいでしょうか。 あくまでもファイル集計は元のブックに残し それ以外のシートを移動させたいのです。 Sub 入力データを保存して閉じる() Dim ファイルナンバー As String Dim 保存指定フォルダ2 As String Dim mySht As Worksheet With Application .DisplayAlerts = False For Each mySht In Worksheets If mySht.Name <> Sheets("ファイル集計").Name Then mySht.Select False Next .DisplayAlerts = False End With ↑このようなかたちで、選択するところまでは出来たのですが それを新しいブックに移動させるのがうまくいきません。 ChDir "C:\計算\" & 保存指定フォルダ Activesheets.Move ActiveWorkbook.SaveAs Filename:=ファイルナンバー & "D.xls" Application.DisplayAlerts = False   ActiveWorkbook.Close end sub とすると、選択されているシートのうち1枚しか移動できないのです。 教えてください。

専門家に質問してみよう