Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3297 / 13645 ツリー ←次へ | 前へ→

【62965】VBAでCSVを連結してをXLSで保存 YUKI 09/9/28(月) 0:52 質問[未読]
【62967】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/28(月) 9:02 発言[未読]
【62968】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/28(月) 9:37 発言[未読]
【62973】Re:VBAでCSVを連結してをXLSで保存 YUKI 09/9/28(月) 15:37 発言[未読]
【62974】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/28(月) 16:55 発言[未読]
【62975】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/28(月) 17:45 発言[未読]
【62976】Re:VBAでCSVを連結してをXLSで保存 YUKI 09/9/28(月) 18:35 お礼[未読]
【62977】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/28(月) 18:49 発言[未読]
【62978】Re:VBAでCSVを連結してをXLSで保存 YUKI 09/9/28(月) 18:53 お礼[未読]
【62980】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/29(火) 0:11 発言[未読]
【62987】Re:VBAでCSVを連結してをXLSで保存 YUKI 09/9/29(火) 18:53 お礼[未読]
【63004】Re:VBAでCSVを連結してをXLSで保存 YUKI 09/9/30(水) 17:48 質問[未読]
【63006】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/30(水) 19:32 発言[未読]
【63007】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/30(水) 19:35 発言[未読]
【63008】Re:VBAでCSVを連結してをXLSで保存 kanabun 09/9/30(水) 19:52 発言[未読]
【63047】Re:VBAでCSVを連結してをXLSで保存 YUKI 09/10/4(日) 6:04 お礼[未読]

【62965】VBAでCSVを連結してをXLSで保存
質問  YUKI  - 09/9/28(月) 0:52 -

引用なし
パスワード
   VBAで複数のCSVファイルを読み取って連結し一つのファイルにする処理をしています。連結したところ拡張子をXLSにして保存する処理をしたら一つのセルにCSVのデータが入って困ってます。できたらカンマ区切りでセルに入れるVBAをつくりたいです。分かる人がいたら教えてください。
今はCSVファイルで保存してから開いて拡張子を変更し保存してます。でもVBAで連結してXLSで保存したいと思ってます
下記はVBAでの参照してからの保存の処理です。間違ってたら教えてください

fName = Application.GetSaveAsFilename( _
    InitialFileName:=".xls", _
    FileFilter:="*.xls")
  If fName = False Then Exit Sub
  With fs.CreateTextFile(fName)
    .Write fStr '結合した内容のfSterを書き込んでいる
    .Close
    ActiveWorkbook.SaveAs FileFormat:=xlNormal

【62967】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/28(月) 9:02 -

引用なし
パスワード
   ▼YUKI さん:
>VBAで複数のCSVファイルを読み取って連結し一つのファイルにする処理をしています。

いまどのように「CSVファイルを読み取って」いるのか不明ですが、

> 連結したところ拡張子をXLSにして保存する処理をしたら一つのセルにCSVのデータが入って困ってます。

そうなるのは、読み取り方が適切でないからですよね?
複数のCSVファイルをひとつのワークシート上に順番に並べて行くには
  [データ]
   -[外部データの取り込み]
      -[テキストファイルのインポート]機能
を使うといいです。
まず、ひとつの*.CSVファイルをワークシート上に取り込みセルを指定して
インポートしてみて、
この操作をマクロ記録してみてください。

それができたら、記録をここに載せてください。それを元に
複数CSVファイルを一枚のシートにまとめるためのマクロ記録の
編集方法について説明しますので。

※複数のCSVファイルを結合して 「ひとつのCSVファイル」にするのが
目的でしたら、手順は全然変わってきます。ワークシートを使いません。

【62968】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/28(月) 9:37 -

引用なし
パスワード
   なお、CCSVファイルをワークシートにインポートする手順については
ここ↓など参考にしてください。

ht tp://www.relief.jp/itnote/archives/001687.php

(↑ht と tp のあいだのスペースは実際にはありません)

【62973】Re:VBAでCSVを連結してをXLSで保存
発言  YUKI E-MAIL  - 09/9/28(月) 15:37 -

