ここから質問投稿すると、最大10000ポイント当たる!!!! >>

前任者が作成したAccessをメンテナンスしています。
住所のカテゴリーが3段階で作られています。
住所1.都道府県
住所2.市町村から番地まで
住所3.建物名

「これのフォームの住所2と住所3を一緒にして欲しい。
できれば住所1も一緒にして、ひとつのボックスにして欲しい」と、使用者から言われました。
ひとつのボックスにしたほうがフォーム上スッキリとして見やすいから・・・というのが要望の理由のようです。

全てを一緒にすると抽出の段階でやりにくくなるのではと思って調べているところです。
例えば、都道府県別の抽出等。

住所を分割することによってのメリットとデメリットはどのようなことになるでしょうか?

初歩的な質問だと思われるので、このようなことまで質問してすみません。
どなたかご回答いただける方がいらっしゃいましたら教えてください。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

<分割のメリット>


 ○検索が早くなる
  ・都道府県での先頭一致/完全一致の検索、及び市町村での先頭一致検索に対して、
   各フィールドに設定したIndexを使用できるため、曖昧検索よりも早い
  ・1フィールドの総文字数が減るため、曖昧検索自体も早くなる(はず)

<分割のデメリット>
 ○入力時の打鍵数の増加(→コントロールの移動分:コンボボックスの自動拡張などで、
   ある程度の軽減は可能)
 ○フォームのヘッダなどに検索条件の入力欄を設ける場合、通常はフィールドごとに
   用意することになるので、プログラムを組む上ではやや煩雑


・・・といったところではないでしょうか。
(1フィールドに保存した場合のメリット・デメリットは、上記の内容が逆転)

素人考えですが、使用者が検索速度よりも、1コントロールで入力/参照が可能になることを
重視するのであれば、そうしてしまっても致命的なデメリットはないように思えます。
(なお、ファイルサイズに関しては、Indexが増える分と、各フィールド(特に住所2・3)で文字数
 の余裕を双方で見る必要が生じる分、分割した方が大きくなると思いますが、これも大きな
 問題にはならないかと)
    • good
    • 0
この回答へのお礼

いつもわかりやすい回答をいただいて本当に助かります。
都道府県とそれ以外の住所の2分割にさせることにしました。
ありがとうございました。

お礼日時:2008/03/17 10:03

メリットデメリットはご自分で書いておられるじゃないですか



ひとつにしてあれば例えば都道府県で集計したいときに一手間必要
分割してあればまとめて表示するときに一手間必要
というだけのことです

都道府県別に集計したりしないのならユーザーの言うとおりでいいんじゃないですか
    • good
    • 0
この回答へのお礼

都道府県別に集計することはよくあるので、都道府県とそれ以外の住所の二分割にさせることにしました。
ありがとうございました。

お礼日時:2008/03/17 10:06

Form_Address:



***************************************************************

Zip_____________[101-1111]
Address1_____[東京都_____]
Address2_____[文京区_____]
Address3_____[太田町112番地______________]

***************************************************************
    • good
    • 0

Form_Customer:



***************************************************************

ID:_____________[____1]
KName________[鈴木 一郎________]
Zip_____________[101-1111]
Address_______[東京都文京区太田町112番地______________]
Address1_____[東京都_____] <--------------非表示
Address2_____[文京区_____] <--------------非表示
Address3_____[太田町112番地______________] <-非表示

[住所更新]

***************************************************************

Address.コントロールソース=[Address1] & [Address2] & [Address3]

Private Sub コマンド_住所更新_Click()
On Error Resume Next
  DoCmd.OpenForm "Address", , "[ID]=" & Me![ID]
End Sub

Form_Address:

***************************************************************

Zip_____________[101-1111]
Address_______[東京都文京区太田町112番地______________]
Address1_____[東京都_____]
Address2_____[文京区_____]
Address3_____[太田町112番地______________]

***************************************************************

