• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAで住所の切り分け)

Excel VBAで住所の切り分け方法を解説

SI299792の回答

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.1

関数でもできます。 必ずスペースがあり、2番目のスペースで分けるなら、 B2 =LEFT(A2,FIND(" ",A2,FIND(" ",A2)+1)+1) C2 =MID(A2,FIND(" ",A2,FIND(" ",A2)+1)+1,100) 最初の数字で分けるなら B2 =LEFT(A2,MIN(SEARCH({1,2,3,4,5,6,7,8,9,0},A2&1234567890))-2) C2 =MID(A2,MIN(SEARCH({1,2,3,4,5,6,7,8,9,0},A2&1234567890)),100) VBA ならこうなります。 A1にタイトルがあり、A2からデータが入っている設定です。 ' Option Explicit ' Sub Macro1() '   Dim RegExp As Object   Dim Row As Long   Dim What As String   Dim Execute As Object   Dim FirstIndex As Integer '   Set RegExp = CreateObject("VBScript.RegExp")   RegExp.Global = True   RegExp.Pattern = "\d" '   For Row = 2 To [A1].End(xlDown).Row     What = Cells(Row, "A")     Set Execute = RegExp.Execute(What)     FirstIndex = Execute(0).FirstIndex     Cells(Row, "B") = Left(What, FirstIndex)     Cells(Row, "C") = Mid(What, FirstIndex + 1)   Next Row End Sub

jyona51
質問者

お礼

ご丁寧にご回答ありがとうございました B2 =LEFT(A2,MIN(SEARCH({1,2,3,4,5,6,7,8,9,0},A2&1234567890))-2) C2 =MID(A2,MIN(SEARCH({1,2,3,4,5,6,7,8,9,0},A2&1234567890)),100) の式をVBAで記述したらうまくできました。 大変勉強になりました。