引用なし
パスワード
   書き込みありがとうございます.

これは本を読みながら自分で作ったのです↓


Sub CSV()
  Dim fs As Object, fd As FileDialog
  Dim fStr As String, fName As Variant, i As Integer

  Set fs = CreateObject("Scripting.FileSystemObject")

  Set fd = Application.FileDialog(msoFileDialogFilePicker)

  With fd

    .AllowMultiSelect = True
    .Title = "データ選択(ファイル参照)"
    .Filters.Add "テキストファイル", "*.csv"
    If .Show = 0 Then Exit Sub
  End With
  If fd.SelectedItems.Count < 2 Then
    MsgBox "データを複数選んでください"
    Exit Sub
  End If
  With fs.OpenTextFile(fd.SelectedItems(1), 1)
    fStr = .ReadAll
    .Close
  End With
  For i = 2 To fd.SelectedItems.Count
    With fs.OpenTextFile(fd.SelectedItems(i), 1)
      fStr = fStr & vbCrLf & .ReadAll
      .Close

    End With
  Next i
  fName = Application.GetSaveAsFilename( _
    InitialFileName:="ファイル.xls", _
    FileFilter:=",*.xls")

  If fName = False Then Exit Sub
  With fs.CreateTextFile(fName)
    .Write fStr
    .Close
    ActiveWorkbook.SaveAs FileFormat:=xlNormal

  End With
End Sub

これは
記録したマクロです
↓↓↓ 
Application.Left = 440.5
  Application.Top = 8.5
  ActiveWorkbook.Worksheets.Add
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\www\home\簡易システム\UsabilityProject\jiro\1\眼球運動ログデータ\加工データ\1.csv", _
    Destination:=Range("A1"))
    .Name = "1"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 932
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _
    , 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
  End With
End Sub

理想はシート1とシート2連結したの入れて統計するつもりです

【62974】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/28(月) 16:55 -

引用なし
パスワード
   ▼YUKI さん:
こんにちは。

>これは本を読みながら自分で作ったのです↓