見かけ上だけですとは、上述のようにすればOKです。
が、[住所更新]コマンドボタンと更新用フォームを用意して更新作業をサポートする必要があるでしょう。

一旦、住所を統合してから分割するのは至難。
また、ユーザも代替わりすれば意見も異なるでしょう。
一々、それらに追随して基本設計を変更していたらテーブルはグチャグチャに。
テーブル設計の基本は譲らずに妥協点を探るのが宜しいと思います。
    • good
    • 0

う~ん?


私も分割するほうが良いと思います
表示上の問題であれば、結合は簡単に出来ますから、問題ありませんが・・・分割するとすれば、膨大な処理の上に別途DBを必要とします

しかし、質問の様に、
> 住所1.都道府県
> 住所2.市町村から番地まで
> 住所3.建物名
だけの分割では、例えば、郵便番号を割り当て等、活用する範囲が狭いため、都道府県別に抽出くらいでしか用途的に使い様が無いと言う、問題があるような気がします

都道府県ぐらいなら、モジュールで分割しても問題ないような気がします
その先の、区市郡、町村、番地の分割の処理を考えると、モジュールの労力が酷いことになります

あと、入力上の問題も多々あります
1つにすると、都道府県から入力したものと、区市郡から入力したもの
(政令指定都市だと、都道府県を書かないこともあるため・・・)

但し、使用用途上問題なければ、いいんじゃないで終わるんですがね

表示を1テキストボックス、入力時にポップアップで複数のコンボボックス等で、うまく調整して見たほうが良いと思いますけどね
私の場合、国土地理院の住所コードで保管、入力はコンボボックスで絞込み、印刷・表示などは、1テキストボックスと言う感じです
    • good
    • 0
この回答へのお礼

ニ分割で食い止めることにしました。
ありがとうございました。

お礼日時:2008/03/17 10:05

>「できれば住所1も一緒にして、ひとつのボックスにして欲しい」とは?



見かけ上、それともテーブル設計として?

見かけ上なら、住所1、2、3を非表示にして「ハイ!できました!」もありかなと思います。

この回答への補足

見かけ上です。
使用者はフォーム画面での要望を出しています。
パッと見て一目でわかる画面を望んでいるのです。
住所が何故、3フィールドに分かれるのか理解できないのです。
テーブル設計などは頭の中にありません。

>住所1、2、3を非表示にして「ハイ!できました!」もありかなと思います。

この方法をとると住所全てが表示されなくなってしまうと思うのですが、そういうことではないのでしょうか?

補足日時:2008/02/21 14:51
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS 住所の分割について

ACCESS初心者です。

ACCESS2003を使用しています。

スペースで区切られた住所を分割し、表示しようとしているのですが行き詰まっています。
皆さんのお力をお借りしたく質問させていただきます。

現状は次の通りです。

テーブルのフィールドに2通りの住所が混在しています。

【パターン1】 ○○○○○ △△△△ とマンション名などがスペースで区切られたもの。
【パターン2】 ○○○○○ とマンション名などがないもの

クエリを使って「住所1」と「住所2」に分割しようと思い、演算フィールドにそれぞれ下記のように記入をしました。

住所1: Left([住所],InStr(1,[住所]," ")-1)
住所2: Mid([住所],InStr(1,[住所]," ")+1)

上記のように設定をしましたが、「住所1」と「住所2」にはそれぞれ下記の通り表示をされます。

【パターン1】 「住所1」に○○○○、「住所2」に△△△△ と正常に表示
【パターン2】 「住所1」には#エラー、「住所2」に○○○○ と表示

いろいろと試行錯誤しましたが、どうしてもうまくいきません。
VBAを使ったことがないので、出来れば使わずに設定できる方法をご教示いただければと思います。

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

ACCESS初心者です。

ACCESS2003を使用しています。

スペースで区切られた住所を分割し、表示しようとしているのですが行き詰まっています。
皆さんのお力をお借りしたく質問させていただきます。

現状は次の通りです。

