[[20041008174157]] 『指定した文字以降を抜き取る』(てい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定した文字以降を抜き取る』(てい)

例えば
AUAG40/AG92CU6CD2/CU
といった文字が入ったセルがあるとします。

ここから AUAG40/AG92CU6CD2
だけを抜き取るとしたらどうすればよろしいでしょうか。

/から前のAUAG40や後ろのCUは置換で置き換えることが出来たのですが、

逆は出来ないようなので教えてください。

/の前後は文字数も違うのでLEFTBとかでも出来ないようです。

よろしくお願いします。


 >AUAG40/AG92CU6CD2 だけを抜き取るとしたらどうすればよろしいでしょうか。 
 条件は何なのでしょうか?

 最後の / 以降を無視ですか?

  (INA)


説明不足ですいませんでした。

 / 以降無視です。

(てい)


 それだと、
 AUAG40/AG92CU6CD2/CU  
  ↓
  / 以降無視です。
  ↓
 AUAG40
 では?

 >AUAG40/AG92CU6CD2 だけを抜き取る
 でしょ?

  (INA)


 衝突しました。
 /の数は2個で決まりですか?それなら
=LEFT(A1,FIND("/",A1,FIND("/",A1)+1)-1)
で出来ます。
(ケン)


 / の数は1個の時もあります。

出来れば /CU を抜いて残った部分を表示したいです。

(てい)


 3個以上の時はあります?(ケン)


いまは無いです。

(てい)


 >いまは無いです。
それなら今はこれで対応できませんか?
=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))=1,LEFT(A1,FIND("/",A1)-1),LEFT(A1,FIND("/",A1,FIND("/",A1)+1)-1))
(ケン)


出来ました。

有難うございました。

また何かありましたらよろしくご指導の程お願い致します。

INAさんのはどんなだったんだろうか?
気になりますのでINAさんもし見ているようでしたらよろしくお願いします。

(てい)


 INAさんではありませんが、こんな方法もあるって程度で(3個の/まで対応)
 最後の/以降を消去します。
=LEFT(A1,CHOOSE(LEN(A1)-LEN(SUBSTITUTE(A1,"/","")),FIND("/",A1)-1,FIND("/",A1,FIND("/",A1)+1)-1,FIND("/",A1,FIND("/",A1,FIND("/",A1)+1)+1)-1))
 (川野鮎太郎)

カワアユさんって何でも知ってますね。エクセルの達人って呼ばせて。(浜崎)


 (゚A゚;)ンマッ!ここにも・・・。
 "o(>ω< )o" ヤダヤダ 達人だなんてやめてください・・・。
 本当の達人は、他に沢山いらっしゃいますから(ノ_・。)
 (川野鮎太郎)

 解決済みだとは思いますが、こんな方法はいかがでしょうか?
 =LEFT(A1,IF(COUNTIF(A1,"*/*"),FIND("@",SUBSTITUTE(A1,"/","@",LEN(A1)-LEN(SUBSTITUTE(A1,"/",)))),"")-1)

 最終の"/"を検索し、"@"に置き換えて"@"の文字数までを表示します。

 ※"/"の数はいくつでも大丈夫ですが、"@"の文字を使用する(予定がある)場合は
 使用しない記号等に変更してください。

 過去に先生方が作ったものを勝手に使用し編集しちゃいました^^;
 (キリキ)

 お〜その発想がすごい。
(ケン)

 そういえば、過去に同じものがありましたね(^_^A;
 すっかりその手法を忘れてました_/ ̄|○ il||li
 ただCOUNTIFの場所が外側にないといけないのかな・・・。
 /が無いときは""にするんですよね。
 決して揚げ足取りではありませんm(._.)m ペコッ
 (川野鮎太郎)

 多分、以前の式をご覧になっておられたんだと思いますが、
 今回の場合は、
 川野鮎太郎さんがご指摘のように、
 IF(COUNTIF(A1,"*/*")の部分を最初に持ってきて、
 =IF(COUNTIF(A1,"*/*"),LEFT(A1,FIND("@",SUBSTITUTE(A1,"/","@",LEN(A1)-LEN(SUBSTITUTE(A1,"/",))))-1),A1)
 とした方が、
 "/"がない場合。エラーが出なくなりますね。
 (kkk)


  >INAさんのはどんなだったんだろうか?
 質問が不明瞭だったので回答させて頂いただけで、
 残念ながら私にはとてもこんな難しい数式を作るスキルはありません。 
 あまり数式を必要としていないので、習得するモチベーションも無いです・・。
 期待させてごめんなさい。(/_;。)
  (INA)

 衝突しました(2回)

 おぉ〜  わざわざkkkさんにまでご足労頂きまして・・・
 申し訳ありませんm(。。)m

 川野さん、おっしゃる通りでございました(><)

 ていさんの言っておられるのが”抜き出す”ですので、改めてこれでいかがでしょう?

 =IF(COUNTIF(A1,"*/*"),LEFT(A1,FIND("@",SUBSTITUTE(A1,"/","@",LEN(A1)-LEN(SUBSTITUTE(A1,"/",))))-1),"該当無し")
 (キリキ)

みなさま大変スゴーイです。

いろいろな回答ありがとうございます。

また何かわからないことがありましたら、宜しくお願いいたします。

(てい)


 おはようございます。
すでに解決済みではありますが、簡単なユーザー関数を作ってみました。
標準モジュールに↓をコピーして
Public Function MyLeft(MyRng As Range, MyStr As String)
Dim i As Long
i = InStrRev(MyRng.Value, MyStr)
If i > 0 Then
    MyLeft = Left(MyRng.Value, i - 1)
End If
End Function
=MyLeft(A1,"/")
とするとA1の"/"以降の文字を無視します。
InStrRevはExcel2000から使用できるInStrの反対の働きをする関数です。
指定した文字を後方から検索してその位置を返します。
それを、Left関数を使って取り出しています。
指定された文字がない場合や指定されたセルが空白の場合は「0」が返ります。
一応、ご参考までにと思いまして。。
ではでは、v(=∩_∩=)v
(SoulMan)

 ご質問を勘違いして、/と/とではさまれた一番右の文字列の抽出と思ってしまいました。
 既にご回答がでていますので、配列数式で Ctrl+Shift+Enterとしないものを書いてみました。
 99文字まで対応しています。                         (LOOKUP)

 =LEFT(A1,COUNT(INDEX(FIND("/",A1,ROW(2:99)),)))

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.