エクセル2000で、A列に住所が入力されていて、B列に区のみを抽出する方法を教えてください。区は3文字の場合や2文字の場合が発生します。

EX)   
        A                B
 東京都文京区あいうえお町123     文京区
 東京都世田谷区かきくけこ町234    世田谷区

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

A 回答 (5件)

特別区・行政区として"区"を持つ都市は、東京都23区と政令指定都市(札幌、仙台、千葉、川崎、横浜、名古屋、京都、大阪、神戸、広島、北九州、福岡)のみということになりますが、"区"を含まない住所の場合、find関数を使用するとエラーが発生します。


エラーを回避するには、ユーザー定義関数を作成するのがよいかと思います。以下、その手順です。

「ツール」-「マクロ」-「Visual Basic Editor」で『Visual Basic Editor』を起動します。
「挿入」-「標準モジュール」を選択します。
表示された「モジュールシート」に関数を定義するためのコードを記述します。(Function Ward・・・からEnd Functionまでをコピー&ペーストすれば簡単です。ここの投稿欄は、行頭の空白を自動的に削除してしまうので、少々見にくいですが・・・)

====↓ここから===========================

Function Ward(adrs As String) As String

Dim tmp_ad As String
Dim str_no, str_len As Long

tmp_ad = adrs

If Left(tmp_ad, 3) = "東京都" Then
str_no = 3
Else
Select Case Left(tmp_ad, 6)
Case "北海道札幌市"
str_no = 6
Case "宮城県仙台市"
str_no = 6
Case "千葉県千葉市"
str_no = 6
Case "神奈川県横浜"
str_no = 7
Case "神奈川県川崎"
str_no = 7
Case "愛知県名古屋"
str_no = 7
Case "京都府京都市"
str_no = 6
Case "大阪府大阪市"
str_no = 6
Case "兵庫県神戸市"
str_no = 6
Case "広島県広島市"
str_no = 6
Case "福岡県福岡市"
str_no = 6
Case "福岡県北九州"
str_no = 7
Case Else
str_no = 0
End Select
End If

Ward = ""
If str_no <> 0 Then
str_len = 1
Do While str_len <= Len(tmp_ad) - str_no
If Mid(tmp_ad, str_no + str_len, 1) = "区" Then
Ward = Mid(tmp_ad, str_no + 1, str_len)
Exit Do
Else
str_len = str_len + 1
End If
Loop
End If

End Function

====↑ここまで===========================

「ファイル」-「終了して Microsoft Excel へ戻る」を選択します。

セルA2の区名をセルB2に抽出する時には、

=Ward(A2)

と入力します。これで、特別区・行政区名のみが抽出され、それ以外の住所には空白が入ります。
    • good
    • 0
この回答へのお礼

ありがとうございます。 
どうやって勉強されるのでしょう??
初心者の私には心強いです。

お礼日時:2001/10/08 09:30

こんにちは



 以下のページがご参考になるのでは?

【エクセル技道場】-関数-数字で始まる部分から区分
http://www2.odn.ne.jp/excel/waza/function.html#S …

参考URL:http://www2.odn.ne.jp/excel/waza/function.html#S …
    • good
    • 0

すでに住所が入力されていて、という質問から皆さんが回答をされています。

私もFINDを使用する方法を思いついたのですが、継続的にそのシステム使用していく場合
を考えてみると郵政の出している郵便番号データを利用する方が便利になるのではと思います。質問内容に答えている訳でも、回答でもありませんが一考されてもよいかと思います。
    • good
    • 0

こんにちは!



都道府県名や区市町村名の区分けはその区分け文字
が地名に使われている("市"川市や京"都"府など)
場合があり、必ず例外が発生します。
それを承知で抽出後チェックを行うのを条件とすれば
以下のような案もあります。

データがA2からとして

B2に
 =MIN(IF(NOT(ISERROR(FIND({"府","県","道","都"},A2,1))),FIND({"府","県","道","都"},A2,1)))

C2に
 =MIN(IF(NOT(ISERROR(FIND({"群","区","市"},A2,B2))),FIND({"群","区","市"},A2,B2)))

D2に
 =MID(A2,B2+1,C2-B2)

