[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vbaの車両ナンバー分割について』(ふうた)
投稿
[[20170209132520]] 『VBAでセルの分割』(関数がにがて)
について...
こんにちは。
困っていることがありまして、質問させていただきます。
自分のやりたいことを検索していて、上記スレッドに行きつきました。
車両ナンバーについて、例えば「名古屋302つ9999」において本拠の部分(事例でいう名古屋)のみ削除して、「302つ9999」という値にする作業をする必要があります。
該当しそうなものがなく、一度全て分割してからくっつけようと思い、スレッドに記載してあったマクロを試してみたのですが…
最近、上記事例の「302」の部分で、アルファベットが混ざるナンバーが出てきていますよね?(「31X」のような)
その場合、分割時に「名古屋 31 Xつ 9999」という形で分割されてしまいました。
アルファベットなので正しく反応しなくなってしまったのだと思いますが、いろいろ試してはみても上手く動かず、途方に暮れております。
皆様のお力添えを願えませんでしょうか。
※やりたいことはあくまで「名古屋」の本拠部分を消す作業なので、分割することなく削除できる方法があれば、そちらでも大丈夫です。
以上、よろしくお願い致します。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
車のナンバーなら右からほぼ8桁なので right関数で取出しとかでは (桁変わるとだめですが) (なるへそ) 2020/10/29(木) 13:10
こんな感じではどうかな
=RIGHT(A1,LEN(A1)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&123456789))+1)
(なるへそ) 2020/10/29(木) 14:11
>隠居じーさん様
文字数を取り出すという発想はあったのですが、
車両ナンバーは桁数が変わってしまうのがネックになっておりまして…
番号が4ケタで固定ならば取り出すことができましたが、
「・・18」のように2ケタしかなかったりする場合も一括で処理したいのです。
また、上記の事例で挙げました「名古屋302つ9999」の「302」の部分(車両種類)も、
場合によっては「11」などの2ケタになったりして、
そういった組み合わせを一括でクリアできるマクロが作れなかったので、
今回質問させていただいております。
>なるへそ様
ご提案いただいた計算式で試してみたところ、
望み通りの形で表示される車番と、#VALUEで表示される車番がありました。
〇品川301め4590 ⇒ 301め4590
〇尾張小牧336ら310 ⇒ 336ら310
×名古屋581せ3397 ⇒ #VALUE
×京都11ゆ862 ⇒ #VALUE
配列式に関しては無知であるため調べてはみましたが、
なぜこういった結果になるのか、上2つと下2つの差が理解できませんでした;
申し訳ございませんが、教えていただけないでしょうか?
(ふうた) 2020/10/29(木) 18:05
Sub test()
Dim v As Variant
For Each v In Array("品川301め4590", "尾張小牧336ら310", "名古屋581せ3397", "京都11ゆ862")
MsgBox 車番加工(v)
Next
End Sub
Function 車番加工(ByVal ss As String) As Variant
Dim i As Long, j As Long
Dim s As String
j = Len(ss)
For i = 1 To j
s = Mid(ss, i, 1) '★1文字切り出す
If IsNumeric(s) Then Exit For '数値に変換可能か?
Next
'最後までループを回ったか、途中で抜けたかで条件分岐
If i <= j Then
車番加工 = Mid(ss, i)
Else
車番加工 = CVErr(xlErrValue)
End If
End Function
(まっつわん) 2020/10/29(木) 18:32
""
に置き換えてしまうのもありですかね?
(まっつわん) 2020/10/29(木) 18:38
こんばんは ^^
すでに、まつわん さんがご提案ですが。[ありがとうございます。m(__)m]
下記の様な事を考えておりました、最初に現れた数字以降を抽出 ← が条件です。
Sub xxx()
Dim zStr As String
Dim i As Long
zStr = "名古屋302つ9999"
For i = 1 To Len(zStr)
If Mid(zStr, i, 1) Like "[0-9]" Then
Exit For
End If
Next
MsgBox Right(zStr, Len(zStr) - i + 1)
End Sub
(隠居じーさん) 2020/10/29(木) 22:53
>=RIGHT(A1,LEN(A1)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&123456789))+1)
>×名古屋581せ3397 ⇒ #VALUE
>×京都11ゆ862 ⇒ #VALUE
「0」が抜けているからでは?
=RIGHT(A1,LEN(A1)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))+1)
~↑~
>上2つと下2つの差が理解できませんでした ココ
「0」を含むか含まないかでしょう。
ついでに・・・ 全角の数字もあるんですか? すべて半角なら ASC関数は不要ですね。
REPLACE 関数なら
=REPLACE(A1,1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1234567890))-1,"")
参考まで (笑) 2020/10/29(木) 23:27
おはようございます ^^ 笑さん、のコメントで、気が付きました、有難う御座います。 !全角の数字もあるなら条件文は If Mid(zStr, i, 1) Like "[0-90-9]" Then か If Mid(zStr, i, 1) Like "#" Then に変えて下さいませ。。。済みません。m(_ _)m (隠居じーさん) 2020/10/30(金) 06:09
皆様に教えていただいた内容をもとに必要なところを手直ししていった結果、
なんとか望み通りの動きをさせることができるようになりました!
いろいろとご教授いただきまして、本当に助かりました。
また何かありましたらご質問させていただきます。
ありがとうございました!
(ふうた) 2020/10/30(金) 18:13
1)Power Queryエディターにデータを読み込んで 2)数字以外から数字になる境で列を分割し 3)2列め以降を再結合し、結果をCtrl+cでコピーし 4)Power Queryエディターを終了し(保存はしない)、ワークシートに戻る 5)データ範囲がテーブルになっているので、Ctrl+zで、元に戻す 6)Ctrl+vで、結果を好きな場所に貼り付け
プレビュー画面で確認しながら試行錯誤でできます。
2・3分の作業です。
数式もマクロも苦手という人向け。
(マナ) 2020/11/01(日) 20:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.