特定のワークシートcsvファイル書き出しほか

このQ&Aのポイント
  • AAAフォルダ内にあるエクセルファイルの各ブックに含まれるワークシートをフォルダごとに分けてCSVファイルに書き出すプログラムを作成しました。
  • しかし、特定のワークシートのみをCSVファイルに書き出す方法がわかりません。
  • プログラムをスッキリとしたものにするためのアドバイスをいただけないでしょうか?
回答を見る
  • ベストアンサー

特定のワークシートcsvファイル書き出しほか

エクセルブックの中身が、 1番目 graphシート 2番目から19番目 ワークシート で構成されているエクセルファイルが100個 AAAというフォルダに入っています。 それぞれのエクセルブックにあるシートを、ブックのファイル名にしたフォルダを作成し、その中にcsvで書き出すプログラムを作りました。 また、AAAのフォルダの1つ上のフォルダ(VBA実行するカレントフォルダ)には、テキストファイルもあり、作成されたフォルダに合わせてコピーするようにしています。 一応、期待通りの動作をしましたが、スッキリとしたプログラムとするために、アドバイスをいただけないでしょうか? また、できれば、それぞれのブックの2番目から7番目のワークシートのみをcsvファイルで書き出したいと思い、シートを2番目から順にアクティブにして書き出すように変更しても1番目のグラフシートからcsvになってしまいました。 特定のワークシートのみをcsvファイルで書き出すにはどのように書いたら良いでしょうか? よろしくおねがいしむす Sub ファイル一括作成()     Application.ScreenUpdating = False         '対象ブックの選択     'フォルダ内のブックを順次選択     Dim FolderPath As String     Dim objFSO As Object     Dim objBook As Object     Dim objFiles As Object     Dim objFile As Object     Dim mysma4 As Object     Set objFSO = CreateObject("Scripting.FileSystemObject")     FolderPath = ActiveWorkbook.Path & "\AAA"     Set objBook = objFSO.GetFolder(FolderPath)     Set objFiles = objFSO.GetFolder(FolderPath).Files     Set mysma4 = objFSO.GetFile(ActiveWorkbook.Path & "\fig_all.TXT")     For Each objFile In objFiles      If objFSO.GetExtensionName(Path:=objFile) Like "xlsx" Then     'ベースファイル名フォルダ作成&sma4ファイルコピー       objFSO.CreateFolder Path:=FolderPath & "\" & objFSO.GetBaseName(objFile)       mysma4.Copy Destination:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\fig_all.TXT"     '各ファイルcsv書き出し      Workbooks.Open objFile.Path       For Each ws In Worksheets '各シートに対して処理を繰り返す           ws.Activate           'ベースファイルと同じ階層に出力           ActiveWorkbook.SaveAs _           Filename:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\" & ws.Name & ".csv", _           FileFormat:=xlCSV       Next ws       ActiveWorkbook.Close SaveChanges:=False      Else      End If     Next     MsgBox "ファイル作成が完了しました。"     Set objFSO = Nothing     Set objBook = Nothing     Set objFiles = Nothing     Set mysma4 = Nothing     Application.ScreenUpdating = True End Sub

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>シートを2番目から順にアクティブにして書き出すように変更しても >1番目のグラフシートからcsvになってしまいました。 For Each ws In Worksheets でループしているのでWorksheetsからは グラフシートは取得できないのだけどWorksheetに埋め込みグラフかな? For Each ws In Worksheets   If ws.Index >= 2 And ws.Index <= 7 Then     ws.Activate     ActiveWorkbook.SaveAs _     Filename:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\" & ws.Name & ".csv", FileFormat:=xlCSV   End If Next ws

kayakayakaya1
質問者

お礼

回答ありがとうございました ご指摘の通り埋め込みグラフでした。 回答頂いた内容でやりたい動作できました。 ありがとうございました

その他の回答 (1)

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

ws.Activate 'ベースファイルと同じ階層に出力 ActiveWorkbook.SaveAs _ Filename:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\" & ws.Name & ".csv", _ FileFormat:=xlCSV ↑これらのコードを if ((ws.Type <> xlChart) And (ws.Index < 8)) Then  'xxxxxxxxx End If で挟む対応はいかがでしょうか。

kayakayakaya1
質問者

お礼

回答ありがとうございます 動作しましたが、私の質問内容に間違いがあり、2人目のwatabe007さまのご指摘の通り、埋め込みグラフでした。申し訳ありません。 xlchartで分けること初めて知りました。 非常に勉強になりました。 ありがとうございました

