文字数4、英文字、数字、数字、数字で構成される商品コードを抽出したい。
どうしたらいいべ。
| | A | B |
| 1|商品コード |品名 |
| 2|4902102055314 |Emblem Black |
| 3|T800 |ターミネーター |
| 4|MR-GU2A13BK |Multi Card Reader |
| 5|GP03 |GALS Paradise |
| 6|Z112 |カスタムレンズシート レッド |
| 7|Z12L |エンブレムサイン |
セル「C2」に関数
=AND(LEN(A2)=4,"A"<=LEFT(A2,1),LEFT(A2,1)<="Z",
"0"<=MID(A2,2,1),MID(A2,2,1)<="9",
"0"<=MID(A2,3,1),MID(A2,3,1)<="9",
"0"<=MID(A2,4,1),MID(A2,4,1)<="9")
を入れて「C7」までコピー。
| | A | B | C |
| 1|商品コード |品名 | |
| 2|4902102055314 |Emblem Black |FALSE |
| 3|T800 |ターミネーター |TRUE |
| 4|MR-GU2A13BK |Multi Card Reader |FALSE |
| 5|GP03 |GALS Paradise |FALSE |
| 6|Z112 |カスタムレンズシート レッド |TRUE |
| 7|Z12L |エンブレムサイン |FALSE |
正規表現が使えればいいのだがねぇ。
地道にやるしかないでしょう。
別解1
C2 : =LEN(A2)=4 4文字か?
D2 : =AND("A"<=LEFT(A2,1),LEFT(A2,1)<="Z") 英文字か?
E2 : =AND("0"<=MID(A2,2,1),MID(A2,2,1)<="9") 数字か?
F2 : =AND("0"<=MID(A2,3,1),MID(A2,3,1)<="9") 数字か?
G2 : =AND("0"<=MID(A2,4,1),MID(A2,4,1)<="9") 数字か?
H2 : =AND(C2, D2, E2, F2, G2) 全てが「真」ならば「真」
「C2」から「H2」を
「C7」から「H7」までコピー
別解2
IF関数の入れ子。面倒だから書かない。
多分動かない。私の記憶が確かならば、
関数の入れ子は確か7階層までだから。
数字3文字の検査を
AND("000"<=MID(A2,2,3),MID(A2,2,3)<="999")
とやってはいけない。
7行目"12L"も引っかかって「TRUE」となってしまうぞ。
手を抜いてはいけない。
もっとエレガントな方法、募集中。
考えてみなさい。
追伸:
こんな事はExcelでは処理しない。
csvでsaveして、(たとえばtest.csv)
#!/usr/local/bin/ruby
require "jcode"
$KCODE = "S"
while gets
if $_ =~ /^Dd{3},/
end
end
てなrubyスクリプトに通せば
$ ruby test.rb < test.csv
T800,ターミネーター
Z112,カスタムレンズシート レッド
$ ruby test.rb < test.csv > ans.csv
で抽出したans.csvが得られる。
65536行などというけちな上限もない。
それはそうと「キャバ嬢」のブログにトラックバックされた模様。
削除しようと思ったが、面白いので放っておこう。
おじさん好きらしい。「くそおやじ」に反応したか?
と思ったら一日もしないうちに消滅。
がんばって生きてね。
※コメント投稿者のブログIDはブログ作成者のみに通知されます