• ベストアンサー

SUBSTITUTEについて※複雑です

RIGHT(SUBSTITUTE(A1,B1,""),3)    A     B 1 1508080  080 上記の様な関数を使用して、 右から4~6桁目の数字を取り出しています。 今までちゃんと出来ていたのですが、 A1に「1508080」という数字が入ったときに、 「508」を取り出したいのですが、 結果が「080」となってしまいました。 SUBSTITUTEの計算で、右からではなく、 左から080を抽出しているんだと思いますが、 どうすれば結果が「508」になるのでしょうか? 説明が下手ですみません。

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

  • ベストアンサー
  • EL-SUR
  • ベストアンサー率76% (83/108)
回答No.1

よくわかりませんが、 「右から4~6桁目の数字」を取り出すなら =LEFT(RIGHT(A1,6),3)*1 とか =IF(LEN(A1)<6,"",LEFT(RIGHT(A1,6),3)*1) ではダメなんでしょうか? 結果が文字列でいいなら、*1 は不要です。

spring777
質問者

お礼

文字列でも大丈夫です。 =LEFT(RIGHT(A1,6),3) で解決しました。 どうもありがとうございました。

その他の回答 (7)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

#7さん、こんにちは。 回答者どうしでのこのような質疑応答は、たぶん削除対象になりますが、この先のために、少し説明をさせていただきます。 私は自分の回答を作って載せる段になって、#4さんのご指摘は、ハッとさせられました。 あなたの回答が、間違いとかではありません。#4さんのご指摘には「是非がない(正しい・間違いない)=事実だ)」ということです。その意味は、「あれこれ話を盛り上げていっても、最初から、質問者の反応がなければ、それは、端に『右から4~6桁目』という回答しかないのだ」という意味に受け取りました。 つまり、今、自分の回答を載せても意味がない、ということです。 元のご質問の中に、 >   A     B >1 1508080  080 >右から4~6桁目の数字を取り出しています。 >今までちゃんと出来ていたのですが、 で、きちんと、A1,B1 の取り出しの関係に、ご質問者は、その説明をされていません。最初に発言されたあなたと、#4さんの間には、時間的な経過があります。 あなたは、「ダメなんでしょうか?」と聞いておられます。しかし、質問者の応答なしで、話を進めていって、回答が一人歩きしているに過ぎないということです。しょせん、元の質問者の反応なくしては、この種のものは、知恵を凝らして、スレッドを進めても実りは少ないということを端的に書いただけのことです。 こういうのは、あまり説明をすると価値が減ってしまいますが、分る人には分るということなのでしたが。(^^;。お気を悪くされたのでしたら、申し訳ありません。別に、誰それの回答が正しいとか間違いとかではないのです。

spring777
質問者

お礼

仕事中の投稿の為、お礼が遅くなり ことが大きくなってしまってびっくりしています。 >A1,B1 の取り出しの関係 ですが、B1は右から1~3桁目です。 以前に「教えて」で同じ使い方の質問があり そこで見た数式を使用していました。 でも、複雑な関数を使用しなくても 簡単な関数でできたので、 今回はとても勉強になりました。 どうもありがとうございました。

  • EL-SUR
  • ベストアンサー率76% (83/108)
回答No.7

>#5 >是非なく#4が正解のような気がするのですが。 ってことは、是非なく#4以外は不正解ってこと? #4は、単に#1をコピーしただけにしか思えないけど、、、 何か違いがあるなら、後学のために知りたいものです。

spring777
質問者

お礼

EL-SURさんの教えて頂いたのでできました。 仕事中の投稿なので、返事が遅くなってすみません。 不快な思いをさせてしまいましたね。 数値・文字と両方の方法を教えて頂けたので 今後の参考にもなりました。 ありがとうございました。

回答No.6

僕も#4さんと同じ Left(right(x,6),3) かなと思いました。 ただ、他にも何か書式設定とか、入力上の制約があえるのでしょうか?(A列に入れるのが数字と文字列が混在している、あるいは入力する桁数が一定でないetc) そうした場合は文字数をカウントして、それぞれの条件のときの文字数を設定すればすむのではないかとも思いますが、書かれている情報だけでは判断がつかないですね...

spring777
質問者

お礼

A列の文字数は一定ではありませんが、 他に制約はありません。 =LEFT(RIGHT(A1,6),3) で解決しました。 どうもありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 ご質問の文章どおりでしたら、是非なく#4が正解のような気がするのですが。 その問題で、私の回答が成立するには、 1 1508080  080 B1が文字列でなくてはなりません。 =MID(A1,2,SEARCH(B1,"*"&A1)-1) ひとつかふたつ条件が足りないような気がしますね。

spring777
質問者

お礼

文字列で大丈夫です。 =LEFT(RIGHT(A1,6),3)で解決しました。 どうもありがとうございました。

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.4

右から4~6桁目の数字を取り出しています =LEFT(RIGHT(A1,6),3) とか =MID(A1,LEN(A1)-5,3)

spring777
質問者

お礼

=LEFT(RIGHT(A1,6),3)  でできました。 どうもありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

以下の方法はどうでしょうか。 =RIGHT(SUBSTITUTE(A1&"a",B1&"a",""),3)

spring777
質問者

お礼

=LEFT(RIGHT(A1,6),3) で無事に解決しました。 どうもありがとうございました。

回答No.2

すいませんが質問の内容が理解できません。 B1のセル内に一行目の関数を入れたいのですか? (そもそもそれだと循環関係でエラーになると思います) またRIGHT関数は文字列の末尾から○文字分を切り出すというものですから、この例で080となるのは正しいと思いますが...

spring777
質問者

お礼

説明が下手ですみません。 例えなので、セルはどこでも大丈夫です。 以前に教えて!gooで見た数式を使っていたのですが、 解決しました。 ありがとうございました。

関連するQ&A