東京都神津島村のQ&A

  • 締切済

    質問市郡別の集計方法について Access

    • 2008/2/5
    • sskj

    市郡区別に集計したいのですが何かよい方法はないでしょうか?
    地方公共団体コードと住所、郵便番号があります。
    県集計に関してはコードの県の部分を使うだけでよいのですが、
    市郡区別(神津島村や八丈町などの市郡区がない地区を含めた、)
    集計はどのようにすればよいでしょうか?

  • 回答

    • 2008/2/5
    • noname#140971

    Q、集計はどのようにすればよいでしょうか?
    A、どうするつもりですか?

    質問を勝ってに解釈し、市区郡外に合致する住所をカウントする手法をもって回答とします。

    住所録:

    ID__住所
    1___東京都神津島村904番地
    2___東京都八丈島八丈町大賀郷23451
    3___東京都八丈島小郡町121

    クエリ1:
    市区郡外カウント
    2

    SELECT Count(*) AS 市区郡外カウント
    FROM 住所録
    WHERE INSTR(1,[住所],'市',1)=0 And INSTR(1,[住所],'区',1)=0 And INSTR(1,[住所],'郡',1)=0;

    クエリ2:
    市区郡外カウント
    3

    SELECT Count(*) AS 市区郡外カウント
    FROM 住所録
    WHERE INSTR(1,BX([住所]),'市',1)=0 And INSTR(1,BX([住所]),'区',1)=0 And INSTR(1,BX([住所]),'郡',1)=0;

    クエリ1と2では集計数が異なっています。
    その差は、Instr関数でテストする前に事前変換しているか否かです。
    '市'、'区'、'郡'が本来の意味で使われている住所だけであれば BX関数は不要です。
    しかし、そのように都合のよい住所ばかりではないです。
    そういう事で、どうしてもBX関数の類が必要だと思います。

    Public Function BX(ByVal TEXT As String) As String
      TEXT = Replace(TEXT, "郡山郡", "01_こおりやま郡")
      TEXT = Replace(TEXT, "市川市八幡", "市川市02_八幡町")
      TEXT = Replace(TEXT, "市川市", "03_いちかわ市")
      TEXT = Replace(TEXT, "町田市", "04_まちだ市")
      TEXT = Replace(TEXT, "小郡町", "05_おごおり町")
      BX = TEXT
    End Function

    なお、この'市'、'区'、'郡'が本来の意味で使われていない住所一覧はテキストファイルで定義しておくのがお勧め。
    関数の中に変換データを埋め込むのはマジックナンバーの埋め込みと言われる最悪の手法。
    しかも、テキストファイル化すればテキストファイルを追加・変更するだけで徐々に万全の仕組みになります。
    100件やそこらですと瞬時に読み込んで事前変換できます。
    そういう方向性を前提とした回答です。

    続きを読む

2/24(土) 神津島村の防災情報

雪質・積雪量・滑走情報・全国積雪ランキングなど 天気&ゲレンデ情報2017-2018
AIとチャットで気分にぴったりの旅選び