質問編集履歴

1

質問内容の変更

2020/04/11 08:00

投稿

Chandler_Bing
Chandler_Bing

スコア673

test CHANGED
@@ -1 +1 @@
1
- VBA アクティブシートが選択されていない
1
+ VBA シートごとの列数とカラム数を取得できない
test CHANGED
@@ -2,23 +2,15 @@
2
2
 
3
3
 
4
4
 
5
+ 表題の通りです。シートをForEachしているつもりなのですが、
6
+
5
- 昨日も質問頂きましたがです
7
+ 実行時に選択いるシート行数とカラム数しか取得でません
6
8
 
7
9
 
8
10
 
9
- 現したいことは以下で
11
+ 現在のエクセルのシート状態、VBAのコード、行結果を貼りま
10
-
11
- [VBAでダブルコーテーションがうまく表示できない](https://teratail.com/questions/252813?whotofollow=)
12
12
 
13
13
 
14
-
15
- 現在一つのブック内に複数のシートがあった場合に、
16
-
17
- そのシートごとのカラムを取得し、それをキーにした連想配列を作成したいです。
18
-
19
-
20
-
21
- イメージのエクセルです。
22
14
 
23
15
  ![エクセルの値](62cc496ece60fa2baf55cca4033d88d9.png)
24
16
 
@@ -28,278 +20,66 @@
28
20
 
29
21
 
30
22
 
31
-
32
-
33
- ```vba
23
+ ```VBA
34
-
35
- Sub makeSeeder()
36
24
 
37
25
 
38
26
 
39
- '組織コードを定義
27
+ Sub makeSeeder()
40
-
41
-
42
28
 
43
29
  Dim Ws As Worksheet
44
30
 
45
31
  For Each Ws In Worksheets
46
32
 
33
+ 'カラム数と行数を格納
47
34
 
35
+ Dim clms_cnt As Integer
48
36
 
49
- 'ファイル名変数
50
-
51
- Dim fle_nm As String
52
-
53
- fle_nm = "Acc"
37
+ clms_cnt = Ws.Application.CountA(Range("1:1"))
54
38
 
55
39
 
56
40
 
57
- 'シート名を取得
41
+ Dim row_cnt As Integer
58
42
 
59
- tmp_sht_nm = Ws.Name
43
+ row_cnt = Ws.Application.CountA(Range("A:A"))
60
44
 
61
45
 
62
46
 
63
- '一文字ずつセルに表示メイン処理
47
+ 'ウィンドウに表示させ
64
48
 
65
- For i = 1 To Len(tmp_sht_nm)
49
+ Debug.Print Ws.Name
66
50
 
51
+ Debug.Print clms_cnt
67
52
 
68
-
69
- '最初の一文字を大文字にして取得
70
-
71
- If i = 1 Then
72
-
73
- fle_nm = fle_nm & UCase(Mid(tmp_sht_nm, i, 1))
74
-
75
- GoTo Continue
76
-
77
- End If
78
-
79
-
80
-
81
- 'アンスコの場合は次の文字を大文字にして取得
82
-
83
- If Mid(tmp_sht_nm, i, 1) = "_" Then
84
-
85
- fle_nm = fle_nm & UCase(Mid(tmp_sht_nm, i + 1, 1))
86
-
87
- 'インクリメント
88
-
89
- i = i + 1
90
-
91
- Else
92
-
93
- fle_nm = fle_nm & Mid(tmp_sht_nm, i, 1)
94
-
95
- End If
96
-
97
- Continue:
98
-
99
- Next i
100
-
101
- 'ファイル名の作成処理終了(シーダー作成開始)
102
-
103
-
104
-
105
- 'カラム数と行数を格納
106
-
107
- Dim clms_cnt As Integer
108
-
109
- clms_cnt = Ws.Application.CountA(Range("1:1"))
110
-
111
-
112
-
113
- Dim row_cnt As Integer
114
-
115
- row_cnt = Ws.Application.CountA(Range("A:A"))
116
-
117
-
118
-
119
- Debug.Print clms_cnt
120
-
121
- Debug.Print row_cnt
53
+ Debug.Print row_cnt
122
-
123
-
124
-
125
- 'カラム名を配列に格納
126
-
127
- Dim clm_arr() As Variant 'lengthは条件によって変わる
128
-
129
- ReDim clm_arr(clms_cnt) As Variant
130
-
131
-
132
-
133
- For i = 1 To clms_cnt
134
-
135
- clm_arr(i - 1) = Ws.Cells(1, i)
136
-
137
- Next i
138
-
139
-
140
-
141
- 'PHPの連想配列を作成
142
-
143
- Open "C:\Users\xxxx\OneDrive\デスクトップ\テストデータシーダー\" & fle_nm & "Seeder.php" For Append As #1
144
-
145
- Print #1, "<?php"
146
-
147
- Print #1, "return ["
148
-
149
- For i = 2 To row_cnt
150
-
151
- Print #1, " ["
152
-
153
- For j = 1 To clms_cnt
154
-
155
- Print #1, " """ & clm_arr(j - 1) & """" & " => " & """" & Trim(Ws.Cells(i, j)) & ""","
156
-
157
- Next j
158
-
159
- Print #1, " ],"
160
-
161
- Next i
162
-
163
- Print #1, "];"
164
-
165
- Close #1
166
-
167
-
168
54
 
169
55
  Next Ws
170
-
171
-
172
56
 
173
57
  End Sub
174
58
 
175
59
 
176
60
 
177
- ```
61
+ '実行結果
178
62
 
63
+ 't_abc_def
179
64
 
65
+ '5
180
66
 
181
- これを実行すると、「clms_cnt 」「row_cnt」がVBAのコードを実行するときに選択されているものしかとってこられません。
67
+ '7
182
68
 
183
- どの記述を修正すればよいですか???
69
+ 't_ghi_jkl
184
70
 
71
+ '5
185
72
 
186
-
187
- 以下実行結果の一部です。
188
-
189
- ```php
190
-
191
- <?php
73
+ '7
192
-
193
- // t_abc_def
194
-
195
- return [
196
-
197
- [
198
-
199
- "column1" => "1",
200
-
201
- "column2" => "1",
202
-
203
- "column3" => "1",
204
-
205
- "column4" => "1",
206
-
207
- "column5" => "1",
208
-
209
- "column6" => "1",
210
-
211
- "column7" => "1",
212
-
213
- "column8" => "1",
214
-
215
- "column9" => "1",
216
-
217
- "column10" => "1",
218
-
219
- ],
220
-
221
- [
222
-
223
- "column1" => "2",
224
-
225
- "column2" => "2",
226
-
227
- "column3" => "2",
228
-
229
- "column4" => "2",
230
-
231
- "column5" => "2",
232
-
233
- "column6" => "2",
234
-
235
- "column7" => "2",
236
-
237
- "column8" => "2",
238
-
239
- "column9" => "2",
240
-
241
- "column10" => "2",
242
-
243
- ],
244
-
245
-
246
-
247
- // t_ghi_jkl
248
-
249
- return [
250
-
251
- [
252
-
253
- "カラム1" => "11",
254
-
255
- "カラム2" => "11",
256
-
257
- "カラム3" => "11",
258
-
259
- "カラム4" => "11",
260
-
261
- "カラム5" => "11",
262
-
263
- "" => "",
264
-
265
- "" => "",
266
-
267
- "" => "",
268
-
269
- "" => "",
270
-
271
- "" => "",
272
-
273
- ],
274
-
275
- [
276
-
277
- "カラム1" => "12",
278
-
279
- "カラム2" => "12",
280
-
281
- "カラム3" => "12",
282
-
283
- "カラム4" => "12",
284
-
285
- "カラム5" => "12",
286
-
287
- "" => "",
288
-
289
- "" => "",
290
-
291
- "" => "",
292
-
293
- "" => "",
294
-
295
- "" => "",
296
-
297
- ],
298
74
 
299
75
  ```
300
76
 
301
77
 
302
78
 
303
- きちんと別シートのものを参照てる、foreachは機能していると思うのでが、、、
79
+ 実行する際「イメージ」シートは削除た状態行っていす。
304
80
 
81
+ 「Ws.Name」が動作しているのでシートはForEachで回せていると思うのですが。
82
+
83
+
84
+
305
- よろしくお願いします。
85
+ ご教示よろしくお願いします。