• ベストアンサー

エクセルの文字列検索で何番目の$の位置?

たとえば、$A$1:$AG$25とか$AB$100:$AG$2550という文字列から、 1.文字列末尾の数値を取得する関数はあるでしょうか? 2.3番目の$の位置、4番目の$の位置を取得できる関数はあるでしょうか?

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

  • ベストアンサー
  • moooon
  • ベストアンサー率26% (26/98)
回答No.3

設問の$A$1:$AG$25とか$AB$100:$AG$2550のように、セル範囲をあらわす文字列に限っているのであれば、必ず出現する : を利用して 3番目=FIND("$",A1,FIND(":",A1,1)) 4番目=FIND("$",A1,FIND(":",A1,1)+2) したがって、末尾の数字は =MID(A1,FIND("$",A1,FIND(":",A1,1)+2)+1,5) または =RIGHT(A1,LEN(A1)-FIND("$",A1,FIND(":",A1,1)+2)) セル範囲をあらわす文字列以外の場合はちょっとわかりません。

merlionXX
質問者

お礼

なるほど、これはすばらしい方法ですね。 ありがとうございます。

その他の回答 (7)

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

#7です。 >3番目の$の位置、 値でよければ、 #7のコードの ld = s(UBound(s)) を ld = s(2) と変えると3番目の「数値」が取れます。 字数であればS(0)からS(2)の文字数の和+3のコードを作ると、 出せる(判る)でしょう ーーー 1.の質問に対し、別の解 =RIGHT(A1,LEN(A1)-MAX(IF(MID($A1,ROW(A1:A20),1)="$",ROW(A1:A20),0))) を入れて、SHIFT+CTRL+ENTERを押す。 全体文字数を20以下(A20がそれ)に仮定してます。

merlionXX
質問者

お礼

ありがとうございます。

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

ユーザー関数を使うと2行のコードですみます。 シートでは関数的感覚で、その関数名が使えます。 標準モジュールに Function ld(a) s = Split(a, "$") ld = s(UBound(s)) End Function を貼り付けます。ldの部分(関数名)は既存関数以外の、勝手な英字の名前でよいです。 例データとして A1:A2 に $AB$100:$AG$2550 $A$1:$AG$25 B1に式 =ld(A1) と入れてB2にも式を複写します。ldは関数名と合わせること。 結果 B1:B2 2550 25

merlionXX
質問者

お礼

imogasiさん、いつもありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.6

#4のmshr1962です。 1.の質問の答えを忘れてました。 セルの内容が範囲を示す文字列なら =ROWS(INDIRECT(A1))+ROW(INDIRECT(A1))-1

merlionXX
質問者

お礼

ご丁寧にありがとうございます。

noname#204879
noname#204879
回答No.5

》 1.文字列末尾の数値を取得する関数はあるでしょうか? 「…という文字列」がセル A1 にあると仮定すれば、セル B1、C1 にそれぞれ次式を入力してみてください。 B1: =MID(A1,FIND(":",A1)+1,99) C1: {=MID(B1,MATCH(TRUE,ISNUMBER(1*MID(B1,ROW(INDIRECT("1:"&LEN(B1))),1)),0),99)*1}   (配列数式)

merlionXX
質問者

お礼

ありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

セルに入力された値が、数式でなければ検索は不可能ではありませんが それ以外の場合はVBAですね。 =FIND("$$",SUBSTITUTE(A1,"$","$$",3)) 上記の式はSUBSTITUTE関数の最後の引数3が順番で3番目の$を$$に変えて、 他の$と区分けした状態でFIND関数で位置を検索してます。

merlionXX
質問者

お礼

これはスマートですね。 何番目に出てくる$を置換できるSUBSTITUTE関数があるのにFINDもSERCHも検索開始位置しか指定できないのはどうしてなんでしょうねえ。 ありがとうございます。

回答No.2

マクロのユーザー関数です。 [Alt]+[F11] で表示される画面の [挿入]-[標準モジュール] に、以下をコピーして ください。 Function FindChar(R, C, N)  Dim i, F   For i = 1 To Len(R)    If Mid(R, i, 1) = C Then F = F + 1    If F = N Then     FindChar = i     Exit Function    End If   Next  FindChar = 0 End Function =FindChar(R,C,N) の形式で入力します。 R:セル(単一)、C:検索文字列、N:何番目に現われる検索文字か です。

merlionXX
質問者

お礼

ありがとうございます。 すごいですね。 ただ、今回はワークシート関数の応用でと考えておりました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

お望みの関数はありません。  VBAでなら可能です。 質問の目的はなんでしょうか? VBA中の処理方法ですか?

merlionXX
質問者

お礼

ワークシート関数を知りたかったのです。 ありがとうございます。