関連するQ&A

  • エクセルで住所を並べかえる方法教え下さい!

    エクセルで住所録を番地順に並べかえたいのですが、1つのセルに住所が収まっていて「並べかえ」機能でうまく並べかえできません。 文字列として認識されてしまってるので、1つずつ数字に変換できればいいと思うのですが… データは以下の様な感じで、入っている数字の個数が定まっておりません。 例)東京都足立区123番地1 パークス足立101 例)東京都練馬区1丁目2番1号 例)東京都江東区123番地 他の質問を拝見して、1つ目の数字の所までは並べかえ成功しました。 ただ2つ目(枝番)以降がどうしてもうまくいきません(3つ目の数字があることによりエラーになっているようです)。 関数を使ってうまくできないでしょうか。 あまり詳しくないので、悪戦苦闘しております。 よろしくお願いいたします。

  • 住所のセル分割について VBA

    マクロについてお尋ねします。 A1のセル ●●市山田町1-1山田ハウス111号 のように町名と番地(全角数字)とアパート・マンション名が続けて入っているセルがいくつもあります。 これを B1→ ●●市山田町 C1→ 1-1山田ハウス111号 ※住所を前から見ていき、全角数字(1~9)が出たらC1に分割 のように2つのセルに分割したいのです。 A1のセルで全角数字(1~9)のいずれかの数字が出たら その数字からC1に分割したいのですがどのようにすればいいのでしょうか。 町名と番地(1-1)の間にはなにもありません。 また番地までの住所の長さはまちまちです。 よろしくお願いいたします。

  • エクセルVBAについて

    エクセルVBA初心者です。 以下のような処理をしたくて、色々な質問等を見て組み合わせて動かしてみたものの、なかなかうまくいかず困っております。アドバイスいただけないでしょうか? 「Sheet1」に以下のようなデータがあります。 <A列> <B列> <C列> ok59  886 ok88 ok70 777 ok75 okGG 478 ok66 ok97 358 ok58 ok69 764 ok47 ok39 368 ok40 okGG 794 ok68 ok85 463 ok75 ・    ・ ・ ・    ・ ・ A列とC列にはそれぞれ「ok+2桁の数字or文字」が入っています。 B列は特に今回は使わないデータですが、数字が入っています。 やりたいことは以下の通りです。 A列に「GG」を含む文字列(実質okGGしかない状態です)が出てきたとき、 その1つ下の行のA列とC列のセルをピックアップし、背景色をピンク色にします。 上の例だと、A列は「ok97」と「ok85」、B列は「ok58」と「ok75」のセルが該当します。 さらにピンク色にピックアップしたセルのから、頭の「ok」を除いた数字を3.5倍した数字を、 別のシートに抽出したいのです。 なので、上の例を使用した場合の抽出したデータは以下のようになります。 <A列> <B列> 339.5 203 297.5 262.5 ちょっと複雑なのですが、どのようにするのがよいのでしょうか? また、別シートに抽出したいのですが、 「Sheet1」の特定のセルに日付が入っているので、 できればその日付の名前のシートを作り、そこに抽出できたらなぁ・・・と考えています。 「Sheet1」にデータを貼り付けて、ボタンをポンっとおしたら日付の名前のシートができて、 欲しいデータが抽出されていく・・・というイメージです考えています。 どうぞよろしくお願いします。

  • Excel VBA の作り方について【初心者】

    Excel VBA の作り方について質問させてください。 A1セルに「営業部【山本】」と入力されています。 B1セルに「01:35:24」(タイム)と入力されています。 (1)D1セルに「山本」を抜き出して表示 (2)E1セルに「95」(分数)で表示 (3)A2以降で同じ作業の繰り返し(最終入力列まで) というVBAを作成しております。 Sub macro1() '行数確認 nr = Range("A1048576").End(xlUp).Row For i = 1 To nr '名前抜き出し x = Range("A1").Offset(i - 1) j1 = InStr(x, "【") j2 = InStr(x, "】") Range("D1").Offset(i - 1) = Mid(x, j1 + 1, j2 - j1 - 1) '分表示 x = Range("B1").Offset(i - 1) Range("E1").Offset(i - 1) = Int(x * 24 * 60) Next i End Sub ここまではプログラムが完成しています。 この後、 (4)C列セルに入力されている数値をF列セルにそのまま入力 したい場合には、どの部分にどのようなプログラムを追加すればよいでしょうか? よろしくお願いします。

  • エクセルで住所録の数字だけを取り出したいのですが・・・

    他人からもらったエクセルのデータを次のようにしたいと思っています。 まず、A列には住所が入っています。  A1には ○○5条2丁目123番地××マンション1001号  A2には ●●●8条9丁目45番地コーポ△△201号  A3には ◎◎67番地3号  …  となっています。  ちなみに○○、●●●、◎◎には~町とは書かれておらず、山川、山川北、山川中央というような町名です。    これをバラバラに他の列にうつしたいのです。つまり、  B列に 町名(○○、●●●、◎◎…)  C列に 条(5,8,空欄,…)←ただし、数字のみ  D列に 丁(2,9,空欄,…)←これも、数字のみ  E列に 番地(123,45,67,…)←これも、数字のみ  f列に その他(アパート名、マンション名など)   この書き方でわかってもらえるでしょうか? このサイトで他の方の質問も調べたのですが、応用が利かせることができなく、うまく分けることができません。 どなたかわかりやすく教えていただける方はいらっしゃいませんか?お願いします。

  • エクセルVBAでの質問です。

    エクセルVBAでの質問です。 以下のようなA列にID、B列、C列にそれぞれIDに対応したデータがあります。 A      B      C ID    名前    住所 10000 ~ 39999 IDを10000~19999、20000~29999、30000~39999で分けて別シートに もっていこうと思っています。 自分としては、ID左端の数字をLeft関数を使って何とかしようと思っていましたが、 どうしてもうまくいきません。 何かいい方法はないでしょうか。

  • エクセル VBA で列番号を足す方法は?

    こんにちは。大変お世話になっています。 Set btd = Range("d2:z2").Find(bmd) といったVBAを使用し、あるセル番地を抜き出しました。 そのセルの列番号のみを抜き出して、そこから列番号を右へいくつか動かしたいのですが、その方法がわかりません。 別の定義で出した行をgとして Cells(g, btd.Column)でセルの指定をしました。 このセルがa1だとします。 次の作業として、b1のセルを指定したいのですが、その方法がわからないのです。 b=Cells(g, btd.Column) と定義して、 b.Offset(0, 1).Value などと書いてもエラーになってしまいます。 行番号なら数字を足したり引いたりすればできたのですが、アルファベットの列番号の場合はどうしたら良いのでしょうか? すみませんがよろしくお願いします。

  • エクセル関数、またはVBA

    どなたか教えてください。 B列に半角数字か空セルがあります。 A列にB列の一定の行数(下記だと4行)の数字の和があります。 ---------- A B C 3 1     1     1         4 0     1     3     0   3 0           2     1   ---------- これを以下のようにA列の数字を対応する4行中のB列がゼロでも空セルでもない行に移動させたいのです。 ---------- A B C 3 1     1     1           0   4 1     3     0     0         3 2     1   ---------- 実は経理の帳簿の貸借なのですが、関数かマクロでできないでしょうか? 自分なりに考えてみたのですが、頭がパンクしました・・・ どうかお助け下さい。

  • Excelで住所の表示を丁目、番、号に統一させる

    現在、住所の番地の入力方式が以下のようにまちまちな状態です。 例: A市B町1-1-1 A市B町1丁目1-1 A市B町1丁目1番1号 等です。 住所データは1列に入っており、これをすべて「A市B町1丁目1番1号」(数字は半角)の形式に正規化したいです。 ・漢数字は含まれません(一部「丁目」部分だけ漢字がありますが、手動で数字に変更します。) ・数字、ハイフンは全角と半角が両方あります。(大半は全角) ・番地の後にビル名が入っているものがあります(番地とビル名の間はスペースが空いていたり空いていない場合があります。できれば、一律で半角スペースを空けるようにしたい) ・全ての住所は丁目、番、号の住居表示です。("X町1234番地"のようなものはない) 規則としては、最初の数字の後に"丁目"、2番目の数字の後に"番"、3番目の数字の後に"号"を付与すればいいかと思いますが、具体的にどのような関数を組めばよろしいでしょうか。

  • エクセルで条件に該当するセルの番地を表示させるには

    色々探してみて、自分で関数をいじってみたんですが、 #REF!や#VALUE!、#N/Aと言ったエラー表示ばかりに なってしまいましたので教えてください。 ある列内に実数が入っているセル番地を表示するには どうしたらいいでしょう?   A  B  C 1 0  15  0 2 0  0   0 3 10  0  0 4 0  0  -5   という表があるとき、 A列は10、番地はA3 A5のセルに「10」 A6に「A3」 B列は15、番地はB1 B6のセルに「15」 B7に「B1」 と表したいんです。 1つの列には「0」か「0以外」のどちらかしか存在しません。 +の数字も-の数字も表示できるようにしたいんです。 どなたか、アドバイスをお願い致します!