• ベストアンサー

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

住所が一つのセルに入っているものを マンション名、もしくはなんとかハイツ系、なんとか荘系、 とはいってるものは別セルに表示したいのです。 例 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,半角スペース" があり、その後は全角の文字でマンション名がある という事なんです。 つまり、最後の半角の後に全角の文字があるものはという事なんで 大丈夫だなと思っていたつもりだったのですが よく考えたら、マンションの最後の部屋番号も半角文字だ。。。。 さらに問題はマンション名が半角カタカナのものもある。 ※ただ、これについては最悪、置換で全角に変えようかなとも思います。 (その前に半角カナを全角カナに変える関数ってあるんですか?) さて、これらの条件でマンション名以降だけを別セルにすることできるのでしょうか? もしわからなければ、ウン万行のデータを手作業で・・・行わないといけないのです・・・・・。 ぜひ、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#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さんの作る関数式には感心します。

deepimpact
質問者

お礼

すごいです。 ありがとうございました。

その他の回答 (3)

noname#176215
noname#176215
回答No.3

この手のものに汎用性を期待するのは 時間の無駄だと思います。 ある程度は 目で確認してエラーチェックした方がいいと思います。 条件を増やし過ぎると 処理が重くて使い物にならなくなりますよ? ■B1セル:作業列(番号以下) =REPLACE(A1,1,MIN(FIND({1,2,3,4,5,6,7,8,9,0, "1","2","3","4","5","6","7","8","9","0"}, A1&"12354678901234567890"))-1,"") ■C1セル:住所 =TRIM(SUBSTITUTE(A1,D1,"")) ■D2セル:ビル・マンション名 =TRIM(REPLACE(B1,1,MIN(INDEX((ISERR(-MID(B1&".",COLUMN(1:1),1)) +ISNUMBER(-MID(B1,COLUMN(1:1)+1,1))+ISNUMBER(FIND(MID(B1,COLUMN(1:1)+1,1), "--丁番号"))+(MID(B1,COLUMN(1:1)+2,1)="."))*256+COLUMN(1:1),0)),"")) お勧めする訳ではありません。興味本位の実験みたいなもんです。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

◆関数で B1=LEFT(A1,LOOKUP(1,0/FIND("-",A1,COLUMN(1:1)),COLUMN(1:1))+SUMPRODUCT(--ISNUMBER(0/MID(A1,LOOKUP(1,0/FIND("-",A1,COLUMN(1:1)),COLUMN(1:1)),{1,2,3,4})))) ★下にコピー C1=TRIM(REPLACE(A1,1,LEN(B1),)) ★下にコピー

deepimpact
質問者

補足

すごいです! 式の内容はわかりませんが、結構な確率でできてます。 ○○府○○市○○丘1-12-5セ○○○○泉丘101号 OK ○○県○○市○○野区東○○台1-3-3佐藤ハイツ2N OK ○○都○○区大○○町3-22-21 ○○○○園403 OK ○○都○○区○○谷3-42-14ス○○山101 OK ○○県○○市○○町1234-1 ○○○○エストe502 OK ○○県○○市○○区○○町1-20 コーポ○○102 OK ○○県○○市○○西2-3-2グリーン○○西101 OK ○○県○○市○○郷4321-4 サニー○○204 OK で、下記の条件についてはダメでした・・・ ○○県○○市○○区○○町5472 ○○備前303  B,Cともにエラー ○○県○○市○○町方五23-4スミエ-ルミクラシ05号  Cにルミクラシ05号(これは単純に半角にしたほうがいいですね) ○○府○○市○○区○○町鷲見99パルテオン東山南209  B,Cともにエラー ○○府○○府○○市○○○○台3丁目4番129-101号  Cに[号]が残る ○○県○○県○○市○○○○12-2135 Cに[5]が残る ○○府○○市○○町5-12坂本ハイツ3-B Cに[B]が残る ○○県○○市○○町821エステートブリッツンC-101 わけられない これらについて、簡単であればおしえていただけないでしょうか?

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