テーブルのフィールドに2通りの住所が混在しています。

【パターン1】 ○○○○○ △△△△ とマンション名などがスペースで区切られたもの。
【パターン2】 ○○○○○ とマンション名などがないもの

クエリを使って「住所1」と「住所2」に分割しようと思い、演算フィールドにそれぞれ下記の...続きを読む

Aベストアンサー

> 住所1: Left([住所],InStr(1,[住所]," ")-1)
> 住所2: Mid([住所],InStr(1,[住所]," ")+1)



住所1: Left([住所],InStr(1,[住所] & " "," ")-1)
住所2: Mid([住所],InStr(1,[住所] & " "," ")+1)


とするとどうなりますか?
つまり、InStr する時には、必ず " " (空白)が存在するようにします。

※ 上記は LEFT のエラーをなくすもので、
Mid の場合は文字数以降のところから全部・・・・しても、エラーにはならないようです。


※ 不都合あれば修正してください。

Q市区町村と番地を分けたいのですが。。。

住所データがあります。「××市○○町1-2-3」。
ここで、「××市○○町」と「1-2-3」を別フィールドに分けたいと思っています。ACCESSまたはExcelのVBAまたは更新クエリ、文字列関数等で行う場合、どのようにすればよいか教えて下さい。なお、「××市○○町」と「1-2-3」の間には空白はありません。

Aベストアンサー

 
自前で文字列のマッチング等を行わなくても、Office (97以上?)にバンドルされている、「MSYubin7.dll」を使用すれば可能です。

サンプルコードですが、Accessで、以下の手順を踏み、

(1) レポートの新規作成ボタンを押下。
(2) はがきウィザードを選択。
(3) レポートを作成。

作成されたレポートのクラスモジュール内のAPI宣言部と「Sub DevideAddress」を見れば参考になると思います。

単に「左から最初の数字の位置で文字列を切り出す」(No.2のコメント参照)のではなく、都道府県名、市区町村名、町名、字名すべてを対応辞書と照合してマッチングできるようです。したがって、No.2のコメントで問題点として指摘した「漢数字で番地が記載されたデータ」にも対応できます。

問題点は、OfficeのヘルプにもMSDNにもドキュメントらしいドキュメントがないことです。
(上記ウィザードで生成されたコードにもコメントは皆無です)

もともと、参考URLの製品の機能の一部をMicrosoftにOEM提供したもので、Office製品の、いわば「おまけ」程度の位置付けですので、きちんとしたドキュメント、細かな機能が必要であれば、正規の製品版を購入した方がよいかもしれません。
(一度限りの単発仕事なら、そのためだけに買うのはちょっともったいない感じがしますが・・・)
 

参考URL:http://www.adv.co.jp/products/yu7v2/default.htm

 
自前で文字列のマッチング等を行わなくても、Office (97以上?)にバンドルされている、「MSYubin7.dll」を使用すれば可能です。

サンプルコードですが、Accessで、以下の手順を踏み、

(1) レポートの新規作成ボタンを押下。
(2) はがきウィザードを選択。
(3) レポートを作成。

作成されたレポートのクラスモジュール内のAPI宣言部と「Sub DevideAddress」を見れば参考になると思います。

単に「左から最初の数字の位置で文字列を切り出す」(No.2のコメント参照)のではなく、都道府県名、市区町...続きを読む

QExcelで住所を2つ(町名迄と番地以降)に分けるには?

お世話になります。
Winxp、Excel2003を使用しています。
以下のような住所データがあります。
これを、町名迄と番地以降の2つのセルに分けるには、どうすれば良いでしょうか?よろしくお願いします。

セルA1に東京都小平市東町5-8-15
      ↓  
セルA2には東京都小平市東町
セルA3には5-8-15
としたい。

Aベストアンサー

こんにちは~

A2セルに
=LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))-1)

A3セルに
=SUBSTITUTE(A1,A2,"")

と入れてみてください。

