[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定した文字(単位)と数字を抜き出したい』(たけさん)
以前の担当の方が辞めてしまい、アクセスで組まれたマクロが動きません。
新たにエクセルVBAで何とかならないかと考えています。
L列に下記の品名があります
オムニパーク300チュウ 100MLX5V→100MLX5V
ガスコンドロップナイヨウエキ2%300ML→300ML
グリセノン チウ 200MLX30フクロ→200MLX30フクロ
KN3ゴウユエキ 200MLX20SB→200MLX20SB
カロナールジョウ 300 100T→100T
クラリスロマイシンDS10%ショウニ B100G→B100G
Aベンジン(ポリ) 500CC →500CC
C.DIFF QUIK CHEKコンプリ25S→25S
BINAXNOW ハイエンキュウキン 12テスト→12テスト
検索窓に『ML』と単位を入れると
→の右側のように単位を含む数字をVBAで抜出たいのです
ML(ミリリットル)
T(タブレット)
G(グラム)
などなど書ききれないほどあります
また数字と単位の間にスペースがあるかというと
必ずしもそういうことではありません
お力をかして頂けると助かります
< 使用 Excel:Excel2010、使用 OS:Windows7 >
動いている実績があるのであれば、ACCESSのマクロを提示できないでしょうか。 アプリケーション固有機能でなければ、ほとんどそのまま移植できると思いますが。
(Mook) 2015/05/27(水) 14:04
(たけさん) 2015/05/27(水) 14:11
結果和M列に表示
Sub test() Dim r As Range With CreateObject("VBScript.RegExp") .Pattern = "[A-Z]?(\d+[A-Z\u30A0-\u30F0\uFF76-\uFF9F]+)+$" For Each r In Range("L1", Range("L" & Rows.Count).End(xlUp)) If .test(Trim(r.Value)) Then r(, 2).Value = .Execute(Trim$(r.Value))(0) End If Next End With End Sub (seiya) 2015/05/27(水) 23:04
ありがとうございます!!!!!!!
_(_^_)_
思っていた通りの動きで感激です
が、4行目のコードの意味がまったくわからず。。。
また。。。
ベギンクリーム10% 20GX10→20GX10
アネトカインゼリー2% 50MLX3→50MLX3
ヘパリンNAロック10E/ML 5LX10S→5LX10S
などが抜き出せず、空白になります
お時間ある時に、ご指導ください
(たけさん) 2015/05/28(木) 11:58
.Pattern = "[A-Z]?(\d+[A-Z\u30A0-\u30F0\uFF76-\uFF9F]+)+$" ^ .Pattern = "[A-Z]?(\d+[A-Z\u30A0-\u30F0\uFF76-\uFF9F]*)+$" ^
に変更してみてください (seiya) 2015/05/28(木) 12:05
早々のお返事ありがとうございます
ほぼ抜出できました!!!!!!
感謝、感謝です
おかげさまで、270件あるデータが処理できました
アロンアルファA 0.5GX5→0.5GX5A(5GX5になってしまう)
バイアグラジョウ50MG 10TX2シート→10TX2シート
ツロブテロールテープ2MG 70マイ→70マイ
リボテストマイコプラズマ 10カイヨウ→10カイヨウ
ロシュ PTテストストリップ 24マイ→24マイ
ロールシ CL5840 5マキイリ→5マキイリ
ジクロフェナクNAザザイ25 CH100コ→CH100コ(H100コになってしまう)
残りはコレです。。。
(たけさん) 2015/05/28(木) 13:23
.Pattern = "[A-Z]*(\d+(\.\d+)?[A-Z\uFF65-\uFF9F]*)+$ で良さそうかな? (seiya) 2015/05/28(木) 13:58
一部抜けてしまう部分があります
品名の入力が複数人による手入力のため、半角24文字という文字数制限がある(帳票のレイアウトの関係上??)のですが空白に対してなど決まりはなく、個々に入力しているのが現状です
何度もすいません
オムニパーク300チウシリンジ50ML 5S→50ML(5Sになってしまう)
オムニパーク300チウシリンジ100ML5S→100ML5S(300チウシリンジ100ML5Sになってしまう)
前任が急にいなくなり、途方にくれています。。。
ホントにすいません
(たけさん) 2015/05/28(木) 14:29
.Pattern = "[A-Z]*\d+(\.\d+)?([A-Z]+\d*)*(\d*[\uFF65-\uFF9F]+)?$" でもう一度... やはり、 オムニパーク300チウシリンジ50ML 5S このパターンは他とは矛盾するので 5S が抽出される。 (seiya) 2015/05/28(木) 15:14 修正 15:55
オムニパーク300チウシリンジ50ML 5S
オムニパーク300チウシリンジ100ML5S
上記はそれぞれ
5S
100ML5S
と表示されます
空白の問題??かなと思い空白を全て置き換えて実行しても変わりませんでした
(-"-)
(たけさん) 2015/05/28(木) 16:10
>オムニパーク300チウシリンジ100ML5S→100ML5S(300チウシリンジ100ML5Sになってしまう) 100ML5S が抽出されますよね?
問題は オムニパーク300チウシリンジ50ML 5S で最後の5Sの前にスペースがあるので 5S になってしまいます。 (seiya) 2015/05/28(木) 16:20
苦肉の策でPatternを2段階にすると...
Sub test2() Dim r As Range Columns("m").ClearContents With CreateObject("VBScript.RegExp") For Each r In Range("L1", Range("L" & Rows.Count).End(xlUp)) .Pattern = "(\d+(\.\d+)?[A-Z]+) \d+(\.\d+)?[A-Z]+$" If .test(Trim(r.Value)) Then r(, 2).Value = .Execute(Trim$(r.Value))(0).submatches(0) Else .Pattern = "[A-Z]*\d+(\.\d+)?([A-Z]+\d*)*(\d*[\uFF65-\uFF9F]+)?$" If .test(Trim$(r.Value)) Then r(, 2).Value = .Execute(Trim$(r.Value))(0) End If Next End With End Su (seiya) 2015/05/28(木) 16:37
ありがとうございます
早速、確認してみます(うれし泣き)
_(_^_)_
(たけさん) 2015/05/28(木) 17:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.