- ベストアンサー
文字列末尾についている数字を削除する2
先ほど締め切ったのですが、 大変申し訳ありません、再質問をさせてください。 (初質問の上に不手際続きで本当に申し訳ありません) 前回質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2333617 カタカナ濁音がある場合に、 =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))-1) を使うとうまくいかず、 =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))) でなんとかうまくいったものの、 内容が汎用的ではなく、もう一案いただきたく =JIS(LEFT(ASC(A1),FIND({1,2,3,4,5,6,7,8,9,0},ASC(A1)&"1234567890")-1)) をテストデータでやったところうまくいったので 締め切らせていただいたのですが、 本ちゃんデータで走らせて見たところ、 コードの最左数値が1以外のものではうまくいきませんでした。 つまり カブ1 カブ カブ10 カブ カブ100 カブ カブ2 カブ2 カブ20 カブ20 カブ200 カブ200 もう少しお知恵をいただけるとうれしいです。 ずうずうしくて大変申し訳ありません
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
すみません。min()を入れ忘れました =JIS(LEFT(ASC(A1),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&"0123456789")-1)))
その他の回答 (6)
- NCU
- ベストアンサー率10% (32/318)
#5です。 末尾の数値を削除する関数ですが、多分この方が少しできがいいかな。 Function TrimLastNum(argStr As String) As String Dim i As Integer For i = Len(argStr) To 1 Step -1 If Not Mid(argStr, i, 1) Like "#" Then Exit For Next TrimLastNum = Left(argStr, i) End Function
お礼
VBAは全くの初心者ですが、学生時代やったCの勉強からDoWhileは苦手で(笑) 無理やりいつもFor文にしてコードやってた者としては For文のほうがまだ頭になじみやすいので、 大変助かります。 それでも時間がかかるでしょうけど、 がんばって勉強してみます。 日本語で書くとこんな感じかな?などと・・・・ あってるんだろうか・・・ Iを一個ずつ足す 対象値のI桁目の1文字が文字列でなかったらiから1引いて脱出 繰り返す 左から数字になる直前までの桁数で対象値を削除する まだ職場なので、ニュアンスしかつかめませんが、 午後から夏休みにVBAの本買ってきて、チャレンジする気になって きました。ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 私のは、こんな式です。もうひとつの定石です。 =LEFT(A1,MATCH(FALSE,INDEX(ISERROR(MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1)*1),,),0)-1) ROW(INDIRECT("A1:A"&LEN(A1))) この部分は、キメウチで、 最高、20文字までなら、 例: ROW($A$1:$A$20) に入れ替えてもよいです。 これは、全角、半角、混ざってもよいですが、エラー処理がされていませんので、空白セルには、エラーが出ます。
お礼
MATCH関数もINDEX関数も本当の基本的な使い方 しかやったことはないですし、 INDIRECT関数は初めての体験になります。 この夏休みに勉強させていただきます。 ありがとうございました!
- NCU
- ベストアンサー率10% (32/318)
末尾の数値を削除する関数です。 Function TrimLastNum(argStr As String) As String Dim i As Integer i = Len(argStr) If i = 0 Then Exit Function Do While Mid(argStr, i, 1) Like "#" i = i - 1 Loop TrimLastNum = Left(argStr, i) End Function
お礼
VBAは絶賛挫折中ですが、いつかはチャレンジしたいです! でも、どこから取り掛かってみたらいいのか わからなかったので、このコードを参考に 念願のループチャレンジ。 きっかけをありがとうございます
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 数字をカットするのだから、置換でいいんじゃないかなぁ... 0~9までの9回の操作なので関数を考えてるより早いですよ。 多分 2 分もかからない。 何だか話の流れに逆らってます。関数の勉強というご質問で あれば、すみません。
お礼
ありがとうございます。 0~9なら我慢もできるのですが、 現状では なし~999なんで、 1000回続ける気力がありませんでした(汗) そして今後は桁数が増えて行くこともあり、 関数で勉強してみたかったのです。 独り言 コード体系を自分で決めたかった・・・・(泣) (できれば桁数は固定化したかったですぅ)
補足
あ、そうか、よおく考えてみたら 「~を含む」でやると9回で済みますね。 置換も中々あなどれませんね。 今後の参考にさせていただきます。 感謝
- mshr1962
- ベストアンサー率39% (7417/18945)
上記の式の場合、2以降の数値より1が先に見つかる為ですね。 =JIS(LEFT(ASC(A1),MIN(FIND({1,2,3,4,5,6,7,8,9,0},ASC(A1)&"1234567890")-1))) のように数値が見つかった位置の最小値で切り取るようにすればOKです。
お礼
無事できました。 ありがとうございました。 日ごろはmin関数は使わなくて、 色々やり方があるのだと勉強になりました
=JIS(LEFT(ASC(A4),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A4)&"0123456789")-1))) 先の回答にはminがなかったのですね。
お礼
ありがとうございました よくみたらそうでした(笑) 頭からあると仮定してコピペしていたので・・・ 無事出来ました、ありがとうございます!
お礼
すいません、週末がお休みな職場だったので、 お返事が遅れました。 お盆返上できた甲斐がありました 私こそよくみないで使ってしまったので、 これで無事何とかなりました。 もう少し自分の頭でも考えられるように勉強したいです。 感謝