QAccessの処理速度を速めるためにテーブルとそれ以外を分割してもああまり速くならないのですが・・・

Access2003を使用しています。
メンテナンス後保存をしたり、検索をかけたときとても時間がかかるので、データベースからテーブルだけを切り離す方法を試みてみようかと考えています。
テーブルとそれ以外のデータベースオブジェクトを分割する方法です。
試しにコピーをとったファイルで行ってみましたがあまり速度が速まったように感じません。
参考書を読むと、「大量のデータを蓄積するデータベースに威力を発揮する」と書いてあり、見本は300Mバイトになっています。
私がメンテナンスをかけているファイルは65MB程度です。
これぐらいの大きさだと分割する効力は低いのでしょうか?
他の方法を試みたほうがいいのでしょうか?
ちなみにCPUはあまり高くありません。
どなたかこの方面にお詳しい方がいらっしゃいましたらご教示ください。
よろしくお願いいたします。

Aベストアンサー

>MDBファイルを全部上書きすることになっているために時間がかかっているのかもしれません。
「なっているため」という言葉遣いは正しくなかったかもしれません。
「なるのかもしれないので」位の意味でした。 申し訳ありません。

No6の回答は憶測で書いています。(何の根拠もありません。)
コンピュータやプログラミングの専門家でもありませんし、
私のアクセスの経験もかわいいものですので、(97から)
「こう考える素人がいる」というくらいにとってください。

ちょっと考えてみましたが、mdbのデータファイルの構造は以下のようになっているそうで、
http://www.mrdb.ne.jp/technic/se_guide/d_fkouzo.htm
最適化を行うと
・データ部分のブロックが減る
・インデックスによる順番付けがなされる
ので検索に対するパフォーマンスがあがるということには異論はないと思います。

問題はフォームやレポートをいかに保存しているかですが、
やはり決まった単位のブロックを用意して、オブジェクトを書き連ねているのかなと思います。 
(前言を撤回することになりますが)そうだとすると、データ部分を切り離すことと
フォームのサイズを小さくすることは関連性がないということになり、
フォームをセーブするときの時間も、データを切り離したところでフォームを最適化しないと、
あまり変わらないということにもなりそうです。
データ部分のみが最適化されたmdbと、すべてのオブジェクトが
最適化されたものの保存時間を比べてみればヒントはつかめそうですが、、、
そのような実験にあまり意義を感じません。(そこまでアクセスを愛していません。) 

いろんなDBがありますが利用する際は定期的に最適化を行わないといけないのではないかと思います。
アクセスも例外ではないということです。

>テーブルは必ず別mdbにして、「閉じるときに最適化」していますので
これを行っていれば、保存に関してこれ以上の効率化は難しいと思います。(コーディングを変えない限り)
逆にこの状況で何らかの問題があるなら、
・データ構造は適正か?
・データにどうアクセスするか?
・コードをどう記述するか?
・ハードウエア(通信環境含む)は適正か?
これと共に、
・DBは適正か?
を診断しなくてはいけないと思います。

質問者さんに対してのアドバイスは、
・実運用中のものを開発する際は、別ファイル(コピー)を作りそちらに手を加える。(実データで開発を行うことは望ましくないと思う。)
・手を加えたものをリリースする前に最適化をする。
・実運用中のものには定期的(期間はdbの更新頻度やつくりにもよる)に最適化を行う。
・データに関しては、何らかの形で定期的にバックアップをとる。
以上のような行為が必要で、
それを怠ると、いつかきっと痛い目にあう(かもしれません。)
データとその他の部分を切り離すと、
・データファイルが破損する可能性が低くなる。
・上記のようなメンテナンスが行いやすくなる。
・他のdbへの移行がやりやすくなる。
というメリットがあります。

>MDBファイルを全部上書きすることになっているために時間がかかっているのかもしれません。
「なっているため」という言葉遣いは正しくなかったかもしれません。
「なるのかもしれないので」位の意味でした。 申し訳ありません。

