- ベストアンサー
エクセルのFIND関数について
エクセルのFIND関数は、特定の文字列が左から何文字目にあるかを求める関数であると理解していますが、右から何文字目にあるかを検索出来ないものでしょうか? なお、検索する文字列は数値以外であり右より一番右にある文字の右からの文字数を検索したいです。 対象文字列 右から数値以外の一番最初の文字の文字数 30%1 → 2 200mg20 → 3 2.5mg1 → 2 1 → 0 25%1 → 2 0.5g1キット(生理食塩液100 → 4 1010 → 0
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ユーザー定義関数ですが、こんな感じで如何ですか。 書式: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
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
ユーザー定義関数ですが 数字を取り除き(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
お礼
有り難う御座いました。 出来ました。
- diashun
- ベストアンサー率38% (94/244)
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()」を選択すると、検索対象のセルを指定するダイアログが表示されるので、セルを指定して実行してください。
お礼
有り難う御座いました。 出来ました。
- diashun
- ベストアンサー率38% (94/244)
diashun です。 ご希望の検索条件は 1.文字列の右側からの検索 2.数値は無視する 上記条件から考えると、Excelの既成関数では該当するものはありません。 ただしマクロを使えば「StrReverse」関数で実現できます。 マクロをご理解いただけるなら、補足にてお知らせ下さい。
補足
早速の回答有り難う御座いました。 「StrReverse」は分かりませんが、多少、マクロを作成したことがあります。 また、ユーザー定義関数で出来ますかね?
お礼
有り難う御座いました。 出来ました。