• ベストアンサー

Excel VBA Cells 絶対参照 書き方

Excel VBAにてお尋ねいたします。 Excel VBAにてCellsを使用してセル範囲を指定させていただく際に、絶対参照($A$1:$E$10など)を使用する場合はどのように記述すればよろしいでしょうか? Cellsを使用するのは、セル範囲が毎回異なるため、範囲指定に変数を使用しているためです。 相対参照でしたら、Range(Cells(1,1),Cells(Rows<行番号の変数>,Cols<列番号の変数>))といった記述かと思いますが、絶対参照の場合はどのように記述すればよろしいでしょうか?

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (709/1465)
回答No.1

具体敵ににに何をしたいのか判らないのですが、セル位置を変数で指定したいのなら、   Address = "A1:E10"   Range(Address) でいいのでは。   Range(Address).Select   Range(Address).Interior.Color = vbYellow の様に使います。 もし、変数でなく完全固定なら   [A1:E10].Select   [A1:E10].Interior.Color = vbYellow という書き方もあります。

その他の回答 (3)

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

関数の考えに毒されていると思う。質問のような考えが生まれる余地はない。 VBAでCells()で指定するもには、関数の関数式の式の複写などの際の式の行、列の変化はないし、もし別ケースで、同じことをするなら、VBAプログラマの責任で、例えばFor Nextなどを使ってセル番地の指定を変化させて実行しないとならない。 Formulaを設定する場合は、 https://www.moug.net/tech/exvba/0050098.html セルに数式を入力/取得する(Formula/FormulaR1C1プロパティ) を読むこと。 その他 https://www.vba-ie.net/operation/cellsformula.php ◾Formulaプロパティを利用したセルに数式を入力するサンプルコード ーー シートの、既設定の関数式のセルのアドレス指定について、絶対・相対参照をいじくるのは http://kouten0430.hatenablog.com/entry/2017/08/20/130625 数式を絶対参照にする など勉強すること。 ーー https://docs.microsoft.com/en-us/office/vba/api/excel.range.address AddressのTrueFalseなど Range.Address property ーー やはり短期の、我流のVBA学習のために、こういう質問になるように思う。 どこかで、VBAの専門の中級以上のことを教える、スクールで教えてもらう機会が必要かと思う。

  • kon555
  • ベストアンサー率52% (1738/3330)
回答No.3

「相対参照と絶対参照」という考え方は、数式が入力された『セル』のコピー時の挙動を規定するものなので、VBAのコードにおいては根本的に存在しません。  あえて言えば、ブック内でのセルのコピーや移動どれだけ行おうと指定セルの位置等が変化しないという点において、VBAでのセル指定はほぼすべて絶対参照です。  既にセルに記述された数式の相対/絶対の切り替えであればConvertFormulaというメソッドもありますが、書かれている内容からするとそうではないですよね。  貴方の言う"絶対参照"とはどういう挙動の事で、それを何故VBAで実現したいのかを一度整理してみてはいかがでしょうか。それを質問された方が、的確な回答やアドバイス等がつくと思います。  

  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.2

A1にB1の値を参照してといった場合 相対参照は Cells(1, 1).Value = Cells(1, 1).Offset(0, 1).Value 絶対参照は Cells(1, 1).Value = Cells(1, 2).Value だと思いますが…。