No6の回答は憶測で書いています。(何の根拠もありません。)
コンピュータやプログラミングの専門家でもありませんし、
私のアクセスの経験もかわいいものですので、(97から)
「こう考える素人がいる」というくらいにとってください。

ちょっと考えてみましたが、md...続きを読む

Q住所のセル分割について

お尋ねします
A1のセル→**山田町1-1-1山田アパート**
のように番地とアパート・マンション名が続けて入っているセルがいくつもあります。
これを
B1→**山田町1-1-1
C1→山田アパート**
のように2つのセルに分割する方法はありませんでしょうか。
番地とアパート名の間にはなにもありません。
また番地までの住所の長さはまちまちです。
よろしくお願いいたします。

Aベストアンサー

非常に微妙な論理を使ってますが、下記を実行して、ほぼうまく行けば使って見てください。
(1)テストとして、100行分のぐらいの住所を別シートのA列にコピーする。そして下記を実行し、B、C列に分離された内容が、圧倒的行数で正しいかチェック。不適当が少数なら手で修正する。
ロジックは文字部の塊が終わり、数字かハイフンが出現し、再び文字の現れた個所以下を気付・アパートとする。
Sub test01()
For i = 1 To 100 '1000行までなら1000に変える
s = Cells(i, "A") '住所のある列、C列なら"C"
For j = 1 To 30 '30は1000人の住所全体の最大文字数
c = Mid(s, j, 1) '住所のj番目文字を問題にする
Select Case c
Case Is = IsNumeric(c) '数字か
flg = 1
Case "0" 'ゼロか
Case "-" 'ハイフンか
Case "-" 'ハイフンか
Case Else
If flg = 1 Then
Cells(i, "B") = Mid(s, 1, j - 1) '分離後住所本体部を置く列
Cells(i, "C") = Mid(s, j, 10) '気付アパート部を置く列
flg = 0
GoTo p01
Else
flg = 0
End If
End Select
Next j
p01:
Next i
End Sub
(2)旨くいく条件
町字までの住所本体には数字や-がないとする.
丁・番・号には数字か-しかないものとする。1丁目とか2番地などの表現がないこと。
VBAの実行はシートでALT+F11
VBE画面で挿入(I)、標準モジュール(M)で出てくる画面に貼りつけ、F5キーで実行。
(テスト)
静岡市山田1-2山田マンション1234
仙台市新町1-2-3ABCアパート
大手町2-3-4富士ビル3階
大阪市中央区大手町1-20沖縄
大阪市北区駅前1-21希望1-234
東京都千代田区大手町3-3-3日本ビル123
埼玉県さいたま市宮前2-3-4 金剛333
埼玉県さいたま市宮前2-3-4
C列は
山田マンション123
ABCアパート
富士ビル3階
沖縄
希望1-234
日本ビル123
 金剛333
となりました。

非常に微妙な論理を使ってますが、下記を実行して、ほぼうまく行けば使って見てください。
(1)テストとして、100行分のぐらいの住所を別シートのA列にコピーする。そして下記を実行し、B、C列に分離された内容が、圧倒的行数で正しいかチェック。不適当が少数なら手で修正する。
ロジックは文字部の塊が終わり、数字かハイフンが出現し、再び文字の現れた個所以下を気付・アパートとする。
Sub test01()
For i = 1 To 100 '1000行までなら1000に変える
s = Cells(i, "A") '住所のある列、C列な...続きを読む

QAccess フォームのテキストボックスに半角英字のみで入力する設定は

IME入力モードをテーブル・フォームともオフにしたのですがひらがな入力モードになってしまいます。
フォームのテキストボックスに半角英字のみで入力する設定としてプロパティのIME入力モードをオフにするやり方自体が間違っているのでしょうか。
それともATOKを使っているなど利用するパソコン側の問題でしょうか

Aベストアンサー

IME入力モードを「使用不可」にしましょう。

QAccessの最初にメニュー画面を出したい

