|
▼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
と分岐処理を入れるだけでいいのじゃないかと思いますけど?
>うまくいかずエラーが起きます
どこで、どのような内容のエラーになるのかの情報も一緒に
示してくださいね
|
|