関連するQ&A

  • VBAでフォルダ内の全てのcsvファイルからコピペ

    マクロ超初心者です。 フォルダ内のすべてのcvsファイル(500程度)の5列目(500行程度)を新規ファイルの1列目から順にコピーしていきたいのです。 ちなみに元のcvsファイルのシート数は一つだけでシート名には全てファイル名が付いています。 (つまり全てのファイルのシート名が異なる) 見よう見真似で似たようなマクロから意味もわからないまま つぎはぎして下記作りましたが やっぱり動きません。 どなたか詳しい方どうかよろしくお願いします。 Sub Sample() Const FolderPath As String = "C:\data" Dim objFSO As Object Dim objBook As Object Dim lngRow As Long Application.ScreenUpdating = False Set objFSO = CreateObject("Scripting.FileSystemObject") For Each objBook In objFSO.GetFolder(FolderPath).Files lngcolumn = ThisWorkbook.Sheets("sheet1").Range("A" & Columns.Count).End(xlToRight).Column + 1 Workbooks.Open objBook.Path With ActiveWorkbook .Worksheets(1).Column("5").Copy ThisWorkbook.Sheets("sheet1").End(xlToRight).Offset(0, 1) .Close End With Next Set objFSO = Nothing Application.ScreenUpdating = True End Sub

  • CSVファイル

    CSVファイルを1行ずつ比較して読み込み、一致した行を別ファイルに記述していこうと思っています。 現在、csvファイルを読み込む所まで出来ています。 比較して別ファイルに記述する方法を教えて下さい。 もしくはアドバイスください。 【ファイルの中身】 "09/09/2005 0:00:00,aaa,bbb,ccc" 【比較条件】 当日の日付を取得し、年月日だけで比較する Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") Do while objFile.ReadLine <> ""         'IF文を記述(条件:日付)        '別ファイルに記述する Loop objFile.close Set objFileSystem = Nothing Set objFile = Nothing

  • 同フォルダ内のファイルすべて開きコピーするマクロ

    以下マクロは一昨日まで問題なく使えていたのですが、 昨日から突然「データリンクプロパティ」が表示され、 「OK」ですすむと、 「実行時エラー1004 OPENメソッドは失敗しました Workbooksオブジェクト」で デバッグになります。 '------------------------------- ' 指定フォルダ内のファイルからコピー '------------------------------- Sub ALL_COPY() Const FolderPath As String = "\********************" ⇐ここにフォルダパスを入れています。 Dim objFSO As Object Dim objBook As Object Dim lngRow As Long '画面のちらつき制御設定 Application.ScreenUpdating = False 'FileSystemObjectを変数にセット Set objFSO = CreateObject("Scripting.FileSystemObject") 'フォルダ内のファイル全て繰り返し処理 For Each objBook In objFSO.GetFolder(FolderPath).Files '貼り付け行(最終行+1)取得 lngRow = ThisWorkbook.Sheets("■代表").Range("E" & Rows.Count).End(xlUp).Row + 1 MsgBox (objBook) 'ファイルを開く Workbooks.Open objBook.Path         ⇐ここがデバッグになります。 'コピー最終行へ貼り付け With ActiveWorkbook .Sheets("■代表").Rows("3:19").Copy ThisWorkbook.Sheets("■代表").Rows(lngRow) Application.DisplayAlerts = False .Close End With Next 'フォルダ内のファイル全て繰り返し処理 For Each objBook In objFSO.GetFolder(FolderPath).Files '貼り付け行(最終行+1)取得 lngRow = ThisWorkbook.Sheets("■投資家").Range("E" & Rows.Count).End(xlUp).Row + 1 'ファイルを開く Workbooks.Open objBook.Path 'コピー最終行へ貼り付け With ActiveWorkbook .Sheets("■投資家").Rows("3:19").Copy ThisWorkbook.Sheets("■投資家").Rows(lngRow) Application.DisplayAlerts = False .Close End With Next 'オブジェクト変数解放 Set objFSO = Nothing '画面のちらつき制御解除 Application.ScreenUpdating = True End Sub ---------------------------------------------------------- MsgBoxの表示では、「Tumbs.db」がでてきますが、 何か関係があるのでしょうか。 どなたかお知恵をお貸しくださいませ。

  • ExcelシートをCSVファイルにする

    Excel2000を使用してます。 Excelブックに3つのシートがあります。 シート1はメインシートとして「ボタン1」「ボタン2」が存在してます シート2はインプットデータ用シート シート3はアウトプットデータ用シートです シート1の「ボタン1」を押すとVBAが実行されシート2の情報を読み、 シート3に算出結果を出力する仕組みです。 次にシート1の「ボタン2」を押すとシート3の内容をCSVに出力したいのですが、 下記のロッジクではうまくいきません。 どこを修正すればよいのでしょうか? Sub CSV出力() Dim ONAME As String Dim しーと As Worksheet Dim 新しーと As Worksheet Dim PAS As String 'OUTパス名 PAS = ThisWorkbook.Path ONAME = PAS & "\" & "出力.CSV" '出力しーと Sheets("出力").Select Set しーと = ActiveSheet Set 新しーと = Worksheets.Add With 新しーと しーと.Copy .Move End With With ActiveWorkbook .SaveAs Filename:=ONAME, FileFormat:=xlCSV .Close False End With End Sub

  • VBAでのサブフォルダ内のエクセル集約について

    VBAを使って所定のフォルダ内のデータを集計するプログラムをネットで調べ、 以下のように作ってみたのですが、 サブフォルダ内のデータも同じように集計することはできないでしょうか? 以下のプログラムは正常に機能していて、「データフォルダ」直下にあるエクセルは 集計できています。 ※「データフォルダ」内に、都道府県別のフォルダが用意され、その中に市区町村別のエクセルが配置されている感じです。 ※EXCEL2013環境です。 Sub 全国集計() Const FolderPath As String = "\\C:\データフォルダ" Application.ScreenUpdating = False Range("6:1048576").Delete Dim objFSO As Object Dim objBook As Object Dim lngRow As Long Set objFSO = CreateObject("Scripting.FileSystemObject") For Each objBook In objFSO.GetFolder(FolderPath).Files lngRow = ThisWorkbook.Sheets("data").Range("A" & Rows.Count).End(xlUp).Row + 1 Workbooks.Open objBook.Path With ActiveWorkbook .Sheets("data").Rows("5:105").Copy ThisWorkbook.Sheets("data").Rows(lngRow) .Close End With Next Set objFSO = Nothing ActiveWindow.ScrollRow = 1 ActiveWindow.ActiveSheet.Range("A1").Select Application.ScreenUpdating = True End Sub

  • 自動範囲指定のデータをCSVで保存したい。

    添付ファイルにあるようにデータ(量が変化します)があり、自動的に最後の行まで指定してその範囲をダイヤログボックスを表示させてCSVとして保存したい。 今特に問題がある点は、 ・データのやり取りが出来ない点 ・CSVとして保存できない。(上記の点においてブランクの表が作成される) 何卒宜しくお願い致します。 '現在開いているシートをCSVデータで保存する Public Sub call_RangeSaveCSV() Dim fPath As String Dim fName As String Dim rng As Range Dim folderPath As String Fldr = "ダウンロード" '現在開いているブック情報をファイル名にするため、変数に格納 fPath = ActiveWorkbook.path & "\" fName = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".")) & "csv" Application.DisplayAlerts = False '現在選択しているセル情報をrngに格納 'Set Rng = Selection Set rng = Range("L6").CurrentRegion '新規ブック作成→rngをA1にコピー→CSV保存→CSV閉じる Workbooks.Add rng.Copy ActiveSheet.Range("A1") '■ここでエラーが返ってきます。ダイヤログボックスを出して任意の場所と名前を付けたいのですが。。 ActiveWorkbook.SaveAs FileName:=fPath & fName, FileFormat:="Sample.csv", FileFilter:="CSVファイル(*.csv),*.csv") ActiveWorkbook.SaveAs ActiveWindow.Close Application.DisplayAlerts = True End Sub

  • VB6.0にて、CSVファイルを読み込もうとしているのですが、1行ずつ

    VB6.0にて、CSVファイルを読み込もうとしているのですが、1行ずつ読み込めません。 以下のコードで、Lineのメッセージボックスが表示されないのです。 どなたか教えていただけないでしょうか。よろしくお願いします。 'CSVファイル読み込み Sub Stream() Dim Line, Temp As Variant Dim objFSO As Object Dim objStream As Object Const ForReading = 1, ForWriting = 2, ForAppending = 3 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objStream = objFSO.OpenTextFile(strDFpath & strDFname(1), ForReading, False) Temp = objStream.ReadAll MsgBox Temp '最後の行までループ Do Until objStream.AtEndOfLine - 1 <> True '1行読む Line = objStream.ReadLine MsgBox Line Loop objStream.Close Set objStream = Nothing Set objFSO = Nothing End Sub

  • ファイルを探すプログラムで c:\のみ動かない

    ファイルを探すプログラムをネット頂き テストしたのですが c:\ のみ 動かず c:\*** は そのフォルダーから下を探します e:\ は 全てのフォルダーを探します。 WIN8 ですが どこで間違ってるのでしょうか? よろしくどうぞ Option Explicit Private g_dteDate As Date Private g_strEXT As String '参照設定 M-Scripting.Runtime Cells(1, 2).Value に 探すアドレス 記載 c:\  e:\  c:\*** など Sub Sample_FileSearch2()   Dim vntF As Variant Dim objFSO As FileSystemObject Dim dteDate As Date Dim GYO As Long Dim cntFound As Long Set objFSO = New FileSystemObject ' FSO Rows("5:65536").ClearContents GYO = 4 ’ g_dteDate = DateAdd("m", Cells(3, 2).Value * -1, Date) 更新 不要 g_strEXT = UCase(Trim(Cells(2, 2).Value)) ' ルートフォルダから探索開始 Call Sample_FileSearch2_SUB(objFSO, _ objFSO.GetFolder(Trim(Cells(1, 2).Value)), GYO, cntFound) Set objFSO = Nothing ' 処理結果の表示 If cntFound = 0 Then MsgBox "見つかりません" Else MsgBox cntFound & "個見つかりました" End If End Sub '''******************************************************************************* ''' ファイル探索処理(再帰動作) '''******************************************************************************* Private Sub Sample_FileSearch2_SUB(objFSO As FileSystemObject, _ ByVal objFolder As Folder, _ GYO As Long, cntFound As Long) Dim objFolder2 As Folder Dim objFile As File ' サブフォルダの探索 For Each objFolder2 In objFolder.SubFolders ' サブフォルダ個々の探索(再帰動作) Call Sample_FileSearch2_SUB(objFSO, objFolder2, GYO, cntFound) Next objFolder2 ' このフォルダ内のファイルの探索 For Each objFile In objFolder.Files ' ここから条件判断 With objFile If (UCase(objFSO.GetBaseName(.Path)) = g_strEXT) Then GYO = GYO + 1 Cells(GYO, 1).Value = .Name Cells(GYO, 2).Value = .DateLastModified Cells(GYO, 3).Value = _ Left(.Path, Len(.Path) - Len(.Name) - 1) cntFound = cntFound + 1 End If End With Next objFile End Sub

  • ファイル書き込み

    out.csvファイルに追記していくにはどのように記述すればいいのでしょうか? アドバイス下さい。 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") 'objFile.ReadLine Do While Not objFile.AtEndOfStream StrLine = objFile.ReadLine MyString = split(StrLine,",") ' msgbox Mid(MyString(0),2,10) ' MyString = split(objFile.ReadLine,",") if Mid(MyString(0),2,10) = "(PDH-CSV 4" then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) msgbox "!!!" end if ' if Mid(MyString(0),2,10) = DateString then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) ' 'msgbox Mid(MyString(0),2,10) msgbox "???" end if loop objFile.close Set objFSO = Nothing Set objFile = Nothing

  • エクセルファイル(book)のシートの内容をCSVファイルにおとしたい

    こんにちは。 VB初心者です。 実はVBではなく、Excel VBAで行なっているのですが。 ここに質問していいかもよく分かってないのですが。 プログラムの処理としては、あるBookのシートの内容を 別のCSVファイルとして生成したいのです。マクロを組んだのですが、一つ問題があって困っています。 問題: 生成したCSVファイルが一度Window上に表示されて (それはいいのですが、あとで閉じますから) 以下の確認メッセージがでてしまいます。 「outFile.csvはExcel97のファイル形式では、ありません。変更を保存しますか?」 要はプログラムがここで、一旦ユーザアクションを要求してしまうのです。 アクションなしに普通に終了させたいのですが。 マクロではなくVBだったらこんなことはならないのでしょうか? 初心なのでよく分かりません。 もしくはもっとほかの簡単なコードできるのでしょうか。 以下にコードを記述します。 Sub OutFile() Dim myWBpath As String myWBpath = ActiveWorkbook.Path Workbooks.Open FileName:=myWBpath & "\testData1.xls" Sheets("sheet1").Select ActiveWorkbook.SaveAs FileName:="C:\outFile.csv", _ FileFormat:=xlCSV, CreateBackup:=False ActiveWorkbook.Close End Sub

専門家に質問してみよう