初心者ながら、Accessを使って商品管理をしております。今度、売上げ管理と仕入れ先管理なども作成していく予定でおります。
そこで、Accessのファイルを開いた時点で、商品管理メニュー、売上管理メニュー…といった感じで、最初に見たい項目を選択できるようにしたいのですが、VBA等を使っているのでしょうか?
せっかく作るので、出来る限り使いやすく、見やすくしたいのです。私が持っている本には、それらに関する記述が見あたりません。
ネットを検索したのですが、どうも的はずれな検索をしているのか見つかりません。
どなたか、参考HPでも構いません、基本となる作成方法をご教授願えないでしょうか?
宜しくお願い申し上げます。

Aベストアンサー

No.1の方の回答の方法と違って応用はききませんが、
その分シンプルな方法として・・・

1)メニューで「ツール(T)→起動時の設定(U)」と選択
2)表示される「起動時の設定」ダイアログの右上にある、
 「フォーム/ページの表示(O)」で、最初に表示させたい
 フォームを指定

以上でOKです。

QAccessで生年月日から現在の年齢を求めるには?

Access2002を使用しています。
生年月日のフィールドに「1965/05/01」を入力しているとします。
その場合、現在の年齢フィールドに今日現在の年齢の「41歳」と出すようにするにはどういった式をどこに入れればよいでしょうか?

また、現在の年齢と何ヶ月かまで求めることは出来ますか?
例えば上記の例ですと、「41歳3ヶ月」と。
勿論、何ヶ月というフィールドは別に作ってもOKです。

どうぞよろしくお願い致します。

Aベストアンサー

>すようにするにはどういった式をどこに入れればよいでしょうか?
下の式を出したいところに書きます
年齢: DateDiff("yyyy",[誕生日],Date())+(Format([誕生日],"mmdd")>Format(Date(),"mmdd")) & "才"

>年齢と何ヶ月かまで求めることは出来ますか?
(DateDiff("m",[誕生日],Date())+(Format([誕生日],"dd")>Format(Date(),"dd")))\12 & "才" & (DateDiff("m",[誕生日],Date())+(Format([誕生日],"dd")>Format(Date(),"dd"))) Mod 12 & "ヶ月"

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

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

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

Q住所録からマンション名以下を別セルへ

住所が一つのセルに入っているものを
マンション名、もしくはなんとかハイツ系、なんとか荘系、
とはいってるものは別セルに表示したいのです。


A1 東京都○○区淡路町2-1-11光マンション222
A2 大阪府○○区外井場3-1-1
A3 広島県○○区草薙場5-3-1 水蔵荘20号

この場合
B1「東京都○○区淡路町2-1-11」別セルC1にて「光マンション222」
B2 「大阪府○○区外井場3-1-1」でOK
B3 「広島県○○区草薙場5-3-1」別セルC3にて「水蔵荘20号」

となるようにするためにはどしたらいいんでしょうか?

住所の全角数字はすべて半角数字には置換しました。

可能かなと思える検索条件は
マンション前には半角の"1,2,3,4,5,6,7,8,9,0,半角スペース"
があり、その後は全角の文字でマンション名がある
という事なんです。

つまり、最後の半角の後に全角の文字があるものはという事なんで
大丈夫だなと思っていたつもりだったのですが

よく考えたら、マンションの最後の部屋番号も半角文字だ。。。。

さらに問題はマンション名が半角カタカナのものもある。
※ただ、これについては最悪、置換で全角に変えようかなとも思います。
(その前に半角カナを全角カナに変える関数ってあるんですか?)

さて、これらの条件でマンション名以降だけを別セルにすることできるのでしょうか?
もしわからなければ、ウン万行のデータを手作業で・・・行わないといけないのです・・・・・。

ぜひ、よろしくお願いいたします。

住所が一つのセルに入っているものを
マンション名、もしくはなんとかハイツ系、なんとか荘系、
とはいってるものは別セルに表示したいのです。