と入力後、必要行まで複写

試してみて下さい!

 
    • good
    • 0

A列は、東京都だけでしょうか?


下の回答は、A列が東京都だと想定して書かせてもらいました。
B列に
=MID(A1,4,FIND("区",A1)-3)
とすれば、できると思います。
find関数で区の位置を求めて、
mid関数で、A1のセルの4番目からA1のセルの区の位置から3を引いたものに
すれば、目的の区のみ抽出できます。
    • good
    • 0

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

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

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

QExcel2013 VBA A列とB列の文字をA列とB列とC列に移動させる方法

A列とB列に文字が入っているのですが、下記のようにA列とB列とC列に文字を移動させたいです。
(A列の数字は必ず奇数のA列に入っています。)
VBAのコードを教えて下さい。

例えば
A1 1  B1 cat
A2 空白 B2 猫
A3 空白 B3 dog
A4 空白 B4 犬
A5 2  B5 whale
A6 空白 B6 クジラ
A7 3  B7 rabbit
A8 空白 B8 ウサギ

とデータがある場合

A1 1  B1 cat  C1 猫
A2 空白 B2 dog  C2 犬
A3 2  B3 whale  C3 クジラ
A4 3  B4 rabbit C4 ウサギ

としたいです。

実際、データは、A5196まであります。

Aベストアンサー

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

少しは短縮できると思います。m(_ _)m

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeB...続きを読む

QA列とB列の重複を抽出したいのですがA列とB列の値は一部だけ同じ文字です。ご教示お願いします。

エクセル初心者です。重複を見つけるのが仕事です。いろいろやってみたのですがうまくできません。
お知恵をお貸しください。

A列には企業名が入力されています。
B列にも企業名が入力されていますが全く同じ文字ではないのです。

たとえばこういうことです。
A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

A列にある企業名とB列にある企業名が同じであればセルを塗りつぶすか○を表示させるように
したいのです。
重複を見つけるのが目的なので、ほかの方法でもかまいません。
すみません、A列のセルとB列のセルが全く同じ名前ならば重複が見つけられたのですが
ここから先がどうしてもわからないのです。。。
申し訳ありませんがどうか教えてください。。。

Aベストアンサー

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim nameT1(maxrow1)
ReDim nameT2(maxrow2)
Range("C1:" & "D" & maxrow2).Value = ""
Call makeTable(nameT1, "A", maxrow1)
Call makeTable(nameT2, "B", maxrow2)
For row1 = 1 To maxrow1
For row2 = 1 To maxrow2
If Cells(row2, "C") = "" Then
If Mymatch(nameT1(row1), nameT2(row2)) = True Then
Cells(row2, "C").Value = "○"
Cells(row2, "D").Value = row1
End If
End If
Next
Next
t2 = Time
MsgBox ("チェック完了 処理時間=" & Minute(t2 - t1) & "分" & Second(t2 - t1) & "秒")
End Sub
'余分な文字を削除した結果をテーブルに格納する
Private Sub makeTable(ByRef nameT() As String, ByVal col As String, ByVal maxrow As Long)
Dim row As Long
Dim ary As Variant
Dim name As String
Dim i As Long
ary = Array("㈱", "(株)", "株式", "(有)", "有限", "会社")
For row = 1 To maxrow
name = Cells(row, col).Value
For i = 0 To UBound(ary)
name = Replace(name, ary(i), "")
Next
nameT(row) = name
Next
End Sub
'企業名が一致かどうか判定する
Private Function Mymatch(ByVal name1 As String, ByVal name2 As String) As Boolean
Mymatch = False
Dim pos As Variant
pos = InStr(1, name1, name2, vbTextCompare)
If pos > 0 Then Mymatch = True
End Function
-----------------------------------------------------
一致の精度が悪ければその旨補足してください。
(一致すべきものが一致しない、一致してはいけないものが一致している)
100%解決できる保証はありませんが、多少のチューニングは行います。

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim ...続きを読む

Q【EXCEL】条件付き書式、A列、C列、D列、E列が同じ値の時にB列の背景色を変えたい

お世話になります。

