エクセルで文字列の処理をすることがあります。
文字列のなかにある文字を探すときFIND関数(SEARCH関数でもできますが)を用いますね。
例として/(スラッシュ)を探したいときです。
adsafd/asd というときは /asd と表示し
adsafdasd というときは 表示しない(ブランクを表示する)としたい場合がありました。
A列に元の文字列が入っています。
B列に =FIND("/",A2) (2行目で処理をしているものとします。)を書くと /が見つかればその位置を返します。見つからないと #VALUE! エラーになります。
C列に =IF(ISERROR(B2),"",MID(A3,FIND("/",A2),LEN(A2)-FIND("/",A2)+1)) を書きます
ISERROR関数はエラーがあれば真となりますので、エラーがあれば(/が文字列になければ#VALUE!エラーになりますので)真の場合のブランクを表示するために "" とし、
偽であれば(/が文字列にあれば)何桁目にあるかがFIND関数で求まるので、文字列からFIND関数で求めた場所から、/があった場所からの文字列の長さ+1(/の分)をMID関数で抜き出せばいいことになります。
これで動作はするのですが、どうも釈然としません。
FIND関数の仕様として、見つからなかったときにエラーになるというのでいいのでしょうか?
見つからなかったら位置として0を返す。とすれば、分り易いし、
=IF(FIND("/",A2)=0,"",MID(A3,FIND("/",A2),LEN(A2)-FIND("/",A2)+1))
としてB列は不要にできるのですが。。。。
- Calendar
<< May 2024 >> Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- search this site.
- tags
-
- 未分類 (374)
- archives
-
- 201401 (2)
- 201305 (1)
- 201303 (1)
- 201301 (1)
- 201212 (1)
- 201211 (1)
- 201210 (1)
- 201209 (3)
- 201208 (4)
- 201207 (2)
- 201206 (3)
- 201205 (5)
- 201204 (1)
- 201203 (2)
- 201107 (1)
- 201105 (2)
- 201104 (4)
- 201007 (3)
- 201006 (5)
- 201005 (5)
- 201004 (10)
- 201003 (1)
- 201002 (21)
- 201001 (31)
- 200912 (31)
- 200911 (8)
- 200910 (11)
- 200909 (4)
- 200908 (1)
- 200907 (2)
- 200906 (1)
- 200905 (5)
- 200904 (5)
- 200903 (3)
- 200902 (1)
- 200901 (2)
- 200812 (10)
- 200811 (4)
- 200810 (5)
- 200809 (10)
- 200808 (6)
- 200807 (9)
- 200806 (15)
- 200805 (31)
- 200804 (30)
- 200803 (31)
- 200802 (29)
- 200801 (31)
- 200712 (31)
- 200711 (30)
- 200710 (31)
- 200709 (30)
- 200708 (31)
- 200707 (31)
- 200706 (30)
- 200705 (31)
- 200704 (30)
- 200703 (31)
- 200702 (28)
- 200701 (31)
- 200612 (31)
- 200611 (30)
- 200610 (30)
- 200609 (27)
- 200608 (7)
- 200607 (1)
- recent trackback