Skip to main content
Announcements
NEW Customer Portal: Initial launch will improve how you submit Support Cases. FIND OUT MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
kyoden_naoyuki
Contributor III
Contributor III

住所から市区町村を抜粋する方法

住所から市区町村だけを抜粋したいと考えてます。

excelであればiserror関数とfind関数を用いて、

C2に市区町村以下の住所がある場合

=IF(ISERROR(FIND("市",C2))=FALSE,LEFT(C2,FIND("市",C2)),IF(ISERROR(FIND("区",C2))=FALSE,LEFT(C2,FIND("区",C2)),IF(ISERROR(FIND("町",C2))=FALSE,LEFT(C2,FIND("町",C2)),IF(ISERROR(FIND("村",C2))=FALSE,LEFT(C2,FIND("村",C2)),""))))

とすれば、

一部エラーが出ますが、ほぼ抽出できるのですが、

同じような関数をQlikでも組みたいのです。

ただし、iserror関数とfind関数がQlikSenseにないので、

他の方法をどなたかご存知でしたら、

ご教示いただけると幸いです。

QlikSenseを最近利用し始めたばかりで、

不明点が多々あるので、

よろしくお願いいたします。

Labels (1)
6 Replies
kentaroWakamatsu
Creator II
Creator II

エクセルの内容なら、以下の数式で大丈夫だと思います。

 Mid(住所,1,FindOneOf(住所,'市区町村',1))

市区町村の文字が複数が混在している場合に、後ろまで取得する時は

 Mid(住所,1,FindOneOf(住所,'市区町村',-1))

でいけます。

kyoden_naoyuki
Contributor III
Contributor III
Author

wakamatsu様

ご回答ありがとうございます。

Mid(住所,1,FindOneOf(住所,'市区町村',1))

で無事できました!

ちなみに、可能であればでよいのですが、

市川市や町田市等、市区町村に市区町村の文字が入っているものは

どのようにすれば、正式名で表示できますでしょうか?

kentaroWakamatsu
Creator II
Creator II

そういった場合があると思って作成していたのが

 Mid(住所,1,FindOneOf(住所,'市区町村',-1))

の方です(マイナスをつけると後ろからの検索になります)が、

これも'町’の後ろに、同様の文字が入るケースはありますね。

正確にとろうとすると、ネットなどで市区町村のリストを取得して

あてにいくしかないですね。

ただこの場合は、元の住所情報にきちんと都道府県情報がある事と、

市区町村リストに記載のある漢字と同じ文字で、住所が作成されて

いる事が重要です。

文字が違う場合、さらに精製リストなどの辞書を用意してReplace関数で

精製するといった作業が必用になってきます。


サンプル添付しておきます。

kentaroWakamatsu
Creator II
Creator II

Senceを利用されていたんですね。

あまりSenceは詳しくないですが、[データ接続] - [接続の新規作成]で、

 URL:http://www.soumu.go.jp/main_content/000562730.xls

    名前:市区町村リスト

と登録しておいてから、下記を [データロードエディタ] へ貼り付けると、同様のデータが作成されると思います。

//::::::::  スクリプト  ::::::::::::

WORK1:

LOAD * INLINE [

    住所

    東京都町田市1-1-2

    千葉県市川市町田マンション202号室   

];

Left Join

LOAD

    "都道府県名

(漢字)"&"市区町村名

(漢字)" as 検索キー,

    "市区町村名

(漢字)" as 市区町村名

FROM [lib://市区町村リスト]

(biff, embedded labels, table is H28.10.10現在の団体$);

WORK2:

LOAD 住所,

     検索キー,

     Index(住所,検索キー) as 検索結果

Resident WORK1

Where Len(市区町村名)>0;

DROP Table WORK1;

Data:

LOAD 住所,

     Left(住所,Index(住所,検索キー)+Len(検索キー)-1) as 精製結果

Resident WORK2

Where 検索結果>0;

DROP Table WORK2;

kyoden_naoyuki
Contributor III
Contributor III
Author

wakamatsu様


返答が遅くなり申し訳ございません。


仰る通りSenseを利用しております。


こちらのスクリプトについて質問なのですが、


//::::::::  スクリプト  ::::::::::::

WORK1:

LOAD * INLINE [

    住所

    東京都町田市1-1-2

    千葉県市川市町田マンション202号室  

];

というのは読み込む住所に他の市区町村の漢字を含むたとえば市原市等あった場合は、

上記の町田市や市川市のようにスクリプトを記入する必要があるということでしょうか?

kentaroWakamatsu
Creator II
Creator II

いえ、WORK1の部分は、'市'や'町'が複数混在しているデータサンプルとして、作っただけです。

実際には、住所リストは、データベースかエクセルでお持ちだと思うので、下記の部分をお持ちのデータベースへ差し換えればそのまま利用できます。


【変更箇所】

LOAD * INLINE [

    住所

    東京都町田市1-1-2

    千葉県市川市町田マンション202号室 

];

サンプルファイル添付しておきます。