本だけから記述したにしては
インデントもついているし、
よくまとまっていますね(^^

ただ、
>Sub CSV()
には、ある重要な処理が抜けています。
勝手ながら、処理過程をまとめてみますと、

'-------------------------------------
  ▼(1)
FileDialogを使って複数CSVファイルを選択します。
  ▼(2)
FSOを使って各CSVファイルを ReadAll し、
テキストを連結します。
  fStr = fStr & vbCrLf & .ReadAll
         ↑この改行は不要です
  ▼(3)
結合したテキストを 拡張子*.xls の名前でファイルに
書き出します。
>  With fs.CreateTextFile(fName)
>    .Write fStr
>    .Close
>  End With
  ▼(4)
いまアクティブになっているBookを名前をつけて保存します。
>ActiveWorkbook.SaveAs FileFormat:=xlNormal
'-------------------------------------

とまぁ、こんな過程かと思うのですが、
問題というのは、
▼(3)
 結合したテキストを 拡張子*.xls の名前で保存して
いることです。
ワークシート上に複数テキストファイルをまとめて、
そのBookを保存してないので、
▼(2)〜▼(3) のプロセスで ディスク上に 結合したテキスト
ファイルは作成されますが、
そのことと、
▼(4) の 現在Bookの別名保存↓
>ActiveWorkbook.SaveAs FileFormat:=xlNormal
とは、どこにも関連がありません。

とりあえず、
作成されたコードを活かして、Book(*.xls)として保存する
ためには、
▼(1) ファイルの選択 (変更なし)
▼(2) テキストの結合  (変更なし)
▼(3) 名前を付けて(拡張子*.CSV)テキストの出力
▼(4) 出力した結合後のCSVファイルを
   [データ]-[外部データの取り込み]
    -[テキストファイルのインポート]
  を使って、新規ワークシート上にインポートする。
▼(5) インポートしたシートのあるBookを
  XLS形式で「名前をつけて」保存する。

としなければなりません。

さいわい、
▼(4) の部分についてはすでにマクロ記録がありますから、
上の処理過程を記述するコード(材料)はほとんど出揃って
います。
あと少しですので、コードの修正に精進してください。

【62975】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/28(月) 17:45 -

引用なし
パスワード
   ▼YUKI さん:

先ほどのコメントを、とりあえずコード化してみました。

Sub CSV結合してBookへ出力()
  Dim fs As Object, fd As FileDialog
  Dim fStr As String, fName As Variant, i As Integer
  Dim iz As Long

  '結合するCSVファイルの選択
  Set fd = Application.FileDialog(msoFileDialogFilePicker)
  With fd
    .AllowMultiSelect = True
    .Title = "データ選択(ファイル参照)"
    .Filters.Add "テキストファイル", "*.csv"
    If .Show = 0 Then Exit Sub
    If .SelectedItems.Count < 2 Then
      MsgBox "データを複数選んでください"
      Exit Sub
    End If
  End With
  
  'テキストの結合
  Set fs = CreateObject("Scripting.FileSystemObject")
  iz = fd.SelectedItems.Count
  For i = 1 To iz
    With fs.OpenTextFile(fd.SelectedItems(i), 1)
      fStr = fStr & .ReadAll
      .Close
    End With
  Next i
  '結合したテキストの出力
  fName = Replace(LCase(fd.SelectedItems(iz)), ".csv", "$.csv")
  With fs.CreateTextFile(fName)
    .Write fStr
    .Close
  End With
  
  '結合テキストをワークシートに読み込む
  Dim WS As Worksheet
  Set WS = Workbooks.Add(6).Worksheets(1)
  テキストファイルのインポート fName, WS
  
  fName = Application.GetSaveAsFilename( _
    InitialFileName:="ファイル.xls", _
    FileFilter:=",*.xls")
  If fName = False Then Exit Sub
  Application.EnableEvents = False
  ActiveWorkbook.SaveAs fName, FileFormat:=xlNormal
  Application.EnableEvents = True
End Sub

Sub テキストファイルのインポート(CSVname, ByVal WS As Worksheet)
 With WS
  With .QueryTables.Add(Connection:= _
    "TEXT;" & CSVname, Destination:=WS.Range("A1"))
    .Name = "foo"
    .FieldNames = True
    .AdjustColumnWidth = True
    .TextFilePlatform = 932
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    WS.Names(.Name).Delete
    .Delete
  End With
 End With
End Sub

【62976】Re:VBAでCSVを連結してをXLSで保存
お礼  YUKI E-MAIL  - 09/9/28(月) 18:35 -

引用なし
パスワード
   ▼kanabun さん:


コードを使ったところ自分のイメージどおりの処理ができました
ありがとうございます


申し訳ないのですがもう一つ質問があります

自分はまたCSVファイルを参照して連結する処理をワークシート2にできるようにしたいのですが,それは先ほどのコードで保存の処理をする前にワークシートを追加してからまた同じような処理をするのですか??

【62977】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/28(月) 18:49 -

引用なし
パスワード
   ▼YUKI さん:
>申し訳ないのですがもう一つ質問があります
>
>自分はまたCSVファイルを参照して連結する処理をワークシート2にできるようにしたいのですが,それは先ほどのコードで保存の処理をする前にワークシートを追加してからまた同じような処理をするのですか??

現在アクティブなBookの2枚目のシートを追加して
そこにインポートするなら、

>  '結合テキストをワークシートに読み込む
>  Dim WS As Worksheet
  'Set WS = Workbooks.Add(6).Worksheets(1)
  Set WS = Worksheets.Add(After:=Worksheets(1))
  
>  テキストファイルのインポート fName, WS

といった風でしょうか?

【62978】Re:VBAでCSVを連結してをXLSで保存
お礼  YUKI  - 09/9/28(月) 18:53 -

引用なし
パスワード
   ありがとうございます

試してみます

【62980】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/29(火) 0:11 -

引用なし
パスワード
   ▼YUKI さん:

ついでに(といっては何ですが)
ぼくが最初に考えていた処理の流れを紹介しておきます。
(CSVファイルの結合を行わず、個々のCSVファイルを指定シートに
 順番に インポートしていく方法です)

'最初に考えていた方法
(仮定)各CSVファイルには 列見出しがあると考えています。
    1つめのCSVをシートに書き出すときは、この列見出しを含めて
    1行目から書き出します。
    2つ目以降のCSVは 2行目からインポートしています。

Sub 複数CSVファイルのインポート()
  Dim fs As Object, fd As FileDialog
  Dim fStr As String, fName As Variant
  Dim i As Long, fCount As Long

  '結合するCSVファイルの選択
  Set fd = Application.FileDialog(msoFileDialogFilePicker)
  With fd
    .AllowMultiSelect = True
    .Title = "データ選択(ファイル参照)"
    .Filters.Add "CSVファイル", "*.csv"
    If .Show = 0 Then Exit Sub
    fCount = .SelectedItems.Count
    If fCount < 2 Then
      MsgBox "データを複数選んでください"
      Exit Sub
    End If
  End With
  
  '指定CSVを2枚目のシートにインポートする
  Dim iRow As Long    'Importするシート行番号
  Dim WS As Worksheet
  Set WS = Worksheets.Add(After:=Worksheets(1))
  For i = 1 To fCount
    CSVのインポート fd.SelectedItems(i), WS, iRow
  Next
  
  '名前を付けてXLS形式で保存
  fName = LCase$(fd.SelectedItems.Item(1))
  fName = Replace(fName, ".csv", ".xls")
  fName = Application.GetSaveAsFilename( _
    InitialFileName:=fName, FileFilter:="Book,*.xls")
  If fName = False Then Exit Sub
  Application.EnableEvents = False
  ActiveWorkbook.SaveAs fName, FileFormat:=xlNormal
  Application.EnableEvents = True
End Sub

Sub CSVのインポート(CSVname, ByVal WS As Worksheet, iRow As Long)
 iRow = iRow + 1
 With WS
  With .QueryTables.Add(Connection:= _
    "TEXT;" & CSVname, Destination:=WS.Cells(iRow, 1))
    .Name = "foo"          'iRow : Sheet書き出し行
    .FieldNames = True
    .AdjustColumnWidth = True
    .TextFilePlatform = 932
    .TextFileStartRow = 1 - (iRow > 1) 'Text Import開始行
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    WS.Names(.Name).Delete
    .Delete
  End With
  iRow = .Cells(.Rows.Count, 1).End(xlUp).Row
 End With
End Sub

【62987】Re:VBAでCSVを連結してをXLSで保存
お礼  YUKI  - 09/9/29(火) 18:53 -

引用なし
パスワード
   ▼kanabun さん:
>▼YUKI さん:
>     各CSVファイルには 列見出しがあると考えています。
>    1つめのCSVをシートに書き出すときは、この列見出しを含めて
>    1行目から書き出します。
>    2つ目以降のCSVは 2行目からインポートしています。
ありがとうございます
この処理でも同じことができました
とても参考になって助かります

【63004】Re:VBAでCSVを連結してをXLSで保存
質問  YUKI  - 09/9/30(水) 17:48 -

引用なし
パスワード
   前回の続きでわからないことがあって困ってます
前回の処理にシートを追加してCSVファイルを連結したのを入れる処理を加えたいのですがうまくいかずエラーが起きます
わかる方いれば教えてください

Sub CSV結合してBookへ出力()
  Dim fs As Object, fd As FileDialog
  Dim fStr As String, fName As Variant, i As Integer
  Dim iz As Long
  
  Set fd = Application.FileDialog(msoFileDialogFilePicker)

  With fd
  
    .AllowMultiSelect = True
    .Title = "データ選択(ファイル参照)"
    .Filters.Add "テキストファイル", "*.csv"
    If .Show = 0 Then Exit Sub
    If .SelectedItems.Count < 2 Then
      MsgBox "データを複数選んでください"
      Exit Sub
    End If
  End With
 
 
  Set fs = CreateObject("Scripting.FileSystemObject")
 
  iz = fd.SelectedItems.Count
  For i = 1 To iz
    With fs.OpenTextFile(fd.SelectedItems(i), 1)
      fStr = fStr & .ReadAll
      .Close
    End With
  Next i
 
  fName = Replace(LCase(fd.SelectedItems(iz)), ".csv", "$.csv")
  With fs.CreateTextFile(fName)
    .Write fStr
    .Close
    
  End With
 
  
  Dim WS As Worksheet
  Set WS = Workbooks.Add(6).Worksheets(1)
  テキストファイルのインポート fName, WS
 
  fName = Application.GetSaveAsFilename( _
    InitialFileName:="ファイル.xls", _
    FileFilter:=",*.xls")
    
  If fName = False Then Exit Sub
  Application.EnableEvents = False
  ActiveWorkbook.SaveAs fName, FileFormat:=xlNormal
  Application.EnableEvents = True
End Sub
Sub シートを追加してそこにインポート()'ここから追加した処理でうまくいきま                   せん
  Dim fs2 As Object, fd2 As FileDialog
  Dim fStr2 As String, fName2 As Variant, i2 As Integer
  Dim iz2 As Long

  Set fd2 = Application.FileDialog(msoFileDialogFilePicker)

  With fd2

    .AllowMultiSelect = True
    .Title = "データ選択(ファイル参照)"
    .Filters.Add "テキストファイル", "*.csv"
    If .Show = 0 Then Exit Sub
    If .SelectedItems.Count < 2 Then
      MsgBox "データを複数選んでください"
      Exit Sub
    End If
  End With
 

  Set fs2 = CreateObject("Scripting.FileSystemObject")
  
  iz2 = fd2.SelectedItems.Count
  For i2 = 1 To iz2
    With fs.OpenTextFile(fd.SelectedItems(i2), 1)
      fStr2 = fStr2 & .ReadAll
      .Close
    End With
  Next i2
 
  fName2 = Replace(LCase(fd2.SelectedItems(iz2)), ".csv", "$.csv")
  With fs2.CreateTextFile(fName)
    .Write fStr2
    .Close
  
  End With


  Dim WS As Worksheet
   Set WS = Worksheets.Add(After:=Worksheets(1))
 
 
  fName = Application.GetSaveAsFilename( _
    InitialFileName:="ファイル.xls", _
    FileFilter:=",*.xls")
    
  If fName2 = False Then Exit Sub
  Application.EnableEvents = False
  ActiveWorkbook.SaveAs fName, FileFormat:=xlNormal
  Application.EnableEvents = True
End Sub


Sub テキストファイルのインポート(CSVname, ByVal WS As Worksheet)
 With WS
  With .QueryTables.Add(Connection:= _
    "TEXT;" & CSVname, Destination:=WS.Range("A1"))
    .Name = "foo"
    .FieldNames = True
    .AdjustColumnWidth = True
    .TextFilePlatform = 932
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    WS.Names(.Name).Delete
    .Delete

【63006】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/30(水) 19:32 -

引用なし
パスワード
   ▼YUKI さん:
>前回の続きでわからないことがあって困ってます
>前回の処理にシートを追加してCSVファイルを連結したのを入れる処理を加えたいのですがうまくいかずエラーが起きます
>わかる方いれば教えてください
>
あの、前回
>Sub CSV結合してBookへ出力()
と今回作成されようとしている
>Sub シートを追加してそこにインポート()
とで、異なるところは
結合したCSVテキストファイルを
【前回】新規Bookにインポートするか、
【今回】すでにインポートして作成したBookに さらにシートを追加して
 そこにインポートするか
のちがいだけなんですよね?

それでしたら、あらたにプロシージャを作り、
変数名まで前回のものと異なるものにする必要はサラサラないと
思うけどな?

前回のもの↓を変更部分だけ追加修正するように、
省エネで行きましょうよ♪

それから、コードに付したコメントは あとになって読み返すとき
何をしているかの重要な情報なので、
消してしまわないほうがいいですよ

>Sub CSV結合してBookへ出力()
>  Dim fs As Object, fd As FileDialog
>  Dim fStr As String, fName As Variant, i As Integer
>  Dim iz As Long
>  
'▼1. 統合するCSVファイルの選択
>  Set fd = Application.FileDialog(msoFileDialogFilePicker)
>  With fd
>    .AllowMultiSelect = True
>    .Title = "データ選択(ファイル参照)"
>    .Filters.Add "テキストファイル", "*.csv"
>    If .Show = 0 Then Exit Sub
>    If .SelectedItems.Count < 2 Then
>      MsgBox "データを複数選んでください"
>      Exit Sub
>    End If
>  End With
> 
'▼2. 選択CSVファイルを結合して ひとつのCSVに統合する
>  Set fs = CreateObject("Scripting.FileSystemObject")
>  iz = fd.SelectedItems.Count
>  For i = 1 To iz
>    With fs.OpenTextFile(fd.SelectedItems(i), 1)
>      fStr = fStr & .ReadAll
>      .Close
>    End With
>  Next i
>  fName = Replace(LCase(fd.SelectedItems(iz)), ".csv", "$.csv")
>  With fs.CreateTextFile(fName)
>    .Write fStr
>    .Close
>  End With

'▼3.新規ワークブックを作成し、統合後のCSVファイルをインポート
>  Dim WS As Worksheet
>  Set WS = Workbooks.Add(6).Worksheets(1)
>  テキストファイルのインポート fName, WS

'▼4.名前を付けてBookの保存
>  fName = Application.GetSaveAsFilename( _
>    InitialFileName:="ファイル.xls", _
>    FileFilter:=",*.xls")
>    
>  If fName = False Then Exit Sub
>  Application.EnableEvents = False
>  ActiveWorkbook.SaveAs fName, FileFormat:=xlNormal
>  Application.EnableEvents = True
>End Sub

以上が前回分のコードです。
で、今回仕様が変わるのは
'▼3. の部分、つまり「どこにインポートするか」が変わる
ということではないですか?

もしそうなら、その部分を以下のように
新規Bookにインポートする場合と
現在アクティブなBookにシートを追加してそこにインポート
するばあいとで 分岐処理すればよいかと。

'▼3.統合後のCSVファイルをインポート
>  Dim WS As Worksheet
   dm msg as string
   msg = "統合したCSVファイルを" & vbCr
   msg = msg & "新規Bookに読み込むばあいは [はい]" & vbCr
   msg = msg & "現在Bookの新規シートに読み込むばあいは[いいえ]"
   msg = msg & vbCr & "ボタンを押してください"
 Select Case msgbox(msg, vbYesNoCancel)
  Case vbCancel
    Exit Sub
  Case vbYes
>   Set WS = Workbooks.Add(6).Worksheets(1)
  Case vbNo
    With ActiveWorkbook.Worksheets
      Set WS = .Add(After:=.Item(.Count)
    End With
  End Select
>  テキストファイルのインポート fName, WS

と分岐処理を入れるだけでいいのじゃないかと思いますけど?

>うまくいかずエラーが起きます
どこで、どのような内容のエラーになるのかの情報も一緒に
示してくださいね

【63007】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/30(水) 19:35 -

引用なし
パスワード
   ↑ 直書きしたので タイプミスが...

>  dm msg as string
   ↓
  dim msg as string

に訂正です。すみません。

【63008】Re:VBAでCSVを連結してをXLSで保存
発言  kanabun  - 09/9/30(水) 19:52 -

引用なし
パスワード
   あ〜、ここも カッコが足りない m(__)m

     Set WS = .Add(After:=.Item(.Count)
                    ↓
     Set WS = .Add(After:=.Item(.Count))

【63047】Re:VBAでCSVを連結してをXLSで保存
お礼  YUKI  - 09/10/4(日) 6:04 -

引用なし
パスワード
   ありがとうございます.
何とかできました.
kanabun さんの言われた通りこちらの方法のほうが分かりやすく良いですね

3297 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free