Excel入門用の教材を作っています。
うまくできたら「OK」を表示するように、たとえば次のようなチェック用の式を使っています。
=IF(A1="あいうえお","OK","")
ところで、関数など数式を入力させる練習問題の場合、入力した数式そのものが正しいかチェックする方法が思い当たりません。
セルに入力した式そのものを文字列として取得できる関数(の組み合わせ)があればよいのですが、可能でしょうか? 次の xxx のようなものです。
? =if(xxx(A11)="=sum(A1:A10)","OK","")
もし無理であれば、セルに入力されているのが、単なる数値ではなく式であることを検査する方法でもかまいません。
どうかご教示ください。よろしくお願いします。
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)の位置関係が維持されるということになります。
この回答への補足
その後、いろいろな情報を探しながら、自分なりに理解を深めることができました。
一種の「ユーザ定義関数」を作成していることになるらしいと理解しました。
GET.CELL は Excel4 のマクロ関数で、現在のバージョンではヘルプが付属していないのですね。なんだか残念です。
第1引数の 6 は、第2引数のセルの「数式」を参照するオプションのようですが、「数値」も「文字列」も両方取得できました。つまり、エクセルではどれも「式」として扱われるということかと理解しました。
数値 1234 は、=1234 という式と等価
文字列 あいうえお は、 ="あいうえお" という式と等価
それから、
GET.CELL(6.範囲) だけでは、式が評価されてしまい、式の値が表示されるのですね。
そこで、&LEFT(NOW(),0) と長さ 0 の文字列を結合して、この「ユーザ定義関数」全体が文字列として扱われるようにし、
さらに、
NOW() によって、シートに変更があった際にリアルタイムで再計算される仕組みになっています。
A1 と相対参照にする意味もよく理解できました。これは便利そうです。
Excel の 「名前」の機能はほとんど活用していなかったのですが、その便利さがよくわかりました。
これで回答を締め切らせていただきますが、他の回答者の方も含め、有意義な知識を教えていただき、ほんとうに感謝しています。今後ともお世話になると思います。よろしくお願いします。
素早い回答ありがとうございました。
ばっちり取得できました。
高度な内容なので、ひととおり理解するのにも時間がかかり、お礼が遅くなりすみません。
ヘルプではGET.CELL関数について検索できないようなので、ネットの情報などを調べたり実験しながら、理解を深めたいと思います。
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
これをもう少し改善すれば、自動チェックも出来そうですが、上記に留めました。やはり現状を目で見る必要があるだろうと思って。
回答ありがとうございます。
HasFormula と FormulaLocal を使うのですね。
自動化は安易にすべきではないというのも参考になりました。
No.4
- 回答日時:
#3です
csvではダメです。
txtに変更してください
お答えありがとうございます。
こんな方法もあるんですね。全然知りませんでした。
参考にしたいと思います。今後ともよろしくお願いします。
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
後は応用してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/10/25 17:10
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Excel(エクセル) エクセル関数についてお教えください 3 2023/07/24 12:33
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) 【Excel】複数列ごとに取得するセルを変更したい 2 2023/03/23 21:04
- Excel(エクセル) Excelで数式をそのままコピーしたい どうすればいいですか? 4 2022/09/16 02:16
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
参照先セルに値が入っていない...
-
A1セルに入力したら、入力時間...
-
Excelで同じセルに箇条書きをし...
-
自動入力で今月はMONTH(TODAY()...
-
IF関数で0より大きい数値が入力...
-
マイナス同士の前年比
-
値を入力後、自動的にアクティ...
-
Excel:文字と数字の組合せ、次...
-
yyyy/mm/ddからyyyy/mmへの変換
-
エクセルで既に入力してある文...
-
IF関数1と6なら「〇」それ以...
-
Excelでセルに入力されたカラー...
-
空白でないセルの値を返す方法...
-
エクセルの数式がかぶって、選...
-
エクセルで複数の条件で掛け算...
-
【Excel】セル内の時間帯が特定...
-
エクセルで時間の判定をしてい...
-
【vba】指定範囲の中に任意の文...
-
バーコードが読み取れない原因...
-
エクセルの数式で計算結果に文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
A1セルに入力したら、入力時間...
-
Excelで同じセルに箇条書きをし...
-
参照先セルに値が入っていない...
-
IF関数で0より大きい数値が入力...
-
Excel:文字と数字の組合せ、次...
-
エクセルで既に入力してある文...
-
値を入力後、自動的にアクティ...
-
エクセルの数式がかぶって、選...
-
エクセルで時間の判定をしてい...
-
空白でないセルの値を返す方法...
-
Excelでセルに入力されたカラー...
-
yyyy/mm/ddからyyyy/mmへの変換
-
入力したところまでを自動的に...
-
excel 関数にて文字を0として認...
-
バーコードが読み取れない原因...
-
エクセルで複数の条件で掛け算...
-
ExcelVBAでセルを編集状態にす...
-
エクセルで、特定のセルの内容...
-
【vba】指定範囲の中に任意の文...
-
エクセルで10分ごとの時刻の...
おすすめ情報