A1 東京都○○区淡路町2-1-11光マンション222
A2 大阪府○○区外井場3-1-1
A3 広島県○○区草薙場5-3-1 水蔵荘20号

この場合
B1「東京都○○区淡路町2-1-11」別セルC1にて「光マンション222」
B2 「大阪府○○区外井場3-1-1」でOK
B3 「広島県○○区草薙場5-3-1」別セルC3にて「水蔵荘20号」

となるようにするためにはどしたらいいんでしょうか?

住所の全...続きを読む

Aベストアンサー

#01です。
少しだけマクロを変えました。「半角数字と全角カナ」「半角数字と空白」も区切りと考えるようにしています

>そこでとまってしまってます。
これを前回説明した場所に貼り付けたら、VBE画面は閉じてしまってかまいません。ワークシート画面に戻って適当なセルに、たとえば
 =GetSep(A1)
のように式を入れてみてください。ブックを保存すればマクロも一緒に保存されますので、保存を意識する必要はありません。

私は
 B1の式は  =LEFT(A1,getsep(A1))
 C1の式は  =TRIM(RIGHT(A1,LEN(A1)-getsep(A1)))
にしています。

Function GetSep(ByVal trg As Range) As Integer
Dim RE, mchItems
Dim strPattern As String
Dim idx As Integer
If trg <> "" Then
  Set RE = CreateObject("VBScript.RegExp")
  strPattern = "-[0-9]+|[0-9][ァ-ン]|[0-9] |[0-9] "
  With RE
    .Pattern = strPattern
    .IgnoreCase = True
    .Global = True
    Set mchItems = .Execute(trg.Value)
    If mchItems.Count > 0 Then
      GetSep = mchItems.Item(mchItems.Count - 1).FirstIndex _
          + mchItems.Item(mchItems.Count - 1).Length
    Else
      GetSep = Len(trg.Value)
    End If
  End With
  Set RE = Nothing
End If
End Function

結果はこうなりました。到底「完全なレベル」にはなりません。
ただ住所の末尾 1-12-5 とマンション名の間に空白を入れると分離できますので、うまくいかないデータはそのように修正してください

B列                         C列
○○府○○市○○丘1-12-5          セ○○○○泉丘101号
○○県○○市○○野区東○○台1-3-3      佐藤ハイツ2N
○○都○○区大○○町3-22-21         ○○○○園403
○○都○○区○○谷3-42-14          ス○○山101
○○県○○市○○町1234-1           ○○○○エストe502
○○県○○市○○区○○町1-20         コーポ○○102
○○県○○市○○西2-3-2            グリーン○○西101
○○県○○市○○郷4321-4           サニー○○204
○○県○○市○○区○○町5472          ○○備前303
○○県○○市○○町方五23-4           スミエ-ルミクラシ05号
○○府○○市○○区○○町鷲見99パ        ルテオン東山南209 → NG(なんでかなぁ)
○○府○○府○○市○○○○台3丁目4番129-101   号 → NG(ルール通り)
○○県○○県○○市○○○○12-2135  
○○府○○市○○町5-12             坂本ハイツ3-B
○○県○○市○○町821エステートブリッツンC-101  → NG(ルール通り)

なお#02式はすごいですね。ちょっと考えましたが動く理由がまだ理解できません。いつもながらmaron--5さんの作る関数式には感心します。

#01です。
少しだけマクロを変えました。「半角数字と全角カナ」「半角数字と空白」も区切りと考えるようにしています

>そこでとまってしまってます。
これを前回説明した場所に貼り付けたら、VBE画面は閉じてしまってかまいません。ワークシート画面に戻って適当なセルに、たとえば
 =GetSep(A1)
のように式を入れてみてください。ブックを保存すればマクロも一緒に保存されますので、保存を意識する必要はありません。

私は
 B1の式は  =LEFT(A1,getsep(A1))
 C1の式は  =TRIM(RIGHT...続きを読む


人気Q&Aランキング