• ベストアンサー

エクセルで文字列を数式に取り込む関数

セルB列に文字列で仮に 0.85*0.9 のような文字列の入力があったとします。 これをC列のセルに =ROUND(0.85*0.9.2)の計算を行った結果の答えである 0.77 が表示されるようにしたいのです。 =ROUND("="&ASC(B2),2)とやるとエラーになってしまいます。(ASCを使ったのは全角で入力があった場合を想定しました。) いい方法はないでしょうか?

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

  • ベストアンサー
  • tamazo-
  • ベストアンサー率60% (35/58)
回答No.6

VBAでも良いという事なので、 Sheet1でB1からB20に計算式の文字列があるという前提で、 Sub test() Dim i As Long Sheets(1).Select For i = 1 To 20 If Cells(i, 2).Value <> "" Then Range("c" & i).Formula = "=ROUND(" & Cells(i, 2).Value & ",2)" End If Next End Sub でどうでしょう。 (0.82+0.05)*0.9 でも0.78と表示されました。

AQUALINE
質問者

お礼

ありがとうございます! 完璧に出来ました。ただ、どうしてもわからないのは全角を変換してる様子もないのになぜC列にはちゃんと半角ではいるんでしょう?不思議です。

その他の回答 (6)

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

> 要は、あるシートにあとで確認するため計算過程を書いてもらい、 > 同時に別のセルにその答えをだしたいのです。 そういう使い方ですと、計算式の文字列を修正したときに、即再計算 されなくてもいい ということになりませんか。 もし、そうだとすると、ユーザー定義関数を使用するまでもありません。 No.6 のように、その文字列式を他のセルの計算式に代入するだけで 出来ます。(但し、変更時、自動再計算にはなりません。) tamazo-さんのを参考に作ってみたら良いと思います。 シートの詳しい状況を教えて頂ければ、コーディングしてもいいですが・・・ なお、ユーザー定義関数は、ブックに保存されますので、配布は出来ます。 Accessの参照設定は、Eval関数(これって凄いです)を使うためですが、 VBAを開発するときだけ必要で、作ってしまえば、配布は、普通に出来ます。  参考まで。

AQUALINE
質問者

お礼

ありがとうございます。 > tamazo-さんのを参考に作ってみたら良いと思います。 ええ、つくってみて完璧に作動したので感激しました。 > Accessの参照設定は、Eval関数(これって凄いです)を使うためですが、 >VBAを開発するときだけ必要で、作ってしまえば、配布は、普通に出来ます そうなんですか。Accessが使えるようになったら勉強してみます。 その節はまたよろしくお願いします。

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

No.3 ですが、Accessが使える環境か確認せずに書いてしまいましたが、 もし、使えないとすれば、同じような方法でするは、関数を作る必要が あります。 もし、必要であれば、作りますが・・・ 使われる演算記号は、*、+、-、/ でいいのですね。 また、他のセルを使ってもいいのであれば、ワークシート関数だけでも できると思います。(演算子の位置を検索し、左右分割します。)

AQUALINE
質問者

補足

VBAでもワークシート関数でも出来るといいんですが。 要は、あるシートにあとで確認するため計算過程を書いてもらい、同時に別のセルにその答えをだしたいのです。 使われる演算は、*、+、-、/ ですが、計算順序により(0.82+0.05)*0.9 のように括弧がはいるケースもあります。 ですから演算子の位置を検索し、左右分割する方法がとれないかもしれません。 B列のセルの文字列をコピーし、不用なスペースを削除し、半角英数に変換してその前に=をつけて別の列のセルに数式として貼り付けるVBAマクロがいいのかと思いますが、やり方がわかりません。

回答No.4

