こんにちわ
マクロ(VBA)でかいています
実行してExcelファイルを開きそのなかから特定のものを抽出し、csvファイルで出力するものです。
エクセルファイルはシートが複数あり、シートごとに条件によって特定の文字を抽出させています
vba
1Sub Run() 2 Dim OpenFileName As String 3 Dim wb As Workbook 4 5 'ファイルを開くダイアログ 6 OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") 7 If OpenFileName = "False" Then 8 Exit Sub 9 End If 10 11 Set wb = Workbooks.Open(OpenFileName) 12 13 ' ブックの全シートを 1 つずつループして処理する 14 For Each ws In wb.Worksheets 15 16 Dim maxCol, maxRow As Integer 17 maxCol = ws.UsedRange.Columns(ws.UsedRange.Columns.Count).Column 18 maxRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row 19 For i = 10 To maxRow Step 4 20 21 '----T---- 22 '改行とスペースを削除 23 Dim Tcode As String 24 Tcode = Replace(ws.Cells(i, 1).Value, vbCrLf, "") 25 '----K---- 26 Dim Kcode As String 27 Kcode = ws.Cells(i, 3).Value 28 29 '----J---- 30 Dim Jcode As String 31 Jcode = ws.Cells(i + 2, 2).Value 32 33 '----ナンバー---- 34 Dim Number String 35 36 If maxCol = 20 Then 37 38 '----ナンバー---- 39 Number = ws.Cells(i, 19).Value 40 41 ElseIf maxCol = 30 Then 42 43 '----ナンバー---- 44 Number = ws.Cells(i, 19).Value 45 46 Else 47 48 '----ナンバー---- 49 Number= ws.Cells(i, 20).Value 50 51 End If 52 53 Dim nameFile As String 54 Dim Filenum As Long 55 Dim msg As String 56 57 nameFile = Format(Now(), "yyyymmdd") & ".csv" 58 nameFile = ActiveWorkbook.Path & "\" & nameFile 59 60 61 Filenum = FreeFile() 62 Open nameFile For Append As #Filenum 63 Print #Filenum, Tcode + "," + Kcode + "," + Jcode + "," + Number 64 Close #Filenum 65 66 '同じファイル名があるとき警告 67 If Dir(nameFile & ".csv") <> "" Then 68 msg = "同じ名前のファイルが存在します。上書きしますか?" 69 If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub 70 End If 71 72 Application.DisplayAlerts = False 73 ActiveWorkbook.SaveAs Filename:=nameFile 74 75 Workbooks.Close 76 77 Next 78 79 Next 80 MsgBox "処理が完了しました" 81 82End Sub
うまくできないのが、同じ名前のcsvファイルが存在するときに
上書きしますか?といった警告をだして、はいを選べば上書き、いいえを選べばキャンセルで処理を行わないといったことをしたいのですが
現状同じファイル名がなくても警告がでてしまい、また保存をするとなぜか最初に開くもとのファイルが出力されてしまいます
ファイル名は実行した段階の日付になるようにしています
'同じファイル名があるとき警告~の部分がなければきちんと希望の形でcsvファイルに出力されるのですが…
また最後に最初に開いたエクセルファイルは処理が終わるとともに閉じたいのですがうまくいきません
Workbooks.Closeですべて閉じれると思っているのですが違うのでしょうか?
すみませんが、アドバイスお願いいたします
追記
無事解決いたしました!
お助けいただきありがとうございました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/17 05:14
2018/04/17 05:26
2018/04/17 05:45
2018/04/17 05:48
2018/04/17 05:49
2018/04/17 05:53
2018/04/17 05:54
2018/04/17 06:18
2018/04/17 06:25
2018/04/17 06:37
2018/04/17 06:39
2018/04/17 06:43
2018/04/17 06:49