>よく考えたら、マンションの最後の部屋番号も半角文字だ。。。。 deepimpactさんもお気づきですね。これだけではまだ「条件が不十分」です。 ですから最後に出現する「-(半角ハイフン)につづく半角数字」を区切り文字として扱うようにしてみます。「完全に」とまで言えなくてもかなり救えるはずです。 まず以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。 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]+"   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     End If   End With   Set RE = Nothing End If End Function これは最後の「-(半角ハイフン)につづく半角数字」の終わりが先頭から何文字目かを返すユーザ定義関数です。ワークシートに戻り  =GetSep(A1) と式を入力すると「15」が返ります。 あとはこのユーザ定義関数を用いて、B1セルは  =LEFT(A1,GetSep(A1)) C1セルは  =TRIM(MID(A1,GetSep(A1)+1,LEN(A1))) を入力し下方向にコピーします すると結果は以下のようになります。 B列                  C列 東京都○○区淡路町2-1-11  光マンション222 大阪府○○区外井場3-1-1   広島県○○区草薙場5-3-1  水蔵荘20号 これで多少楽になりませんか?

deepimpact
質問者

補足

ありがとうございます。 でも すいません。 VBAわかんなくて説明していただいてる 貼り付けまでやったのですが それをどう保存?すればいいのかわからないのです。 そこでとまってしまってます。 よろしければ教えていただけないでしょうか? また、上の方の欄にも答えてますが 色々な形のリストがあるので 参考になればと参考にされてくださいませんか? どうぞよろしくお願いいたします。

