重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

セルB列に文字列で仮に 0.85*0.9 のような文字列の入力があったとします。
これをC列のセルに =ROUND(0.85*0.9.2)の計算を行った結果の答えである 0.77 が表示されるようにしたいのです。

=ROUND("="&ASC(B2),2)とやるとエラーになってしまいます。(ASCを使ったのは全角で入力があった場合を想定しました。)

いい方法はないでしょうか?

A 回答 (7件)

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と表示されました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/03/06 12:45

> 要は、あるシートにあとで確認するため計算過程を書いてもらい、


> 同時に別のセルにその答えをだしたいのです。

そういう使い方ですと、計算式の文字列を修正したときに、即再計算
されなくてもいい ということになりませんか。

もし、そうだとすると、ユーザー定義関数を使用するまでもありません。

No.6 のように、その文字列式を他のセルの計算式に代入するだけで
出来ます。(但し、変更時、自動再計算にはなりません。)

tamazo-さんのを参考に作ってみたら良いと思います。

シートの詳しい状況を教えて頂ければ、コーディングしてもいいですが・・・

なお、ユーザー定義関数は、ブックに保存されますので、配布は出来ます。
Accessの参照設定は、Eval関数(これって凄いです)を使うためですが、
VBAを開発するときだけ必要で、作ってしまえば、配布は、普通に出来ます。 
参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございます。

> tamazo-さんのを参考に作ってみたら良いと思います。

ええ、つくってみて完璧に作動したので感激しました。

> Accessの参照設定は、Eval関数(これって凄いです)を使うためですが、
>VBAを開発するときだけ必要で、作ってしまえば、配布は、普通に出来ます

そうなんですか。Accessが使えるようになったら勉強してみます。
その節はまたよろしくお願いします。

お礼日時:2003/03/10 10:48

No.3 ですが、Accessが使える環境か確認せずに書いてしまいましたが、


もし、使えないとすれば、同じような方法でするは、関数を作る必要が
あります。

もし、必要であれば、作りますが・・・
使われる演算記号は、*、+、-、/ でいいのですね。

また、他のセルを使ってもいいのであれば、ワークシート関数だけでも
できると思います。(演算子の位置を検索し、左右分割します。)

この回答への補足

VBAでもワークシート関数でも出来るといいんですが。

要は、あるシートにあとで確認するため計算過程を書いてもらい、同時に別のセルにその答えをだしたいのです。

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

補足日時:2003/03/06 10:10
    • good
    • 0

あくまでも全ての計算式が小数第2位×小数数第1位と仮定。


A1に0.85*0.9の文字列が入ってるものとします。

=ROUND(LEFT(A1,4)*RIGHT(A1,3),2)

こんな都合よくはいかないですよね(^^ゞ

この回答への補足

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

補足日時:2003/03/06 10:04
    • good
    • 0

> いい方法はないでしょうか?



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

この回答への補足

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

補足日時:2003/03/06 10:00
    • good
    • 0

#1です。



文字列を数式に変換する関数はありません。

>B列に20行くらいそういう式が文字列ではいります。

20行程度でしたら、手動で、文字列の頭に「=」を挿入するのでは
だめなのですか?
これで数式になるのですが・・・

http://moreexcellent.cool.ne.jp/excel/function_c …
文字列関数

この回答への補足

ありがとうございます。
「=」だけではなく、ROUND等も入れますし、これから頻繁に行う作業のものですからなんとかならないかと思った次第です。
手動しか無理ならコピー&ペースト、「=」等の追記をマクロ自動記録でやってみたところ、

ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=ROUND(0.85*0.9,2)"

という具合に、個別の数字がでてしまい応用できませんでした。
困りました!

補足日時:2003/03/05 18:50
    • good
    • 0

文字列の形式は、全部間に「*」が入っているのですか?



その場合は、区切り位置機能を使用したらどうでしょう?

データ → 区切り位置 → 次へ → その他チェック *を入力
→次へ → 完了 とすれば

数値としてそれぞれ 0.85 と  0.92 に数値として分割できます。

あとは、数値に変換できましたので、式に当てはめれば計算できます。

ただし、この場合区切り位置に使う、「*」は全角と半角が混在していては
だめです。
数字は、半角・全角どちらでも大丈夫です。

この回答への補足

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

補足日時:2003/03/05 15:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!