teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2018/04/17 06:23

投稿

ttyp03
ttyp03

スコア17002

answer CHANGED
@@ -61,6 +61,8 @@
61
61
  Exit Sub
62
62
  End If
63
63
 
64
+ Set wb = Workbooks.Open(OpenFileName)
65
+
64
66
  Dim nameFile As String
65
67
  Dim Filenum As Long
66
68
  Dim msg As String
@@ -77,8 +79,6 @@
77
79
  Filenum = FreeFile()
78
80
  Open nameFile For Append As #Filenum
79
81
 
80
- Set wb = Workbooks.Open(OpenFileName)
81
-
82
82
  ' ブックの全シートを 1 つずつループして処理する
83
83
  For Each ws In wb.Worksheets
84
84
 

1

修正案

2018/04/17 06:23

投稿

ttyp03
ttyp03

スコア17002

answer CHANGED
@@ -46,4 +46,89 @@
46
46
  ```VBA
47
47
  wb.Close
48
48
  ```
49
- で良いと思います。
49
+ で良いと思います。
50
+
51
+ ---
52
+ 修正案です。
53
+ ```VBA
54
+ Sub Run()
55
+ Dim OpenFileName As String
56
+ Dim wb As Workbook
57
+
58
+ 'ファイルを開くダイアログ
59
+ OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
60
+ If OpenFileName = "False" Then
61
+ Exit Sub
62
+ End If
63
+
64
+ Dim nameFile As String
65
+ Dim Filenum As Long
66
+ Dim msg As String
67
+
68
+ nameFile = Format(Now(), "yyyymmdd") & ".csv"
69
+ nameFile = ActiveWorkbook.Path & "\" & nameFile
70
+
71
+ '同じファイル名があるとき警告
72
+ If Dir(nameFile) <> "" Then
73
+ msg = "同じ名前のファイルが存在します。上書きしますか?"
74
+ If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
75
+ End If
76
+
77
+ Filenum = FreeFile()
78
+ Open nameFile For Append As #Filenum
79
+
80
+ Set wb = Workbooks.Open(OpenFileName)
81
+
82
+ ' ブックの全シートを 1 つずつループして処理する
83
+ For Each ws In wb.Worksheets
84
+
85
+ Dim maxCol, maxRow As Integer
86
+ maxCol = ws.UsedRange.Columns(ws.UsedRange.Columns.Count).Column
87
+ maxRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row
88
+ For i = 10 To maxRow Step 4
89
+
90
+ '----T----
91
+ '改行とスペースを削除
92
+ Dim Tcode As String
93
+ Tcode = Replace(ws.Cells(i, 1).Value, vbCrLf, "")
94
+ '----K----
95
+ Dim Kcode As String
96
+ Kcode = ws.Cells(i, 3).Value
97
+
98
+ '----J----
99
+ Dim Jcode As String
100
+ Jcode = ws.Cells(i + 2, 2).Value
101
+
102
+ '----ナンバー----
103
+ Dim Number String
104
+
105
+ If maxCol = 20 Then
106
+
107
+ '----ナンバー----
108
+ Number = ws.Cells(i, 19).Value
109
+
110
+ ElseIf maxCol = 30 Then
111
+
112
+ '----ナンバー----
113
+ Number = ws.Cells(i, 19).Value
114
+
115
+ Else
116
+
117
+ '----ナンバー----
118
+ Number= ws.Cells(i, 20).Value
119
+
120
+ End If
121
+
122
+ Print #Filenum, Tcode + "," + Kcode + "," + Jcode + "," + Number
123
+ Next
124
+
125
+ Next
126
+
127
+ Close #Filenum
128
+ wb.Close
129
+
130
+ MsgBox "処理が完了しました"
131
+
132
+ End Sub
133
+
134
+ ```