質問編集履歴

2

郵便番号データを利用する前提でソースの改定、簡素化

2018/01/05 16:19

投稿

zorac
zorac

スコア42

test CHANGED
File without changes
test CHANGED
@@ -94,35 +94,67 @@
94
94
 
95
95
  ```VBA
96
96
 
97
- Option Explicit
97
+ '郵便番号データダウンロードサービスで入手可能な郵便番号データを利用する
98
98
 
99
-
99
+ Private Sub UserForm_Initialize()
100
+
101
+ With ListView1
102
+
103
+ .View = lvwReport
104
+
105
+ .HideSelection = False
106
+
107
+ .FullRowSelect = True
108
+
109
+ .ColumnHeaders.Add , "_X0401-X0402", "全国地方公共団体コード", 120
110
+
111
+ .ColumnHeaders.Add , "_OldPostalCode", "旧郵便番号", 120
112
+
113
+ .ColumnHeaders.Add , "_PostalCode", "郵便番号", 80
114
+
115
+ .ColumnHeaders.Add , "_Prefectures", "都道府県名", 80
116
+
117
+ End With
118
+
119
+ End Sub
120
+
121
+
122
+
123
+
100
124
 
101
125
  Private Sub TextBox1_Change()
102
126
 
103
- Dim lastRow As Long
127
+ '-------------------- ListViewのクリア ココカラ --------------------
104
128
 
105
- Dim dataSet As Variant
129
+ ListView1.ListItems.Clear
106
130
 
107
- Dim searchResult() As String
131
+ '-------------------- ListViewのクリア ココマデ --------------------
108
132
 
109
- Dim count As Long
133
+
110
-
111
- Dim t As Single
112
134
 
113
135
 
114
136
 
115
137
  '-------------------- データの検索 ココカラ --------------------
116
138
 
139
+ Dim t As Single
140
+
141
+ Dim ws As Worksheet
142
+
117
143
  t = Timer()
118
144
 
119
- With Worksheets("Sheet1")
145
+ Set ws = Worksheets("Sheet1")
120
146
 
121
- lastRow = .Cells(1048576, 1).End(xlUp).Row
147
+
122
148
 
123
- dataSet = .Range(.Cells(1, 1), .Cells(lastRow, 7))
149
+ With ws
124
150
 
125
- ReDim searchResult(lastRow - 1, 5)
151
+ Dim lastRow As Long
152
+
153
+ Dim dataSet As Variant
154
+
155
+ lastRow = .Cells(.Rows.count, 1).End(xlUp).Row
156
+
157
+ dataSet = .Range(.Cells(1, 1), .Cells(lastRow, 4))
126
158
 
127
159
 
128
160
 
@@ -130,21 +162,19 @@
130
162
 
131
163
  For i = 2 To lastRow
132
164
 
133
- If dataSet(i, 7) Like "*" & TextBox1 & "*" Then
165
+ If dataSet(i, 3) Like "*" & TextBox1 & "*" Then
134
166
 
135
- searchResult(count, 0) = dataSet(i, 1)
167
+ With ListView1.ListItems.Add
136
168
 
137
- searchResult(count, 1) = dataSet(i, 3)
169
+ .Text = dataSet(i, 1) '全国地方公共団体コード
138
170
 
139
- searchResult(count, 2) = dataSet(i, 4)
171
+ .SubItems(1) = dataSet(i, 2) '旧郵便番号
140
172
 
141
- searchResult(count, 3) = dataSet(i, 5)
173
+ .SubItems(2) = dataSet(i, 3) '郵便番号
142
174
 
143
- searchResult(count, 4) = dataSet(i, 6)
175
+ .SubItems(3) = dataSet(i, 4) '都道府県名
144
176
 
145
- searchResult(count, 5) = dataSet(i, 7)
146
-
147
- count = count + 1
177
+ End With
148
178
 
149
179
  End If
150
180
 
@@ -156,52 +186,6 @@
156
186
 
157
187
  '-------------------- データの検索 ココマデ --------------------
158
188
 
159
-
160
-
161
-
162
-
163
- '-------------------- ListViewのクリア ココカラ --------------------
164
-
165
- ListView1.ListItems.Clear
166
-
167
- If count = 0 Then Exit Sub '検索結果が0ならば処理終了
168
-
169
- '-------------------- ListViewのクリア ココマデ --------------------
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
- '-------------------- ListViewへの検索結果反映 ココカラ --------------------
178
-
179
- t = Timer()
180
-
181
- For i = 0 To count - 1
182
-
183
- With ListView1.ListItems.Add
184
-
185
- .Text = searchResult(i, 0)
186
-
187
- .SubItems(1) = searchResult(i, 1)
188
-
189
- .SubItems(2) = searchResult(i, 2)
190
-
191
- .SubItems(3) = searchResult(i, 3)
192
-
193
- .SubItems(4) = searchResult(i, 4)
194
-
195
- .SubItems(5) = searchResult(i, 5)
196
-
197
- End With
198
-
199
- Next i
200
-
201
- Debug.Print "ListViewへの反映: " & Round(Timer() - t, 2) & vbCrLf
202
-
203
- '-------------------- ListViewへの検索結果反映 ココマデ --------------------
204
-
205
189
  End Sub
206
190
 
207
191
  ```

1

コメントで指摘いただいた箇所を修正しました。

2018/01/05 16:19

投稿

zorac
zorac

スコア42

test CHANGED
File without changes
test CHANGED
@@ -130,7 +130,7 @@
130
130
 
131
131
  For i = 2 To lastRow
132
132
 
133
- If dataSet(i, 9) Like "*" & TextBox1 & "*" Then
133
+ If dataSet(i, 7) Like "*" & TextBox1 & "*" Then
134
134
 
135
135
  searchResult(count, 0) = dataSet(i, 1)
136
136