• ベストアンサー

エクセルのFIND関数について

エクセルのFIND関数は、特定の文字列が左から何文字目にあるかを求める関数であると理解していますが、右から何文字目にあるかを検索出来ないものでしょうか? なお、検索する文字列は数値以外であり右より一番右にある文字の右からの文字数を検索したいです。  対象文字列    右から数値以外の一番最初の文字の文字数 30%1       →   2 200mg20    →   3 2.5mg1     →   2 1          →   0 25%1       →   2 0.5g1キット(生理食塩液100            →   4 1010       →   0

  • list
  • お礼率50% (206/408)

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

ユーザー定義関数ですが、こんな感じで如何ですか。 書式:FindRevStr(文字列式) 使用例: =FindRevStr("200mg20")   ---> 3     セルA1に"2.5mg1" が入力されているとき、=FindRevStr(A1) ---> 2 標準モジュールに下記コードを貼り付けます。 Function FindRevStr(S As String) As Integer Dim N As Integer Dim P As Integer For N = Len(S) To 1 Step -1   P = P + 1   If Not IsNumeric(Mid(StrConv(S, vbNarrow), N, 1)) Then Exit For Next N If N = 0 Then P = 0 FindRevStr = P End Function

list
質問者

お礼

有り難う御座いました。 出来ました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

ユーザー定義関数ですが 数字を取り除き(Replace),最右文字を取る(Right)で 文字を掴めます。 Function rchp(a) s = a n = Array("0", "1", "2", "3", "4", "5", _ "6", "7", "8", "9", "0", "1", _ "2", "3", "4", "5", "6", "7", "8", "9") For i = 0 To 19 s = Replace(s, n(i), "") Next i If s = "" Then rchp = 0 Else x = Right(s, 1) rchp = Len(a) - InStr(1, a, x) + 1 End If End Function 標準モジュールに貼りつけ、シートでA列にデータがあるとき、例えばB列に=RCHP(A1)と入れます。 (テスト例)最右文字と右からの何文字数目 12as34 s 3 as4 s 2 a3b12267g57fDH56 H 3 30%1 % 2 200mg20 g 3 2.5mg1 g 2 1 0 25%1 % 2 0.5g1キット(生理食塩液100 液 4 1010 0

list
質問者

お礼

有り難う御座いました。 出来ました。

  • diashun
  • ベストアンサー率38% (94/244)
回答No.2

diashun です。 ユーザー定義関数として作ってみました。 以下のコードを使用するエクセルのVBAエディタで、標準モジュール(Module1)にコピーしてください。↓ ''ここから************************ Option Explicit Function Get_RevStr(ByRef rCell As Range) As Integer Dim varSerch Dim varRev Dim i As Integer Dim iKeta As Integer varSerch = Range(rCell.Address).Value varRev = StrReverse(varSerch) iKeta = Len(varRev) For i = 1 To iKeta Select Case Mid(varRev, i, 1) Case 0 To 9 Case Else Get_RevStr = i Exit For End Select Next i End Function ''ここまで************************ このあと、結果を表示したいセルを選択し、関数でユーザー定義関数「Get_RevStr()」を選択すると、検索対象のセルを指定するダイアログが表示されるので、セルを指定して実行してください。

list
質問者

お礼

有り難う御座いました。 出来ました。

  • diashun
  • ベストアンサー率38% (94/244)
回答No.1

diashun です。 ご希望の検索条件は 1.文字列の右側からの検索 2.数値は無視する 上記条件から考えると、Excelの既成関数では該当するものはありません。 ただしマクロを使えば「StrReverse」関数で実現できます。 マクロをご理解いただけるなら、補足にてお知らせ下さい。

list
質問者

補足

早速の回答有り難う御座いました。 「StrReverse」は分かりませんが、多少、マクロを作成したことがあります。 また、ユーザー定義関数で出来ますかね?

関連するQ&A

  • エクセルの関数で左から文字まで

    エクセルの関数で左から(数字以外の)文字までの文字数を返す関数はどのように表せばよいのでしょうか。 具体的には 25 34 345 ああああ54525 156 のような文字列で初めの「あ」までの文字数「11」を返す関数が知りたいです。スペースも入っています。 Findやlenを使って色々考えましたがどうも上手くいかずといった感じです。よろしくお願い致します。

  • エクセルのFIND関数について

    エクセルの関数でFINDというのがあります。文字ストリングの中に 指定する文字列があれば、最初から何番目かを返す関数です。 質問は、もし見つからない時は式をいれたセルに「#VALUE!」 と表示されますが、IF文の中で使うような時、何と言う値で聞けば良いのでしょうか。””やNULLやNOTHINGやFALSEや-1でやって見ましたが上手く行きません。 =IF(FIND(”市”、A1、1)=○○、A1、” ”)の○○は何でしょう。(A1セルの文字列に「市」がなければA1を持ってきて、あれば ブランクとする.)

  • excelのfind関数について

    複数のキーワードで検索させるにはどうしたらいいのでしょうか? 例) 1A              B 2秋は冬色、柿が実る~   1 3桜の咲く季節、子ども~ 4柿の葉は医薬効能~ 5柿のしぶみは色が~    1 キーワードは、柿・色 でA列を検索させ、両方あればB列に1を立てさせたいのです。 このキーワードは臨機応変に増やしたいので、セルで指定をしたいです。 シンプルな関数を希望します。 1つのキーワードの場合は、IF関数とfind関数で成功しました。っが、複数になるとfind関数では指定できないようなのです。。 宜しくお願いいたします。

  • エクセルのFIND関数の複数セル参照について

    C4=LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称])  「テーブル1」の「アドレス」列を部分一致で検索し、「B4」セルの文字列に該当する項目があったら、「テーブル1」の「名称」列のデータを「C4」セルに表示するよう、インターネット上の情報を参照しながら数式を組んでいます。  ところが、「B4」セルの文字列に該当する項目があるときはいいのですが、該当項目がない場合は「#N/A」と表示されるため、「IF」関数を追加し、以下のようにしたところ、うまく動きませんでした。 C4=IF(COUNT(FIND(B4,テーブル1[アドレス])),LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用")  「数式の検証」で調べたところ、「LOOKUP」関数内の「FIND」関数は「テーブル1」の「アドレス」列の各セルをそれぞれ参照しているのに対して、「COUNT」関数内の「FIND」関数は同じ行(C4の場合は4)の「テーブル1」の「アドレス」列しか参照していませんでした。 「LOOKUP」関数内の「FIND」関数のテーブル1[アドレス]: {"アドレス1";"アドレス2";"アドレス3"} 「COUNT」関数内の「FIND」関数のテーブル1[アドレス]: "アドレス4"  参照内容が異なるのはなぜでしょうか。  この場合、どのようにすればよろしいのでしょうか。  また、「LOOKUP」関数は「旧バージョンとの互換性を維持するためのもの」となっており、代わりに「VLOOKUP」や「HLOOKUP」、「MATCH」関数などで代用はできないのでしょうか。  何卒ご教示よろしくお願いいたします。

  • エクセル FINDとCOUNTを行う関数

    いつもお世話になります エクセルの関数について教えてください A列に文字データが入力されています。 文字数はバラバラです。 「/」の記号の数をB列に表示させる関数はありますか? A1 ****/****/**** A2 ***/*** A3 ***/****/*** B1 2 B2 1 B3 2

  • VBA/FIND関数を使っての先頭文字列の検索方法

    エクセルVBAにてFIND関数を使って、 文字列検索⇒コピー&ペーストのマクロを作成しているのですが、 どうしても、先頭文字列から検索をする方法がわかりません。 たとえば、 あいうえお いうえおあ おあいうえ えおあいう という文字列から「あいう*」を検索したい場合、 1行目だけを抽出したいのですが、 1,3,4行目が抽出されてしまいます。 find関数では先頭文字からの検索はできないのでしょうか? もし、不可能な場合、先頭文字からの検索を行うにはどのように行えばよいでしょうか? アドバイス、よろしくお願いいたします。

  • エクセルで文字の検索

    例えば以下のような数値データの中から「A」または「B」または「C」を検索して、その文字数を取り出したいのですが、FIND関数の検索文字列にOR関数を使ってA、B、Cを指定すれば、エラーになります。 この場合使える関数があれば教えていただきたいです。 よろしくお願いします。 123A456 123B456 123C456

  • ExcelのFIND関数について

    A->(1) B->(2) C->(3) という変換は,IF関数を使えばOKかと思います。 ですが、好みで次のように・・・。 =IFERROR(cutStr("(1)/(2)/(3)","/", FIND(Y4,"ABC",1)), "") cutStr()は、文字列を切り取る自作関数です。 ? cutStr("A/BB/CCC","/",1) A ? cutStr("A/BB/CCC","/",2) BB ? cutStr("A/BB/CCC","/",0) で、冒頭の式は Y4=A ---> (1) Y4=B ---> (2) Y4=C ---> (3) と、Y4に値があれば確かに間違いなく変換します。 しかし、 Y4=null ---> (1) と、誤変換します。 原因は、=FIND("","ABC",1) の値が1だからです。 これも、IF関数を使えばOKかと思います。 が、好みでこれも避けたい。 そこで、 =IFERROR(cutstr("(1)/(2)/(3)","/", findChar(Y4,"ABC")), "") と、合致しない場合は0を戻す findChar()を自作しました。 これで、一応は目的は達成しましたが、どうにも腑に落ちません。 そこで、質問します。 質問:FIND関数は、第一引数がnullの場合に1を返す仕様なのでしょうか?

  • エクセルの関数を教えてください!

    840   1 1260  1 1260  1 1260  1 1890  2 1890  1 1890  1 2310  3 2646  1 2646  1 2940  4 この2列の数字は左側の数字に対して、右側が その数字の個数なのですが、 左の数字が統合され、それに対して右の数値が加算される エクセルの関数を教えてください。

  • エクセル関数を教えてください!

    840 1 1260 1 1260 1 1260 1 1890 2 1890 1 1890 1 2310 3 2646 1 2646 1 2940 4 この2列の数字は左側の数字に対して、右側が その数字の個数なのですが、 左の数字が統合され、それに対して右の数値が加算される エクセルの関数を教えてください。

専門家に質問してみよう