あくまでも全ての計算式が小数第2位×小数数第1位と仮定。 A1に0.85*0.9の文字列が入ってるものとします。 =ROUND(LEFT(A1,4)*RIGHT(A1,3),2) こんな都合よくはいかないですよね(^^ゞ

AQUALINE
質問者

補足

ええ、ざんねんながら。 数値はいろいろな数が入ります。 演算も掛け算だけではありませんので。

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

> いい方法はないでしょうか? VBAでもいいのですね。ユーザー定義関数を使う方法です。 次のようにすれば、出来ますよ。 セルB1 に 0.85*0.9 の文字列が、入っているとします。 ・ Alt+F11 でメニューから[挿入]-->[標準モジュール]を指定します。 ・ VBEのメニューから[ツール]-->[参照設定]で、 「Microsoft Access 9.0 Object Library」にチェックを入れ[OK]で閉じます。 ・ コードウィンドウに下記コードをコピーし、貼り付けます。 ・ Alt+Qでウィンドウを閉じ、シートに戻り、任意のセルに  =ROUND(strenzan(B1),2) と入力します。 0.77が表示されるでしょう。 Function StrEnzan(shiki As String)   StrEnzan = Eval(shiki) End Function

AQUALINE
質問者

補足

ありがとうございます。 ざんねんながらアクセスは使えないです。 それから作成したエクセルファイルはわたし以外の人達が大勢、それぞれのパソコンで使うのですが、ユーザー定義関数とは、私以外のパソコンでも機能するのでしょうか?

  • yuknya
  • ベストアンサー率32% (112/345)
回答No.2

#1です。 文字列を数式に変換する関数はありません。 >B列に20行くらいそういう式が文字列ではいります。 20行程度でしたら、手動で、文字列の頭に「=」を挿入するのでは だめなのですか? これで数式になるのですが・・・ http://moreexcellent.cool.ne.jp/excel/function_char.htm 文字列関数

AQUALINE
質問者

補足

ありがとうございます。 「=」だけではなく、ROUND等も入れますし、これから頻繁に行う作業のものですからなんとかならないかと思った次第です。 手動しか無理ならコピー&ペースト、「=」等の追記をマクロ自動記録でやってみたところ、 ActiveSheet.Paste Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=ROUND(0.85*0.9,2)" という具合に、個別の数字がでてしまい応用できませんでした。 困りました!

  • yuknya
  • ベストアンサー率32% (112/345)
回答No.1

文字列の形式は、全部間に「*」が入っているのですか? その場合は、区切り位置機能を使用したらどうでしょう? データ → 区切り位置 → 次へ → その他チェック *を入力 →次へ → 完了 とすれば 数値としてそれぞれ 0.85 と  0.92 に数値として分割できます。 あとは、数値に変換できましたので、式に当てはめれば計算できます。 ただし、この場合区切り位置に使う、「*」は全角と半角が混在していては だめです。 数字は、半角・全角どちらでも大丈夫です。

AQUALINE
質問者

補足

さっそくありがとう御座いました。 演算記号は*、+、-、/があります。 また、B列に20行くらいそういう式が文字列ではいりますので、自動的に計算できる方法を探しているのです。

関連するQ&A

  • 文字列の数式を計算したいです。

    文字列の数式を計算したいです。 A1セルに文字列 1+2 と入力し A2セルにその答えの 3 を返したいのですが、どうすればよろしいでしょうか? よろしくお願いします。

  • エクセル関数で文字列の中のスペースの有無を調べたい。

    エクセル関数について教えてください。 全てが半角のはずの文字列・A1セルについて、下記について調べたいです。 1.同列(A列)の他のセルに入力されている文字列とのダブリチェック(同じ文字列がないかの確認)     *ダブリがある場合"ダブリ"表示 2.A1の文字列中のスペースの有無        *スペースがある場合"スペース"表示 3.A1の文字列中に全角が混ざっていないか      *全角がある場合"全角"表示 1.については、 =IF(COUNTIF(A:A,A1)>=2,"ダブリ","") の関数を使用してチェックが出来ると思うのですが、 2.については、関数TRIM 及び 置換での削除方法、3.については、 関数ASC での半角変換 しか手段が見つかりませんでした。 上記のものをマクロを組んでいる中に組み込みたいので、出来れば、上記3つの結果をひとつのセル(C1)に表示させたいのですが、可能でしょうか? *A1セルに上記3つが当てはまる場合、C1セルに "ダブリスペース全角" と表示させたい。 どれについて引っかかっているのかがわかればいいので、記号などに置き換えてもかまいません。 可能な限り調べては見たのですが、私の知識ではどうにもなりませんでした。 もし、いい案などがあればご紹介してください。 宜しくお願いいたします。

  • Excelで文字列の数式の結果を表示するには?

    過去ログ等調べたのですが、ぴったりくるものがなかったので質問させてください。 Excelで文字列として数式を入力して、 別のセルで計算結果を小数1桁でroundして表示させたいです。 数式は四則演算と( )です。 ファイルを共有しているので、アドインは使いたくないのですが、何かいい方法はあるでしょうか? よろしくお願いします。

  • Excelで文字列を数式として認識させる関数

    A列に入力された文字列(例:"1+1")を、B列でA列の文字列(数式)の計算結果を算出させたいのですが、そのような関数ありますか? できれば、VBAではなくExcelでやりたいです。 OSはXP、Excel2003です。 よろしくお願いします。

  • エクセルで数字の文字列を計算させたくないのですが、うまく出来ません。良い方法はないでしょうか?

    エクセル2003で、下記のようにセルに入力したとします。    A   B   C 1  10   20 2  11  ’21 3  13   14 4 ※B2は「’」をつけて数字の文字列として認識させています。 B4のセルに、=SUM(B1:B3)とすると、うまく34となってくれますが、 C2のセルに、=A1+B2とすると、32となってしまいます。 当方としては、B2を文字と認識してほしいので、求めている答えは11です。 数字の文字列を文字列のまま処理して、計算させない方法はあるでしょうか? 皆様、ご教授願います。

  • Excelの関数について

    [C1のセル値]-[A1またはB1のセル値] を使って計算したい場合の計算式を教えて下さい。 A列、B列、C列には具体的な数値を入力します。 D列にその結果を表示させる関数を入力したい。 と考えています。 但し、以下の条件を満たす事が必須となります。 (1)A、B、またはCのセルが未入力の場合はDは空白セルのまま。 (2)A、Bいずれかの一方が入力されている場合はCの値を使って計算し結果を表示。 (3)A、Bいずれも入力されている場合はBを優先してCの値を使って計算し結果を表示。 よろしくお願いします。

  • エクセル if関数

    エクセル初心者なのでうまく説明できないのですが、以下のような条件で数式を入力したいのですが教えていただけないでしょうか。 例えばなのですが、A1のセルに入力されている文字列に”高橋”を含んでいたならば、C1のセルにB1のセルに入力されている数字×”1500”の計算結果を表示したい。 また同様に、A1に入力されている文字列に”伊藤”を含んでいるならば、C1のセルにB1のセルに入力されている数字×”1000”の計算結果を表示したい。 つまりひとつのセル”高橋”が入力されている場合と”伊藤”が入力されている場合の二つの条件をつけたいのですが、このようなことは可能でしょうか。 宜しくお願いいたします。

  • エクセルで数式が文字列になってしまう

     こんにちは。教えて下さい。  あるセルに対して、例えば「=sum(a1:c1)」のような式を入力すると、結果が表示されずに「=sum(a1:c1)」がそのまま表示されます。  セルの属性に関係あるのかと思って、他の数式の入っているセルをそのままコピー(このときは数式になっている)、数式を書き換えたのですが、書き換えたとたん文字列になってしまいます。セルの書式で「標準」を指定しても変わりません。  どうすればいいのでしょう。  よろしくお願いいたします。

  • EXCEL 文字列分割について

    EXCEL2003を使用しています。 1つのセルに文字列が入力されており、 それを決まったバイト数ずつ別のセルに分割したいと考えています。 例)A1の文字列を6バイトずつ分割したい A1:東京都文京区 ↓ B1:東京都 C1:文京区 これを実現する為に B1に「=LEFTB(A1,6)」 C1に「=MIDB(A1,7,6)」という数式を入力しました。 A1の文字列が全角のみ(または半角のみ)なら 上記の数式で問題ないと思うのですが、 分割対象の文字列は全角と半角が混ざっており、 例えばA1の値が 「a東京都文京区」 というようなものだった場合、 B1:a東京 C1:文京 となり、元の文字列にある「都」の文字が消えてしまいます。 元の文字列が上記の様な場合には B1:a東京 C1:都文京 というように値が返されるようにしたいのですが、 どのように実現したらよいでしょうか?

  • 数式を教えてください。(エクセル)

    教えてください。 A1セルに100、B1に200、C3に-300 A2セルに-50、B2に50、C3に-50 があるとします。 で、縦の計算法を常に引き算をしたいのです。(A1-A2のように) オートSUMの場合、Aの列はちゃんと計算できると思うのですが、そうするとBの列は250になってしまいますよね。 この答えは200-50=150としたいのです。 またC列は、-300引く-50で、答えは-250としたいのですが・・・ マイナスを認識しつつ、セルの数値がプラス・マイナスにかかわらず すべて引き算計算をしたいのですが、 そういう数式ってありますか?

専門家に質問してみよう