[[20150821234708]] 『郵便番号の件数表を作りたいのですが』(せいぶれむ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『郵便番号の件数表を作りたいのですが』(せいぶれむ)

以下のようなデータがあります。
(一番右端は通し番号です)

※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.