関連するQ&A

  • エクセルでセルに入力制限をしたいのですが。

    例えばA1のセルには全角で10文字まで、B1のセルには半角カナで10文字までという入力制限ができるでしょうか?入力規則で設定したところ、文字数制限はできるのですが、半角,全角の区別をしてくれません。 よろしくお願いします。

  • エクセル2003でセル内の文字のうち、半角カナ文字だけを全角かなに変換

    エクセル2003でセル内の文字のうち、半角カナ文字だけを全角かなに変換する方法 数字や英文字は半角のまま残して、読みにくい半角カナだけを全角かなに変える方法はあるでしょうか? JIS()ですと、すべての文字が全角に変わってしまいます。 詳しい方、どうかよろしくお願い致します。

  • eval 半角カナが文字化けする

    初めて投稿させていただきます。 半角カナが混ざっている文字列をevalすると、文字化けする場合があります。 どうすれば文字化けしないようになりますか? ちなみに全ての半角カナを全角カナに置換してevalを行いその後、半角カナに戻すということをやったのですが、もともと全角カナ文字まで半角カナに変換されてしまいました。できれば全角カナは全角カナ、半角カナは半角カナのまま文字化けせずにevalする方法を教えてください。

    • 締切済み
    • PHP
  • セルの中の文字判定の方法

    指定したセルの中のテキスト(英数時・記号・カナが混在)をチェックし、 (1)英文字と数字が全て半角であるかどうか と、 (2)カタカナが全て半角であるかどうか あるいは 全て全角であるかどうか をチェックしたいです。 検索結果 「英数は全て半角です。カナは全て半角です。」 と 「英数は全て半角です。カナは全て全角です。」 はOKで、 それ以外 「英数に全角/半角が混在しています。」 「カナに全角/半角が混在しています。」 の場合はエラーとわかるようにテキスト或いはセルの色を変えたいのです。 過去記事の探し方が悪いのか、同様の事例が見つけられません。 アドバイスをお願いできますでしょうか?

  • Excelのセルの数字のみを別のシートのセルに転写

    Excelのセルの先頭に固定した桁数(例として7桁)の半角数字と文字数はフリーの全角の文字を入力し、別のシートのセルに固定した桁数(例として7桁)の半角数字だけを転写する方法を教えてください。

  • Excel VBA で フォルダ名の一部を一括変更(セルの値を取得して変更)

    こんにちは。例を挙げます。よろしくお願いします。 まず、"ABC" という名前のフォルダがあるとします。 この"ABC"の中に、"00_あいうえお"というフォルダがあるとします。 ほかにも同じようなフォルダ:"10_かきくけこさ123"、"01_しす45せそたち"、"67_つてと"があります。これらのフォルダ名には特徴があり、2桁の半角数字に始まり、半角アンダーバー、文字列という並びになっています。 さらに同じフォルダ"ABC"に、EXCELファイル"なにぬ89.xls"もあるとしましょう。 したがって今、フォルダ"ABC"には、4つのフォルダと1つのEXCELファイルがあります。 "なにぬ89.xls"の、セルA1には"1"、A6には"2"、A11,A16は"34","57"と数値が入っているとします。また、セルB3には"あいう"、B8には"かき"、B13には"しす4"、B18には"つてと"という文字列が入っています。 B3,B8,B13,B18の文字列は、必ず同じフォルダ"ABC"内のフォルダ名に含まれています。 マクロで行いたい内容:フォルダ名の左端の2桁の数字を置換する その詳細: "なにぬ89.xls"のセルB3の文字列"あいう"を含むフォルダ"00_あいうえお"のフォルダ名の2桁の数字"00"のうち、右の"0"だけ、セルA1の数値"1"に置換したいのです。("00_あいうえお"→"01_あいうえお"へフォルダ名置換) 同じように、セルB8の"かき"を含むフォルダ"10_かきくけこさ123"の名前も、セルA5の数値"2"をもとに置換したいのですが、今度は2桁の数字が"02"になってほしいのです。("10_かきくけこさ123"→"02_かきくけこさ123"へフォルダ名置換) 以上のことをふまえますと、 フォルダ名"01_しす45せそたち" は "34_しす45せそたち" "67_つてと" は "57_つてと" に変換したいということがお分かりいただけますでしょうか。 4つの例しかあげませんでしたが、実際の"なにぬ89.xls"にはもっとたくさんのデータが、5行おきに並んでいます。他のセルには無関係の文字列や空白などが入っています。 セルの値でフォルダ名を部分一致検索し、セルの値でそのフォルダ名を置換する、ということができるでしょうか? 説明が長くなりましたが、ご回答、お待ちしております。よろしくお願いいたします。

  • エクセル2003で、1つのセルに全角文字、半角文字

    エクセルで文字数制限のあるセルに 全角、半角文字が混在している場合 A1 上下ABCDひだりみぎ ←対象となるセル B1全角文字数 7 C1半角文字数 4 というように対象のセルの全角文字数、半角文字数を別々のセルに表示できる方法があれば おしえてください。

  • Excelで文字にスペースがある場合に別セルへ移動

    A列のセルには以下のような住所文字が入力されています。 XX市XX町1-2-3 XXビル1F ビル名が入っている場合、住所の番地との間にスペース(半角または全角)が入っており、ビル名を別のB列のセルに移動させたいです。(A列からはビル名を削除) 大量データを簡単に処理できる方法を教えてください。

  • セルに入力した文字を別のシートで置換する方法

    複数置換を行いたいと思い、以下のマクロを作成しました。 If Range("B18") <> "" Then Cells.Replace what:=Range("B18"), replacement:=Range("D18") end if B18のセルが空欄ではない場合、 そのセルに入った文字を検索し、別の文字に変換するというものです。 1つや2つほどであれば、ショートカットキーを使って 置換をしていけば良いと思うのですが、 10項目以上、置換しなくてはならず同時処理を行いたいと思っています。 ただし、その10項目については対象ファイルごとにバラバラで、 統一性がないため、VBAの中に組み込むよりかは、 置換したい文字を各セルに入れていき、置換できればと思い、 マクロの作成を行いました。 ただ、上のマクロでは同じファイルではないと処理ができません。 ActiveSheetを使って処理を行うとは思うのですが、どのように記述してよいか分かりません。 お力添えを頂ければと思います。 上記内容で分かり辛いかもしれませんので、以下に箇条書きします。 1)複数置換を行いたい。 2)Aセルに置換対象の文字を入れ、Bセルに置換したい文字を入れる。 3)実行すると全シート上でA1セルに入力された文字を検索し、B1セルに入力してある文字に置き換わる。 4)これらの処理は同一ファイルで行うのではなく、それぞれ別ファイルで管理をする。 ※対象ファイルと実行データが別々のもの 以上です。 説明が分かりにくく、申し訳ありません。 もしVBAで以上のような処理が可能な場合、ご教授頂けますと幸いです。 (使用しているバージョンは、2003です。)

  • excel関数で 隣のセルに表示された文字を頭から2文字だけ表示させる

    あるセル(A1とします)に入力された半角カナの文字列の頭から2文字だけ、隣のセル(例えばA2)に全角カナで自動的に入力されるようにしたいのですが、どのような関数を使用すればよいでしょうか? 方法が詳しく記載されているHPをご存知でしたら、URLの紹介でもかまいません。宜しくお願いいたします。

専門家に質問してみよう