• ベストアンサー

Excel(2002) 関数 数式そのものを文字列として取得

Excel入門用の教材を作っています。 うまくできたら「OK」を表示するように、たとえば次のようなチェック用の式を使っています。  =IF(A1="あいうえお","OK","") ところで、関数など数式を入力させる練習問題の場合、入力した数式そのものが正しいかチェックする方法が思い当たりません。 セルに入力した式そのものを文字列として取得できる関数(の組み合わせ)があればよいのですが、可能でしょうか? 次の xxx のようなものです。  ? =if(xxx(A11)="=sum(A1:A10)","OK","") もし無理であれば、セルに入力されているのが、単なる数値ではなく式であることを検査する方法でもかまいません。 どうかご教示ください。よろしくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 仮に、数式がA1にあるとすると、その隣りのB1を選択して、 メニューの[挿入]→[名前]→[定義]で、 [名前]:適当な名前(仮に「数式」とする) [参照範囲]:「=GET.CELL(6,A1)&LEFT(NOW(),0)」 として[OK]します。 そうしたら、B1に、 =数式 と入力すると、A1に入力されている数式そのものを表示します。 さらに、 =IF(数式="=IF(A1=""あいうえお"",""OK"","""")","○","×") のようにすれば、数式の内容をチェック出来ます。 ただし、数式の中に「"」が使われている場合は、 「=IF(A1="あいうえお","OK","")」 ↓ 「=IF(A1=""あいうえお"",""OK"","""")」 と、全部「""」と2つ重ねる必要があります。 別のセルに先頭に「'」を付けて数式を入力しておけば、 =IF(数式=C1,"○","×") のようにも出来ます。 なお、最初の設定で、B1に対して左隣りのA1を相対参照で指定したので、どこでもいいので、 =数式 と入力すれば、常にこの左隣りのセルの数式を表示します。 つまり、名前定義をする際に選択したセル(B1)と、[参照範囲]で指定した相対参照セル(A1)の位置関係が維持されるということになります。

otasuke009
質問者

お礼

素早い回答ありがとうございました。 ばっちり取得できました。 高度な内容なので、ひととおり理解するのにも時間がかかり、お礼が遅くなりすみません。 ヘルプではGET.CELL関数について検索できないようなので、ネットの情報などを調べたり実験しながら、理解を深めたいと思います。

otasuke009
質問者

補足

その後、いろいろな情報を探しながら、自分なりに理解を深めることができました。 一種の「ユーザ定義関数」を作成していることになるらしいと理解しました。 GET.CELL は Excel4 のマクロ関数で、現在のバージョンではヘルプが付属していないのですね。なんだか残念です。 第1引数の 6 は、第2引数のセルの「数式」を参照するオプションのようですが、「数値」も「文字列」も両方取得できました。つまり、エクセルではどれも「式」として扱われるということかと理解しました。 数値 1234 は、=1234 という式と等価 文字列 あいうえお は、 ="あいうえお" という式と等価 それから、 GET.CELL(6.範囲) だけでは、式が評価されてしまい、式の値が表示されるのですね。 そこで、&LEFT(NOW(),0) と長さ 0 の文字列を結合して、この「ユーザ定義関数」全体が文字列として扱われるようにし、 さらに、 NOW() によって、シートに変更があった際にリアルタイムで再計算される仕組みになっています。 A1 と相対参照にする意味もよく理解できました。これは便利そうです。 Excel の 「名前」の機能はほとんど活用していなかったのですが、その便利さがよくわかりました。 これで回答を締め切らせていただきますが、他の回答者の方も含め、有意義な知識を教えていただき、ほんとうに感謝しています。今後ともお世話になると思います。よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

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

下記を実行すると、回答者がどのセルにどう言う式を設定したかが、一覧表に出せます。仮にJ,K列に出してます。 実行する前に式が入ってそうな範囲を指定して実行してください。下記では式はI列より左列と仮定。 Sub test01() Dim cl As Range i = 1 For Each cl In Selection If cl.HasFormula Then Cells(i, 10) = cl.Address Cells(i, 11) = "'" & cl.FormulaLocal i = i + 1 End If Next End Sub これをもう少し改善すれば、自動チェックも出来そうですが、上記に留めました。やはり現状を目で見る必要があるだろうと思って。

otasuke009
質問者

お礼

回答ありがとうございます。 HasFormula と FormulaLocal を使うのですね。 自動化は安易にすべきではないというのも参考になりました。

全文を見る
すると、全ての回答が全文表示されます。
noname#8445
noname#8445
回答No.4

#3です csvではダメです。 txtに変更してください

otasuke009
質問者

お礼

お答えありがとうございます。 こんな方法もあるんですね。全然知りませんでした。 参考にしたいと思います。今後ともよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
noname#8445
noname#8445
回答No.3

お役に立てればいいのですが shift+ctrl+@ csv保存 エクセルで立ち上げると再計算になりますが・・・ メモ帳だと数式

全文を見る
すると、全ての回答が全文表示されます。
  • laputart
  • ベストアンサー率34% (288/843)
回答No.2

例えば回答を記入するセルをC1 前もって回答が書いてあるセルをB1とします B1とC1のセルの書式設定をテキストにします。 するとB1とC1を比較できます 例えばD1に =if(B1=C1,"OK","NG")など 他に解答を伏せたい場合はマクロを使って以下のような 方法があります。あくまでもテキストでの比較判定となります。 Sub Macro1() Dim Shiki, Atai As String '解答を前もって用意する Shiki = "=If(A1=" & Chr(34) & "あいうえお" & Chr(34) & "," & Chr(34) & "OK" & Chr(34) & "," & Chr(34) & NG & Chr(34) & ")" 'c1の値が解答と同じかどうか判断 Atai = Range("c1").Value If Shiki = Atai Then MsgBox ("正解です") Else MsgBox ("不正解です") End If End Sub 後は応用してください。

otasuke009
質問者

お礼

丁寧に説明していただきありがとうございました。 解答を伏せる場合のマクロ参考になりました。 今後ともよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • セルに数式が入ってるかどうかを取得する関数は?

    C1には、=SUM(A1:B1) C2には、0 が入力されています。 実際、A1:B1の値は0なので、 C1もC2も0が表示されています。 D列で、ちゃんとC列にsum関数が入ってるか調べてたいのですが =COUNTIF(C1,"*sum*") をオートフィルしても、0が返ります。 C3に「sum」と言う文字列を入れて、=COUNTIF(C3,"*sum*")をしたら 1が返りました。 COUNTIF関数は文字列は認識しますが数式は認識しないようです。 このような場合、セルに数式が入ってるかを取得する方法はありますか?

  • エクセルの関数について教えてください

    エクセルでvlookupを使い得た結果がAだとします。 次にif関数でvlookup関数の結果のセルがAならばと言う式を作りました。 が、if関数が認識してくれません。 同じif関数の式でキーボードからAを入力したら結果が出ます。 vlookup関数のセルにはAでなく式しか入ってないからでしょうか? vlookup関数の結果をif関数で認識する方法をお願いします。

  • エクセル 数式の文字も含めた数え方

    数式が入力されたセルの文字数、たとえば=IF(A1=11,22,999)といった式をA2に記述した場合のA2の使用している文字数をカウントしたいのです。仮にA1が11だった場合A2には22が参照されてLEN関数でA2を見にいったとしても文字数2が返されてしまいます。 希望としては=から)までの使用しているすべての文字をカウントしたいのですが何かいい方法はないでしょうか? よろしくお願いします。

  • Excelの数式バーより条件式関数について

    Excelを勉強しております。 条件式関数IFで数式バーよりTRUEやFALSEに処理を追加したいのですが出来ますでしょうか。 例)=IF(A1=A2,"OK","NG" セルの色を変更する)                   ~~~~~~~~~~~~~~~~~~~ 実際に上記の例で試したのですがエラーになります。 他の条件式関数でもOKです。 ご教授よろしくお願いします。

  • EXCELのSUM関数について

    EXCELのSUM関数についての質問です。 セルにSUM($A$1:$A$10)という式があった時、A1のセルをA3に移動させると SUMの式がSUM($A$2:$A$10)にかわってしまいます。 A1を固定するにはどのようにすれば良いのでしょうか? どなたかよろしくお願いします。 ([リスト形式および数式を拡張する] というオプションではダメでした)

  • エクセルで

    エクセルについてお伺いします。例えばセルA1に10%、A2に20%のパーセンテージで入力された値は合計は出せないのでしょうか。SUM関数で出すとエラーが出てしまいます。それと、数式を入力したセルの数値の値の合計も出ないのでしょうか。例えばあるセルに=A1+B1,もう一方のセルにA2+B2と入力されていてそれぞれ数値が5と4とします。合計9を出したいのですが、数式のためSUM関数では合計できません。何か方法はありますか。

  • Excel関数・数式か?数値・文字直入力か?の判断

    Excelの実技テストを作ろうと思っています。 SUM、AVERAGE、IFなどの関数を使いこなせているかという簡単なテストです。 問題は採点にあり、プリントアウトしてしまうと出力された答えが、 関数を利用して算出したものか?(=SUM(A1:A3) など) 数式を入力して算出したものか?(=A1+A2+A3) など 頭で計算して直接数値を入力したものか?( 「10」 など) 判別がつきません。 LEFTで1文字目の”=”を拾って関数であることを判断しようとしても 関数の対象となるのは出力された答えのほうで(=SUM(A1:A3)を検索の対象にできない。) 関数を判断の対象とするには、どのような方法をとったらよいのでしょうか? マクロでも構いません。ご教授願います。

  • エクセル 数式

    Excelについて。 あるセルA1の設定されている数式(=SUM(E:E)など)を、 B1にコピーする方法は、ありますでしょうか? ※A1に入力されている数式をコピー貼り付けではない方法を探しています。 B1に、=A1とすると、=SUM(E:E)の計算結果が入力されてしまいます。 ゴール(表示される値)は同じですが。コピー貼り付けしか方法はないでしょうか。 お手数ですが、よろしくお願いします。 エクセル2007以上 VBAなら可能ですか?

  • エクセル2010の数式について

    エクセル2010で簡単な数式を使ってカレンダーを作成するときに、 まずAIのセルに「日」を入力し、ドラッグして「土」まで入力。 次にA2のセルに「1」を入力しB2のセルに「=A2+1」の数式を入力し土曜日のセル(G2)まで数式をドラッグ。 次にA3のセルに「=G2+1」、次B3のセルに「=A3+1」といれ土曜日のセル(G3)までドラッグ、 それを繰り返ます。 そして第5週目にはいり、A6のセルに「=G5+1」と入力し次B6のセルに「=A6+1」と数式を入れると自動的に次のセルからG6(土曜日)のセルまでドラッグしなくても数式が入ってしまいます。これはなぜなのでしょうか? 2010になってからの特徴でしょうか?教えてください。

このQ&Aのポイント
  • 製品名:DCP-595CN
  • お困りの事象:マークがついたまま電源も切れず液晶画面も何も表示されない
  • 環境情報:OSはiOS、接続方法は無線LAN、Wi-Fiルーターの機種名はELCOM、電話回線の種類はひかり回線
回答を見る

専門家に質問してみよう