• ベストアンサー

文字列末尾についている数字を削除する

野菜の名前の最後にコード番号がついているデータがあり、この後ろについている数字を削除したいと思っています。 (コードの桁数は0~3桁で一定ではありません) ネットを探していて以下のような関数を参考にやってみたのですが、 =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))-1) コメやトマトなど無事削除できるものもあるのですが、ダイコンやヤツガシラ、カブ、キャベツなどが削除されません。 どうやらカタカナでかつ濁点や半濁点が混在しているものは総じてだめっぽい感じもします。 <参考>現在の結果 変換前       変換後 カブ1       カブ1 キャベツ1     キャベツ1 きゃべつ1     きゃべつ ブロッコリー1   ブロッコリー1 ぶろっこりー1   ぶろっこりー キュウリ1     キュウリ きゅうり1     きゅうり トマト1      トマト コメ1       コメ 漬物1       漬物 間引1       間引 間引ダイコン1   間引ダイコン1 ダイコン1     ダイコン1 大根1       大根 だいこん1     だいこん とりあえず自分のできることからと、 すべてをひらがなに一旦変えてから削除してカタカナに直すことも考えました。 でも、対象の商品数が多すぎて手作業ではとても・・・と挫折してしまいました。 (カタカナ→ひらがな変換関数とかあるのかな?) なにかよいお知恵を拝借できればと思い、投稿させていただきました。 マクロはあまり理解できませんが、もしそれしかなければ がんばりますのでよろしくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

=JIS(LEFT(ASC(A1),FIND({1,2,3,4,5,6,7,8,9,0},ASC(A1)&"1234567890")-1)) FIND関数で半角文字を対象にしたため濁点が独立して1文字とカウントされることにより、LEFT関数の文字数と合わなくなったのがおかしい原因です。

naonoan
質問者

お礼

ありがとうございます! すばらしい。なるほど納得です。 そうか、カタカナをASCかけているから、濁点も一文字扱いになるのですね 確かに言われてみると、なるほどよく理解できました。 だからカタカナ濁音や半濁音の文字列のみ ずれ込んでうまく削除されなかったのですね。 勉強になりました!

その他の回答 (3)

  • laputart
  • ベストアンサー率34% (288/843)
回答No.3

=LEFT(A1,LEN(A1)-1)で強制的にセルA1の一番右側の 文字を消すことが出来ます。 Leaf(A1,n) は A1の文字列からn個を選択するという意味です Lan(A1)はA1の文字数 よってA1の文字数をカウントして(例5文字)最後の文字を削除 して表示するという意味です。

naonoan
質問者

お礼

回答ありがとうございました 野菜名の後ろにつくコードが例では1桁のみなのですが、 実際はないものから3桁まで可変なため、 リテラルでの1文字削除では結局うまく対応できないのです・・・ LENではなくもとのMINとFIXEDなどを組み合わせて なんとかするとうまくいきそうな気はするのですが どうしてだかカタカナでかつ濁音、半濁音がつくと だとうまくいかないようです。

noname#19676
noname#19676
回答No.2

=IF(AND(RIGHT(A1,1)>="0",RIGHT(A1,1)<="9"),LEFT(A1,LEN(A1)-1),A1) これではどうでしょうか。

naonoan
質問者

お礼

ありがとうございます。 早速やってみました。 コードが1桁のものだと無事思ったように削除されました! が、残念ながらコードがないものと1桁のものは 大丈夫なのですが、2桁~3桁あるコードのもの うまくいきません。 でも、少し工夫するとできそうですね。 ちょっと考えてやってみます

naonoan
質問者

補足

ありがとうございます。 根性技でなんとか0~3桁対応にしてみたらできました! =IF(AND(RIGHT(A1,3)>="100",RIGHT(A1,2)<="999"),LEFT(A1,LEN(A1)-3),IF(AND(RIGHT(A1,2)>="10",RIGHT(A1,2)<="99"),LEFT(A1,LEN(A1)-2),IF(AND(RIGHT(A1,1)>="0",RIGHT(A1,1)<="9"),LEFT(A1,LEN(A1)-1),A1))) 我ながらちょっとあんまりな気もしますが、とりあえず出来たはできた!ということで本当にありがとうございましたです! でも、現在付与されている末尾のコードはこの先また変動する(4桁~ドンドン増えて行く)可能性があるので 桁数の変動に影響されない関数にならないだろうかとも 思ってみたり? でもなんとかこれで無事お盆休みに入れそうです。

noname#210617
noname#210617
回答No.1

=LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&1234567890))-1) にしたらいいのではないかと。

naonoan
質問者

お礼

回答ありがとうございます。 今回の質問はこの関数を使ってみたのですが、 濁音や半濁音のあるカタカナではできないという ものでした。 もう少しがんばってみます

関連するQ&A