[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『郵便番号の件数表を作りたいのですが』(せいぶれむ)
以下のようなデータがあります。
(一番右端は通し番号です)
※021-00が郵便番号の頭5桁です。1行目で、A列になります。
その下にある20という数字が、この5桁でカウントした合計数になります。
1列目から使用しています(データ作成の都合上、3.4.5行目などブランクの行があります)
同じようにA列からF列まで同じような状態で郵便番号と合計数が入っています。
途中から2桁のものが混ざって来ます(頭2桁で合計するパターンがあるため)
※「雑」とは「その他」というような意味です。
021-00 021-08 021-09 024-00 078-82 1
20 17 17 23 13 2
3 4 5 078-83 187-00 210-08 243-00 252-02 6 11 26 10 10 13 7 8 9 10 257-00 259-11 259-11 260-00 274-08 11 12 30 10 13 12 12 13 14 15 312-00 312-00 315-00 321-01 321-09 16 30 15 15 14 22 17 18 19 20 329-12 329-13 354-00 356-00 370-00 21 10 10 14 10 20 22 23 24 25 370-05 385-00 400-00 400-01 410-00 26 25 13 15 16 10 27 28 29 30 441-02 444-00 444-02 444-03 444-08 31 13 13 11 10 12 32
・・・(省略)・・・
989-62 989-63 990-00 990-08 992-00 116
24 11 10 13 17 117
118 119 120 994-00 997-00 998-00 999-37 02 121 29 10 12 13 30 122 123 124 125 02 02 02 06 07 126 30 30 8 10 24 127 128 129 130 08 14 16 17 18 131 18 12 10 10 15 132 133 134 135 19 19 20 21 22 136 30 8 13 18 15 137 138 139 140 23 24 24 25 25 141 25 30 9 30 17 142 143 144 145 27 27 30 30 31 146 30 2 30 27 28 147 148 149 150 32 32 32 33 34 151 30 30 17 19 30 152 153 154 155 34 35 35 36 37 156 15 30 2 19 30 157 158 159 160 37 38 38 39 40 161 12 30 1 10 30 162 163 164 165 40 41 41 43 44 166 10 30 3 23 30 167 168 169 170 44 44 45 45 46 171 30 3 30 24 30 172 173 174 175 46 47 47 47 48 176 2 30 30 23 30 177 178 179 180 48 49 49 50 50 181 7 30 12 30 30 182 183 184 185 50 50 51 51 51 186 30 10 30 30 7 187 188 189 190 52 52 52 53 56 191 30 30 16 17 23 192 193 194 195 57 59 60 61 66 196 11 16 16 29 29 197 198 199 200 67 67 70 71 72 201 30 27 25 17 30 202 203 204 205 72 73 74 75 79 206 11 16 30 17 15 207 208 209 210 80 80 80 81 81 211 30 30 7 30 20 212 213 214 215 82 83 84 85 86 216 22 27 15 30 30 217 218 219 220 86 87 87 87 89 221 22 30 30 2 30 222 223 224 225 89 91 92 92 93 226 12 10 30 15 30 227 228 229 230 93 93 94 94 95 231 30 22 30 26 30 232 233 234 235 95 95 95 95 96 236 30 30 30 23 30 237 238 239 240 96 96 98 98 98 241 30 18 30 30 30 242 243 244 245 98 98 98 98 99 246 30 30 30 25 30 247 248 249 250 99 99 雑 雑 雑 251 30 15 30 30 30 252 253 254 255 雑 256 28 257
このデータのままでA列を「値」降順。その後F列「値」昇順で並び変えると、
途中にある”02”が上にあがって来ません。
最終的には以下のようにしたいのです(データが違うので、若干郵便番号や合計数が異なります)
021-00 021-08 021-09 023-08 023-11
17 13 18 17 17
024-00 02 02 02 078-82
15 30 30 30 12
07 080-00 080-08 080-24 08
28 24 13 25 30
08 13 187-00 18 19
2 10 15 15 30
19 20 21 22 23
5 13 22 17 22
243-00 24 24 252-02 252-08
10 30 16 10 10
259-11 25 25 26 274-08
28 30 22 16 12
27 27 300-00 300-00 300-08
30 5 30 21 16
300-45 304-00 30 30 30
11 28 30 30 30
30 312-00 312-00 315-00 31
28 30 8 18 30
31 320-00 321-01 321-09 32
1 11 11 25 30
32 32 32 33 34
30 30 1 19 30
34 354-00 35 35 36
9 10 30 2 19
370-00 370-05 372-08 37 38
21 18 11 29 30
38 395-00 395-00 395-01 395-01
15 30 2 30 18
395-08 399-81 399-82 39 39
15 14 10 30 18
400-00 400-01 40 40 41
15 14 30 11 30
41 430-08 430-08 430-09 431-31
11 30 11 19 30
・・・(省略)・・・
99 99 99 雑 雑
30 30 9 30 30
雑 雑
30 9
つまり、5桁のあとにおなじ頭2桁(のものが次に来るようにしたいのです。
どうやったら希望する形式に表示されますでしょうか。
長々と本当にすみません!!仕事で大変困っています。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
方針としては以下のものでしょう。
(1)A列に郵便番号、B列に個数 という形式に変換する。 (2)郵便番号でソート。 郵便番号は文字列として扱う ・02などの集約型?のものは、末尾に"A"を追加 ・昇順でソート ・置換で"A"を消去 (3)元の形式に戻します。
------- ちなみに、質問文に関する不明点。
(1) >1行目で、A列になります。 この文章の意味が不明。主語は何ですか?
(2) > 同じようにA列からF列まで同じような状態で郵便番号と合計数が入っています。 A列からE列ではないか。
(3) >(一番右端は通し番号です) これは説明のための便宜であって、ソートにも影響しないと考えてよいか。
(4) 02 30 02 30 02 30 02 8 と同じ郵便番号のものがあるが、これは何故か。 (ソートすれば、そのとおりの順序が保持されるので問題なかろうが、一応)
(5) 結果表は、空白行1行をはさむという理解でよいか。
# 私自身は今はコードを書く予定はないので、 # これはそちらでなんとでも修正してもらえば良いわけだが、 # 回答を付ける人のために確認のための質問をしておきましょう。
なお、こうした作業が入るのですから、一行に5個というのは適切ではないでしょう。 最後の最後に、必要に応じて変換すべきでしょうね。
(γ) 2015/08/22(土) 07:12
後学のため、教えてください。
>>このデータのままでA列を「値」降順。その後F列「値」昇順で並び変えると
この形のままで、これを実行すると、結局は元に戻るだけではないですか? 実際には、どんな操作で、「途中にある”02”が上にあがって来ません」は無視するとして 結果に(に近いもの)になるのでしょうか?
もう1つ。
個数行は数値でしょうけど、郵便番号行は【文字列】と考えていいですね。 つまり 02 は 2 という「数値」を表示形式で 02 にしているのではなく 「文字列」としての "02" なんですね?
(β) 2015/08/22(土) 08:13
"02" といったものが文字列だとして。
G1 : =IF(LEN(A1)=2,A1&"91",LEFT(A1,3)&0) G2 : =IF(A2="","",IF(MOD(COUNTA(A$1:A2),2),IF(LEN(A2)=2,A2&"91",LEFT(A2,3)&0),IF(LEN(A1)=2,A1&"91",LEFT(A1,3)&0)))
これをデータ最終行までフィルコピー
G列をCtrl/c -->そのまま値貼り付け
A:Gを選択して、G列昇順で並び替え。(数字に見えるところは数字として)
G列をクリア、下のほうの余分な行を削除(雑 が一番下においやられていますので、それは残す)
できあがりの2行単位に空白行を挿入するのも要件だとすれば、それは対応してませんが。
(β) 2015/08/22(土) 12:50
G1:=VALUE(IF(LEN(A1)>3,TEXT(LEFT(A1,3),"000"),LEFT(A1&"00",3))) G2:=IF(MOD(F2,5)=1,VALUE(IF(LEN(A2)>3,TEXT(LEFT(A2,3),"000"),LEFT(A2&"00",3))),G1) 以下、下にコピー G列を値貼り付け
G列基準で並べ替え
(マナ) 2015/08/22(土) 13:14
(マナ) 2015/08/22(土) 13:18
>※021-00が郵便番号の頭5桁です。1行目で、A列になります。]
タイトル行がなく、1行目からデータが入力されていると解釈します。
後記の「SortByZip」を実行する
<サンプル & 実行後結果>
行 ___A___ ___B___ ___C___ ___D___ __ E __ _F_ _G_ ___H___ ___I___ ___J___ ___K___ __ L __ 1 021-00 021-08 021-09 024-00 078-82 1 021-00 021-08 021-09 024-00 02 2 20 17 17 23 13 2 20 17 17 23 30 3 3 4 4 02 02 06 078-82 078-83 5 5 30 8 10 13 11 6 078-83 187-00 210-08 243-00 252-02 6 7 11 26 10 10 13 7 07 187-00 210-08 243-00 252-02 8 8 24 26 10 10 13 9 9 10 10 257-00 259-11 259-11 260-00 274-08 11 257-00 259-11 259-11 260-00 274-08 11 12 30 10 13 12 12 12 30 10 13 12 12 13 2 2 2 6 7 13 99 99 雑 雑 雑 14 30 30 8 10 24 14 30 15 30 30 30 15 99 99 雑 雑 雑 15 16 30 15 30 30 30 16 雑 17 17 28 18 雑 18 19 28 19
'VBA Sub sortByZip() Dim Vals Dim NN As Long, Col As Long, rowOut As Long Dim isZipRow As Boolean Dim stdList As Object Dim keyToSort
Set stdList = CreateObject("System.Collections.SortedList") Vals = Range("A1", Cells(Rows.Count, "F").End(xlUp).Offset(, -1)).Value
For NN = 1 To UBound(Vals) isZipRow = False For Col = 1 To 5 If Vals(NN, Col) <> "" Then isZipRow = True Exit For End If Next Col
If isZipRow Then For Col = 1 To 5 If Vals(NN, Col) <> "" Then keyToSort = Vals(NN, Col) If Len(keyToSort) < 5 Then keyToSort = Application.Text(keyToSort, "00") & "A" Else keyToSort = Application.Text(keyToSort, "00") & "B" End If stdList.Add keyToSort & "#" & Application.Text(NN, "00000") & Col, Vals(NN + 1, Col) End If Next Col NN = NN + 1 '次行はスキップ End If Next
Rem 表示 Columns("H:L").Clear rowOut = 1 Col = 7
For NN = 0 To stdList.Count - 1 Col = Col + 1 keyToSort = stdList.getkey(NN) Cells(rowOut, Col).NumberFormat = "@" Cells(rowOut, Col).Value = Left(keyToSort, InStr(keyToSort, "#") - 2) Cells(rowOut + 1, Col).Value = stdList.getbyindex(NN) If Col = 12 Then Col = 7 rowOut = rowOut + 3 '次行をスキップ End If Next
stdList.Clear End Sub
(半平太) 2015/08/22(土) 17:52
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.