関連するQ&A

  • エクセルVBAにて

    エクセルのVBAにて irow=Cells(Rows.Count,1).End(xlUp).Row irowは整数型として宣言している変数です。 という記述の場合、どのような内容を表しているのでしょうか? 特に、Cells~Endの前までの記述がよく分からないのですが・・・ よろしくお願いします。

  • Excel 絶対参照と相対参照の違い。

    VLOOKUP関数を用いて数式を列に作ります。 範囲が違うシートのセルを指定します。 その場合、テキストでいくと相対参照にしなくてはならないのですがなぜでしょう? 相対参照と絶対参照の違いがExcelのヘルプで見ても理解できません。 わかる方、教えてください。

  • 複数のエクセル相対参照を絶対参照に一発変換したい。

    一つの相対参照を例えば横方向にいくつか複写して、 複写された各セルの相対参照を、絶対参照化する時 各セルにポイントをおいて「F4」プッシュで処理 しています。これを範囲指定して一度に変換する方法があれば大変助かるのですが。 良い方法があったら教えて下さい。

  • マクロで式を記入するとき、相対参照がおかしくなってしまうのを直すには?

    office2000のExcelのVBAについてです。 たびたびすみません。相対参照のエラーについて教えてください。 下記のVBAの記述のように、相対参照の式をある範囲のセルに変数%の幅に応じて入力するプログラムを作成したいと考えております。 変数% = 8 With Worksheets(sheetname$) .Range("T126:AI155").ClearContents .Range(.Cells(126, 20), .Cells(155, 19 + 2 * ッ変数%)).FormulaR1C1 = _ "=(RC[-18]-R[-1]C[-18])/0.04*100" End With このマクロを単体で動作させると、式が正しく参照されてセルに式が入ります  (例):=(B126-B125)/0.04*100 ところが、上位マクロから、上記を呼び出して実施すると、参照位置がおかしくなってしまう現象が発生します。  (例):=(IE1-IE65536)/0.04*100 原因がわからなく、困っております。なにか、確認したほうがよいアドバイスなどございましたら、少しでも教えてください。

  • ExcelのVBAでRangeとCellsをWSHから使いたいのですが・・

    エクセルに書き込むマクロのコードを書いていたのですが、 Exl.range(Cells(1, 1), Cells(3, 4)).Font.Bold = True のような部分が、VisualBasic や OFFICEのVBA上で 参照設定でExcelを指定していると、動くのですが、 同じコードが、WSHでは参照設定ができないせいなのか、 動きません。WSHの場合、どのようにしたらよいのでしょうか。 よろしくお願いします。

  • Excel VBA: セルの参照方法

    Excel VBAで、セルの範囲を指定するときには、 Range("A2:B3") とやりますよね。 ここのとこで、B3セルではなくBxセルにしたいときにはどうすればいいです?。 つまり、xは変数です。 Range("A2:Bx")と書いていいのでしょうか。

  • エクセル VBA の行選択

    エクセルVBAで行を選択する場合 Rows(1,1).select Range(Cells(2,2),Cells(5, 5)).EntireRow.Select の方法があると知りました。 この数値の部分に変数を入れるとエラーがでてしまいました。 どうすれば変数で行を選択することができるのか教えてください。 2003を使用しております。

  • VBA初心者です。

    VBA初心者です。 Excel 2010のVBAで、 ワークシートのSheet1のオブジェクトモジュールに 他のシートから別のシートにコピー&ペーストをしたいと思い、 以下のプログラムの記述をすると、 アプリケーション定義またはオブジェクトの定義エラーとなってしまいます。 Worksheets("Sheet2").Range(Cells(1, 7), Cells(d, 8)).Copy Destination:=Worksheets("Sheet3").Cells(3, 1) (「d」は変数です。セルの範囲指定は、実際に記述するときは 範囲が広範になるので、行数列数で把握できるようにCellsを使っています) エラーになる理由と解決法をご教授いただければと思います。

  • ExcelのVBAにおけるLastRowという言葉

     ExcelのVBAにおいて、「最終行」即ち「(その列において)データが存在しているセルの中で最も下にあるセルの行番号」を取得する必要が生じる事が良くあります。  その様な場合には、Cells(Rows.Count,列番号).End(xlUp).Row か Range(列番号 & Rows.Count).End(xlUp).Row を用いて取得するのが主流ですが、多くの場合、最終行の行番号のデータが必要になるたびに取得しなおすのではなく、最初に取得した最終行の行番号を変数に格納しておき、最終行の行番号のデータが必要な場合はその変数を使って最終行の行番号を指定するのが普通です。  その様な最終行の値を格納する変数を使用する場合、私個人の場合は「何に使用するための変数であるのかという事を解りやすい変数名を用いる」という観点から、「LastRow」という変数名を好んで用いております。  この「LastRow」という変数名はあくまでそのVBAマクロ内だけで使用されるその場限りのものに過ぎない筈です。  しかし、このサイトのExcelのVBAに関する質問を眺めていると、例えば Range(”○○")からLastRowまで ○○セルからLastRowまで といった具合に、「LastRow」という言葉があたかも「『最終行の行番号』や『最終行のセル』を表す"一般名詞"」であるかの様に使用されている質問を時々見かける事があります。  これが「last row」であれば「最後の行」という意味の英語の言葉になりますから間違いとは言えません。  それに対し「LastRow」という単語は少なくとも英語には存在しません。  それにもかかわらず、「LastRow」という言葉が前述の様な一般名詞として使われているという事は、ExcelのVBAにおいて「LastRow」という言葉は、Excelのワークシートを使った処理における「作業列」などと同様のテクニカルタームになっているという事なのでしょうか?

  • エクセルVBAで3つ以上のセルをCellsで選択

    エクセル2003のVBAについてお尋ねします。 行番号についてDim X As Integer の構文を使っている関係で Cells(X, 1) Cells(X, 3) Cells(X, 5)などのようにセルの選択をCellsで行う必要があります。 Cellsで離れ離れの3つ以上のセルを同時に選択するには、どのようにしたらよいのでしょうか? Range(Cells(X, 1), Cells(X, 3)).Select では2つしか選択できず困っています。 よろしくお願いいたします。