• ベストアンサー

エクセルVBA

どうして SUM(A1:A5) Range("A1:A5") のように 関数の引数には" "がいらなくて Rangeの引数には" "がいるのでしょうか?

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

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

そういうものなんだよ。MSが考えてそう決めたのだよ。 Sub test01() s = "A1:B5" Range(s).Select End Sub を実行してご覧。Rangeの中は文字列で指定する決まりが実感できるだろう。 しかし初めからMSがその気になって””で囲まない決めにしていたら そうできると思う。 いやなら別の方法Cells(i,"A")という書き方やRange(Cells(1,"A"),Cells(5,"B"))なんてのもあり、Cells(3)などというのもある。 基本的に引数は、スクリプトでは文字列でという主義もあるような気がする。テキストエディタはテキストベースでもあるし。 ーー エクセル関数の場合はVBAと比較するのは無意味(違う)。 関数ではセル範囲は文字列を明示する風に””では囲まない。 関数式は、エクセルシステムはとりあえず文字列で受けているはずだが。 文字列をリテラルで指定するときにだけに””で囲む。 LOTUS以前から表計算ソフトの沿革を引きずっているし、省略できる ものは省略した方が能率的である。 INDIRECT関数やクライテリアに文字列で指定を強制したり、などに不統一を感じたことがある。

karasu4649
質問者

お礼

ありがとうございました。やっと疑問が解けました。

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

