[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ナンバープレートの下桁の数字を抽出したい』(ららら)
過去ログを検索してみたのですが、わからなかったので質問させていただきます。
いろいろな車のナンバーが入っているセルがD列にあります。
そこから下の数字だけ(右端からひらがなまで)をE列に取り出したいです。
たとえば
D列 E列 大宮100せ1 1 所沢100は22 22 宇都宮100と333 333 川越100に4444 4444
という感じです。
自分でできたのは下記までです
Dim Myrange As Range Dim Mystr As String
For Each Myrange In Range("D2", Range("D65536").End(xlUp)) Mystr = Right(Myrange.Value, 4) Myrange.Offset(0, 1).Value = Mystr Next
これでは当然ですが単純に右から4桁だけの抽出になってしまいます。
目的の数字を抽出するにはどうすればよいのでしょうか。
(ナンバーセルには空白やハイフンは入っていません。)
< 使用 Excel:Excel2013、使用 OS:Windows8 >
数式でこのあたりを参考にできないでしょうか。 http://www.geocities.jp/chiquilin_site/data/050223_numerical_extraction.html
マクロであれば、正規表現を利用するとよいかと思います。 (Mook) 2014/07/22(火) 16:43
いつもありがとうございます。
教えたもらったサイトとみて検討してみます。
ぱっと見た感じでは難しそうでしたので、わからなければまた質問させてください。
(ららら) 2014/07/22(火) 16:56
昔作ってみたのが参考になれば・・・ Function Nplate(sMoji As String, iPic As Integer, Optional iRat As Integer = 0) As String '//ナンバープレートからデータを抽出する '//使い方 '=Nplate(対象文字,抜出箇所,[属性表記]) 'A1 =川越501さ12-34 '=Nplate(A1,1) → 川越 '=Nplate(A1,4) → 12-34 '=Nplate(A1,2,1) → 小型普通 '=Nplate(A1,3,1) → 自家用 '=Nplate(A1,0,1) → 埼玉 小型普通 自家用 ' Dim Tmp(1 To 4) As Variant Dim sCase As String With CreateObject("VBScript.RegExp") .Pattern = "^(\D{1,4})(\d{1,3})([あ-えか-さす-ふほ-をEHKMTYEHKMTY])(.{1,5}$)" .Global = True If Not .test(sMoji) Then Nplate = "NOMATCH": Exit Function For i = 1 To 4 Tmp(i) = .Execute(sMoji)(0).SubMatches(i - 1) Next i Select Case iRat Case 0 Nplate = Tmp(iPic) Case 1 '//ナンバーから都道府県を検索 sCase = "札幌_北海道,函館_北海道,室蘭_北海道,帯広_北海道,釧路_北海道,北見_北海道,旭川_北海道," & _ "宮城_宮城,仙台_宮城,福島_福島,会津_福島,いわき_福島,岩手_岩手,青森_青森,八戸_青森," & _ "新潟_新潟,長岡_新潟,山形_山形,庄内_山形,秋田_秋田,品川_東京都,足立_東京都,練馬_東京都," & _ "多摩_東京都,八王子_東京都,横浜_神奈川県,川崎_神奈川県,相模_神奈川県,湘南_神奈川県," & _ "千葉_千葉県,成田_千葉県,習志野_千葉県,袖ヶ浦_千葉県,野田_千葉県,柏_千葉県,大宮_埼玉県," & _ "熊谷_埼玉県,春日部_埼玉県,所沢_埼玉県,川越_埼玉県,長野_長野,松本_長野,諏訪_長野,水戸_茨城県," & _ "土浦_茨城県,つくば_茨城県,宇都宮_栃木県,那須_栃木県,とちぎ_栃木県,群馬_群馬県,高崎_群馬県," & _ "山梨_山梨県,名古屋_愛知県,尾張小牧_愛知県,一宮_愛知県,三河_愛知県,岡崎_愛知県,豊田_愛知県," & _ "豊橋_愛知県,三重_三重県,鈴鹿_三重県,静岡_静岡県,沼津_静岡県,伊豆_静岡県,浜松_静岡県," & _ "岐阜_岐阜県,飛騨_岐阜県,福井_福井県,石川_石川県,金沢_石川県,富山_富山県,大阪_大阪府," & _ "なにわ_大阪府,和泉_大阪府,堺_大阪府,京都_京都府,奈良_奈良県,滋賀_滋賀県,和歌山_和歌山県," & _ "神戸_兵庫県,姫路_兵庫県,広島_広島県,福山_広島県,鳥取_鳥取県,島根_島根県,岡山_岡山県,倉敷_岡山県," & _ "山口_山口県,下関_山口県,香川_香川県,徳島_徳島県,愛媛_愛媛県,高知_高知県,福岡_福岡県," & _ "北九州_福岡県,筑豊_福岡県,久留米_福岡県,長崎_長崎県,佐世保_長崎県,大分_大分県,佐賀_佐賀県," & _ "熊本_熊本県,宮崎_宮崎県,鹿児島_鹿児島県,沖縄_沖縄県," .Pattern = "(" & Tmp(1) & "_)(\D{1,4})(,)" If Not .test(sCase) Then Nplate = "NOPREF": Exit Function Tmp(1) = .Execute(sCase)(0).SubMatches(1) ' '//ナンバーから自動車種別を検索 sCase = "1_貨物,2_乗合,3_普通,4_小型貨物,5_小型普通,6_小型貨物,7_小型普通,8_特殊,9_大型特殊,0_建設," .Pattern = "(" & Left(Tmp(2), 1) & "_)(\D{1,4})(,)" If Not .test(sCase) Then Nplate = "NOAUTO": Exit Function Tmp(2) = .Execute(sCase)(0).SubMatches(1) ' '//ナンバーから事業種別を検索 Dim JIGYO As String JIGYO = "NOJIGYO" .Pattern = "[あ-えか-こを]": If .test(Tmp(3)) Then JIGYO = "事業用" .Pattern = "[われ]": If .test(Tmp(3)) Then JIGYO = "レンタル" .Pattern = "[さす-ふ-ゆら-るろ]": If .test(Tmp(3)) Then JIGYO = "自家用" .Pattern = "[EHKMTYよEHKMTY]": If .test(Tmp(3)) Then JIGYO = "駐留軍人軍属私有車両等" .Pattern = "[おしへん]": If .test(Tmp(3)) Then JIGYO = "未使用" Tmp(3) = JIGYO ' Select Case iPic Case 0 Nplate = Tmp(1) & " " & Tmp(2) & " " & Tmp(3) Case Else Nplate = Tmp(iPic) End Select End Select End With End Function (稲葉) 2014/07/22(火) 17:29
[稲葉]さんのは本格的ですね。
数式で下4桁でいいのなら、IF を連ねて
=IF(ISNUMBER(RIGHT($D1,4)*1),RIGHT($D1,4)*1,IF(ISNUMBER(RIGHT($D1,3)*1),RIGHT($D1,3)*1,IF(ISNUMBER(RIGHT($D1,2)*1),RIGHT($D1,2)*1,RIGHT($D1,1)*1)))
(jun53) 2014/07/22(火) 17:48
せっかくアドバイス頂いたのですが、私にはかなり難しく、一生懸命Functionから調べていました・・・
知識不足でアドバイスが生かせず申し訳ありません。
ちょっとずづ理解できるよう頑張ってみます。ありがとうございます。
[jin53様]
数式の内容は今から解読しますが、早速試したところできました!!
助けて頂きありがとうございました。
(ららら) 2014/07/22(火) 18:05
標準モジュールにコピーして貼り付け ワークシート上で、 E1=Nplate(D1,4) これでナンバーだけ抜き出せるよ!
Functionは広義で関数という意味です。 VLOOKUPとか、MID関数と同じように使用できます。
(稲葉) 2014/07/22(火) 18:08
E1 =LOOKUP(10000,RIGHT(D1,{1,2,3,4})*1) または E1 =-LOOKUP(1,-RIGHT(D1,{1,2,3,4}))
こんな感じかな? (笑) 2014/07/22(火) 18:26
昨日Functionについて調べていました。
まだ自分で使いこなせるようになるには時間がかかりそうですが、こんなこともできるのか!と
大変勉強になりました。
[笑様]
配列定数というものがあるのは知っていましたが、こういう風に使うのですね。
こちらも昨日調べてみました。
一般的な関数からすると難易度が一気にあがったきがしますが、なんとな〜く理解できました。
今回、皆さんにアドバイスをいただいて勉強になりました。
(ららら) 2014/07/23(水) 09:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.