エクセルの条件付き書式の数式の使い方について教えて下さい。
A列、C列、D列、E列の値が同じ時にB列のセルの背景を青に
塗りつぶしたいと思っています。

なので、「数式を使用して、書式設定するセルを決定」、
「次の数式を満たす場合に値を書式設定」で、数式を
「=A1=C1=D1=E1」と入力し、書式、塗りつぶし、青、
を選択して、条件付き書式を設定しました。
すると、、、画像のような結果になります。

私の感覚だと画像でセルの値が「11」~「15」の時だけ
B列が青になると思うのですが実際の結果は画像の通りです。

先の話の通りA列、C列、D列、E列の値が同じ時だけ
B列のセルの背景を青にしたい場合はどうい数式になるのでしょうか?

すいませんが、詳しい方、数式(関数?)で説明できる方よろしくお願い致します。

追記
可能でしたらA列、C列、D列、E列が空白の時はB列の背景色をなしにしたいと思っております。
→A列、C列、D列、E列に値があって、かつ同じ値の場合のみB列の背景を青にしたいです。

お世話になります。

エクセルの条件付き書式の数式の使い方について教えて下さい。
A列、C列、D列、E列の値が同じ時にB列のセルの背景を青に
塗りつぶしたいと思っています。

なので、「数式を使用して、書式設定するセルを決定」、
「次の数式を満たす場合に値を書式設定」で、数式を
「=A1=C1=D1=E1」と入力し、書式、塗りつぶし、青、
を選択して、条件付き書式を設定しました。
すると、、、画像のような結果になります。

私の感覚だと画像でセルの値が「11」~「15」の時だけ
B列が青にな...続きを読む

Aベストアンサー

AND関数を使えば判定ができるのでは?
 =AND(A2<>"",A2=C2,C2=D2,D2=E2)

A列には常に判定する数値が入っているなら「A2<>""」は不要です。

参考サイト
http://www.relief.jp/itnote/archives/003940.php

Qエクセル:A列とB列に同じ数値が合った場合に左側のA列の方を強調したい。

エクセル2000で

A1=12 A2=16 A3=24 A4=5 A5=6
B1=16 B2=23 B3=89 B4=6 B5=10

と入力されていたとします。この場合にA列とB列には16と6が共通の数として存在しています。

そこで、共通な数値が入力されているセルのうち、最も左側にある列(この例の場合はA列)を強調したいのです。関数を使う場合の数式をご存知の方がいらっしゃいましたら教えていただきたいと思います。


強調の仕方は、

1太字にする。
2セルを塗りつぶす
3文字の色を変える

などどんな手段でも結構です。

Aベストアンサー

(例データ)A1:B5
1216
1623
2489
56
610
(条件付き書式)
A1:A5を範囲指定
書式
条件付き書式
式が
=COUNTIF($B$1:$B$6,A1)>=1
書式設定(例えばセルの色を緑に)
OK
(結果)
16(A2)
6 (A5)
が緑になった。
A1:A5を範囲指定して、書式設定すると、A1をA2:A5に
コピーする必要はありません。
コピーと同じ効果になっています。

QEXCELの表、組[A列]:番号[B列] を 組[A列]:番号[行]に変換する方法

EXCELに
A列に組、B列に番号がそれぞれ反映されている表があります。
これを
A列に組、同行に番号が横並びに配置された状態に変更したいと考えております(添付画像)。

D列にはA列の組名を「重複なし」で貼り付けます。
このとき、E列~K列にどのような数式を入力すればよろしいでしょうか?
E1に入力する数式を教えていただけるとありがたいです。
何卒よろしくお願いいたします。

Aベストアンサー

こんばんは!

画像の配置だとE1セルに
=IF($D1="","",IFERROR(INDEX($B$1:$B$1000,SMALL(IF($A$1:$A$1000=$D1,ROW($A$1:$A$1000)),COLUMN(A1))),""))

配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → E1セルを選択 → 数式バー内に貼り付け →そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。

最後にE1セルのフィルハンドルで列・行方向にずぃ~~~!っとフィル&コピーします。

こんな感じではどうでしょうか?m(_ _)m


人気Q&Aランキング

おすすめ情報