関連するQ&A

  • VBAの質問です2

    たびたび申し訳ありません。 繰り返し処理の中でSUM関数を使うときに、引数をA1のような書き方ではなくて(1,1)のようにしたいのですが、そうするとエラーになってしまいます。 これはVBAの問題ではなくて単にSUM関数の引数を(1,1)のように書きたいときにはどうすればいいかという問題だと思いますが。 =SUM((30*I-18,5):(30*I+8,5)) ではだめなんです。 よろしくお願いいたします。

  • 【エクセル】 VBAでエラーが出てわかりません。。

    やりたいことは、関数をマクロでセルに記入してオートフィルで指定した行数まで伸ばしたいのです。 (すでに関数で作成したファイルがあるのですが、行数が多いため、とても重い。。^^;) まずマクロの記録で次のマクロを取得しました。 Sub Macro4() Range("C4").Select ActiveCell.Formula = "=SUM(A2:A10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C12"), Type:=xlFillDefault Range("C4:C12").Select Range("D11").Select End Sub そして、 Sheet2に貼り付けて > ActiveCell.Formula = "=SUM(A2:A10)" の"=SUM(A2:A10)"部分をちょっと長い関数ですが、 "=IF(ISERROR(INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1)),"",INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1))" と書き換えてマクロを実行すると「アプリケーション定義またはオブジェクト定義エラーです。」 というエラーが出てしまうんですが、どこを直せばわからないです。。 おかしいところを教えてください、よろしくお願いします。 わかり図らい説明かと思いますが。。この件(1行目の文)について似たようなことを解説して いるサイトがありましたら、教えて欲しいです。

  • エクセル VBA Replace について

    XP microsoft visual basic 6.0 です はじめに A1 に =SUM(A2:A5) と記入してます A2 から A5 には何も記入されていないので A1 の値は 0 です そこで Sub a() Dim e As Range For Each e In ActiveSheet.UsedRange e.Value = Replace(e.Value, "あ", "") Next End Sub を実行すると A1 の =SUM(A2:A5) が 0 と計算結果のみの数字に置き換えられてしまうのですが、何故なのでしょうか 置換後も 関数式を残しておきたいのですが何か良い方法はありませんか よろしくお願いします

  • Excel VBAの SUM関数について質問です。

    Excel VBAの SUM関数について質問です。 SUM関数で合計の値を出す場合、 SUM(A1:A5)という関数で合計を出しますが SUM(sheet2.cells(1,1),sheet2.cells(5,1)) と言ったようにCellsで指定はできないのでしょうか? 複数の列にVBAのプログラムで合計の値を出したいのです。 WorksheetFunction.SumではSUM(A1:A5)のように 自動計算にならないと思うので・・・

  • エクセルvbaのワークシート関数について

    テキストなどでvbaのワークシート関数を使うとき下の二つのコード のようにつかいなさい、と書かれていますが、両方同じように使って いいのでしょうか?実行結果は、ちがいますが。 Range("E3:E6").FormulaLocal = "=SUM(C3:D3)" Range("C6:D6").FormulaLocal = "=SUM(C3:C5)" 商品 上半期 下半期 合計 りんご 30 65 95 みかん 10 68 78 バナナ 30 65 95 合計 70 198 268 Range("E3:E6").FormulaLocal = WorksheetFunction.Sum(Range("C3:D3")) Range("C6:D6").FormulaLocal = WorksheetFunction.Sum(Range("C3:c5")) 商品 上半期 下半期 合計 りんご 30 65 95 みかん 10 68 95 バナナ 30 65 95 合計     70 70 95

  • Excel VBA 答えが0になってしまうのですがどうしたらなおりますか?

    こんばんはB列に上からいくつか数字が入力されているとします。 そのB列の最下行にSUM関数を入力させるマクロを作成しましたが、 なぜか計算結果が0になってしまいます。 循環になってしまっていたので反復計算にチェックをいれ、再計算させましたが思ったような答えが出ませんでした。 この計算結果が0になってしまう現象はどうやっって回避したらよいのでしょうか。合計欄をC列に変えると正常になりますが、B列に計算式を入力させると0になってしまうのは、どうしてなのでしょうか。 下記のコードが悪いのでしょうか?宜しくお願い致します。 (※通常にExcel2003を使用して、単純にセルどうしの引き算をしていても答えが0になってしまう場合があります。これも同じ循環なのかも知れませんので、回避方法を教えてください。) Sub SUM関数を入力する() Dim r As Integer '最下行 Dim m As Integer '対象列 Dim a As Variant Dim siki As Variant Worksheets(3).Activate r = Worksheets(3).Range("B65536").End(xlUp).Row + 1 Range("B" & Format(r)).Select m = 2 'R1C1方式で選択 a = "R" & 2 & "C" & 2 & ":R" & r & "C" & 2 siki = "=sum(" & a & ")" Range(Cells(r, m), Cells(r, m)).FormulaR1C1 = siki End Sub

  • マクロ:エクセルVBAでのワークシート関数の参照について

    VBA内でワークシート関数を使用する際の、引数の参照について困っています。 満たしたい条件は、 (1)マクロ実行後のシート上においても、セル選択状態で数式「=B1*sum(A1:A3)」 といったように、「値」ではなく、「数式」が入力されているようにしたい。 ↑ Application.WorksheetFunction.Sum(・・・は使えない? (2)上記例のB1およびA1:A3については、マクロ内のユーザ入力によって位置が変わり、C1にもD1にもなり得るので、 cells(1,1)="=B1*sum(A1:A3)" といった「B1」[A1:A3]的な参照を使いたくない。 イメージとしては、 sub sample() number = inputbox("数字を入力してください") cell_a = inputbox("セル1") cell_b = inputbox("セル2") yourrange = range(cells(cell_a,1),cells(cell_b,1) cells(1,1)="=number*sum(yourrange)"・・・※ end sub みたいなことをしたいのですが、※のようなことを する方法はありますでしょうか? 説明が下手なもので、補足等あれば随時いたします。 使用環境はWindows2000、Office2000です。 よろしくお願いします。

  • Excel の SUM 関数の引数について

     Office 2003 です、Excelについて質問します。  縦一列の数字のSUMを取ろうとしたところ、「SUM」関数を使うと吹き出しが出て、「SUM(数値1、[数値2],....)」 と表示されました。  この[数値2]以降の引数の意味は何でしょうか。  ヘルプで色々と検索をかけましたが、分かりませんでした。  そもそもSUM関数で引数が2個以上あるのが理解出来ないのですが宜しくお願いします。

  • エクセルVBAの掛け算

    お世話になります。 VBA初心者です。 セルA1にはB1×C1の答え Range("A1").Value = Range("B1") * Range("C1") これを、B1が空白ならA1も空白に、そうでないならA1にB1×C1の答えを入れたいのですが 分かりません。 Range("A1").Value = "IF(B1="""","""",B1 * C1)"これだと A1に『 =IF(****** 』と関数が入ってしまいます。 どなたか 分かる方教えて下さい。 宜しくお願いします。

  • エクセルのVBAで悩んでいます。

    いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。