- ベストアンサー
データが「数値と文字列」の組み合わせのセルにおいて、数値部分だけを取得する方法
- データが「数値と文字列」の組み合わせのセルにおいて、数値部分だけを取得する方法を教えてください。
- 文字列として格納されている数値の部分を数値として取り出す方法について教えてください。
- Excelの関数を使用して、文字列から数値部分だけを取得する方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
元のデータが数字+(文字)が信頼できるなら、少々手抜きですが Valが使えますね。 文字を数値に変換する関数です。 先頭から数字変換可能な文字を探して、変換できない文字以降は無視しますので、(文字)部分以降は無視されます。 信頼できるならってのは、先頭から変換できない文字の場合は0を返すこと。 全角数字も変換してしまう事、"&HFF"などの文字を16進数と解釈して変換してしまうこと。 上記に問題がある場合は使用できないって事です。 ※例として書かれたデータであれば使用に問題はありませんが。
その他の回答 (3)
- ToOrisugaru
- ベストアンサー率28% (80/280)
別セルに、数値部分と文字列部分を関数にて分割してから VBAで、処理してはどうでしょうか? たとえば、B1セルに以下の関数を入力しておきます。 =VALUE(MID(A1,1,FIND("(",A1,1)-1)) C1セルに以下の関数を入力しておきます。 =MID(A1,FIND("(",A1,1),LEN(A1)) 上記関数を埋め込み後、VBAでB1を参照した場合、B1には105を処理することに なると思います。 文字を入力する場合には、”(りんご)”を処理することになると思います。
お礼
回答ありがとうございます。 >別セルに、数値部分と文字列部分を関数にて分割してから いったん、値を別セルに置き、それを足場に、、、という作戦ですね。 確かにそういう考え方もありますね。 ただ、私が作ろうとしているプログラムは、 その足場となるセルを用意できない(ビジュアル的に、そうしたセルを作りにくい)仕様なので、 今回に関しては、この方法はとれないんですよね、、、。 ということで、Valで1つずつ処理し、それをFor~Nextで回しながら処理することにしました。 でも、参考になりました。 また色々と教えて下さい。
- bin-chan
- ベストアンサー率33% (1403/4213)
文字列から数値化するために列Bを使用した方が良いかも。 VBAで行く決断なさったのなら、Rangeを渡してForEachで有効なセルのみ 判定しながら抽出しながら計算させたほうがスッキリする気がします。
お礼
補足をありがとうございます。 Val関数で手軽に解決できそうなので、このVal関数を使うことにしたのですが、 その先で、つまずいています。 例えば、A1~A100までの平均を出す場合、 Val(Range("A1").Value) + Val(Range("A2").Value) + Val(Range("A3").Value) + Val(Range("A4").Value) ・・・ Val(Range("A100").Value) この和をとってから、それを、100で割って、平均値を出す、 という方法で現在、検討中ですが、 この方法で、いかに完結に書くか、について、悩んでおります。 どう書くのがスマートでしょうね。 もし、何かアイデアなどありましたら、教えて下さい。 宜しくお願い致します。
- bin-chan
- ベストアンサー率33% (1403/4213)
ワークシート上なら、区切り位置の「その他」で ( を指定するとか。 VBAであれば文字列を配列に分解するSplit関数を使用。 (デフォルトはカンマだが、デリミタを指定できるので)
お礼
教えて頂いたsplit関数という関数で、したいことが出来そうです。 ただ、平均値を求める際に、 average = WorksheetFunction.average(Range(A1:A4)) というようなやり方で今、考えているのですが、 この方法と、split関数を使って、問題を解決するには、 どうしたら良いでしょうか? A1~A4まで、1つずつ、まずsplit関数で、数値にしてから、「A1:A4」の範囲で平均値を出すような感じになるのでしょうか。 VBA初心者であるため、変なことを言っているかもしれません。 なにとぞ、宜しくお願い致します。
お礼
Val関数、これ、なかなか素晴らしいですね。 (当初、このような関数を探していましたのでドンピシャリで、とても嬉しいです。) ただ、下の回答の「お礼欄」にも書きましたが、 平均値を求める際、各セルに対し、Val関数を適用するような方法になるのでしょうか? 具体的に、本件の例で平均値を求める方法は、どのような形になりそうでしょうか。 もし、またよろしければ教えて下さい。