トップページ >
Excel >
VBA >
講座:セルの操作 >
計算式の入力
計算式の入力
セルに計算式を入力するときは、Rangeオブジェクトに計算式を文字列として代入しちゃいましょう。先頭が「=」で始まる文字列は、Excelが自動的に計算式と認識してくれます。次のコードは、セルA1とセルA2に数値を入力し、セルA3で合計を求めます。
Sub Sample1()
Range("A1") = 10
Range("A2") = 20
Range("A3") = "=A1+A2"
End Sub
もちろん、ワークシート関数も同じ要領で入力できます。
Sub Sample2()
Range("A1") = 10
Range("A2") = 20
Range("A3") = "=SUM(A1:A2)"
End Sub
もちろん、これで計算式を入力することができるのですが、Excelの内部で何が行われているかも理解しておきましょう。
セルのデータはValueプロパティに格納されます。ところが、計算式が格納されるのはValueプロパティではなく
Formulaプロパティです。セルに計算式を入力すると計算結果が表示されます。この
計算結果がValueプロパティ、実際に入力されている
計算式がFormulaプロパティです。したがって、計算式を入力するときも、本来はFormulaプロパティを使用しなければなりません。
「Range("A3") = "=SUM(A1:A2)"」では、Rangeオブジェクトのプロパティが指定されていません。そこで、ExcelはValueプロパティに「"=SUM(A1:A2)"」という文字列を代入します。しかし、文字列の先頭を見ると「=」で始まっています。Excelでは「=」から始まるとそれは数式というルールがあります。そこでExcelは、「お、これは数式じゃん、それならFormulaプロパティに入れとかなくちゃ」と気を利かせてくれるのです。このFormulaプロパティは、セルの計算式を取得するときに活躍します。
■計算式内の""(ダブルコーテーション)
ワークシート関数のLEFT関数は、指定した文字列の左側を抜き出します。たとえば、「
=LEFT("tanaka",2)」は「ta」を返します。では、マクロでこの関数をセルに入力してみましょう。最初はSample2と同じようにやってみます。
Sub Sample3()
Range("A1") = "=LEFT("tanaka",2)"
End Sub
すると、上のコードを入力したとたん「コンパイルエラー」というメッセージが表示されます。コードの段階でエラーなのですから、実行することもできません。
なぜエラーになるのでしょう。Sample2と同じように、ちゃんと入力したい関数を""(ダブルコーテーション)で囲っています。まったく同じように指定したのに、なんで?……と悩む前に、""(ダブルコーテーション)の役目を思い出しましょう。
VBAでは基本的に、VBAのプログラミング言語と一部の記号と数値しか入力できません。「Range」とか「Select」などはプログラミング言語としてVBAにあらかじめ登録されているコマンド名です。したがって、VBE上でこれらの単語を普通に入力すると命令語として認識してくれるのです。
Sub Sample4()
Worksheets(1).Select
End Sub
「Worksheets」「Select」はコマンド名、「1」は数値、「().」は記号ですね。これらはVBAのコードとして普通に入力できます。では、[合計]という名前のワークシートを開く場合はどうでしょう。
Sub Sample5()
Worksheets(合計).Select
End Sub
上のように書くとエラーになります。「合計」はVBAのコマンド名でも、数値でも、記号でもないですから、VBAには理解できないのです。そこで、「合計はコマンド名ではなく、合計という
文字列と認識してください」ということを表すために""(ダブルコーテーション)で囲みます。
Sub Sample6()
Worksheets("合計").Select
End Sub
これでVBAは「合計という名前のワークシート」と理解できるのです。マクロのコード中で、文字列を""(ダブルコーテーション)で囲むとは、こういうことなのです。
では、話を戻して
Sub Sample3()
Range("A1") = "=LEFT("tanaka",2)"
End Sub
の、どこが悪いのか考えてみましょう。
文字列は""(ダブルコーテーション)で囲みます。逆に言えば、""(ダブルコーテーション)で囲まれているのは文字列と認識されてしまいます。すると、計算式として入力しようとしたデータは、「=LEFT(」という文字列+「tanaka」というコマンド名+「,2)」という文字列という訳の分からないデータになってしまいます。
「tanaka」を囲む""(ダブルコーテーション)は、文字列の区切りである""(ダブルコーテーション)ではなく、単なるデータとしての""(ダブルコーテーション)とするには、""(ダブルコーテーション)を
2つ重ねて記述します。
Sub Sample()
Range("A1") = "=LEFT(""tanaka"",2)"
End Sub
これで正しく「=LEFT("tanaka",2)」という計算式を入力できます。
ワークシート関数には""(ダブルコーテーション)がひんぱんに使われます。マクロでセルに入力するときには、十分注意して下さい。
[データの取得]戻る← | →進む[文字色の設定]