• ベストアンサー

ExcelVBA 変数を使った別シートセルのCellsでの範囲指定について

ExcelVBAで変数を使って別シートのセルをCellsで範囲指定をすると、 「アプリケーション定義またはオブジェクト定義のエラーです。」と 表示されます。 Sheets("Sheet1").Range(Cells(1, CNT), Cells(10, CNT)).Value 同シート内ならエラーは出ないのですが、処理中にアクティブシートを 変えたくありません。 何かよい方法はないでしょうか。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

No.1です。 すみません、勘違いしていました。 質問に有る式ですと、↓の様に記述すれば大丈夫です Sheets("Sheet1").Range(Sheets("Sheet1").Cells(1, CNT), Sheets("Sheet1").Cells(10, CNT)).Value つまり、Cellだけだと、アクティブシートのCellと判断されてしまい、エラーになっていると。

ff11111111
質問者

お礼

範囲指定だとCells毎にシートの指定がいるのですね。 とてもよくわかりました。 ありがとうございます。

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

変数云々ではなく、非アクティブシートに対して範囲指定を行っているからエラーになっているだけでは?

関連するQ&A

  • エクセルVBAで範囲を変数で設定する方法?

    Dim i As Integer For i = 1 to 50 とした場合、 セルであれば Sheets("Sheet2").Cells(i, 2).Value = Sheets("Sheet1").Cells(i, 2) のように変数を使えますが、範囲に使う場合にはどう書けばいいのでしょうか? 例えば、 Sheets("Sheet2").Range("A1:G1").Value = Sheets("Sheet1").Range("A1:G1") のような式で、行数を変数にする場合です。 よろしくお願いします。

  • ExcelVBAで任意のシートの任意のセル範囲を削除する方法

    http://okwave.jp/qa1222496.html こちらのページを参考にやってみたのですが、下記コードの3行目で 「アプリケーション定義またはオブジェクト定義のエラーです」となります コードは以下のとおりです ---------- X = Sheets("Sheet1").Cells(1, 1).Value  Sheets("Sheet2").Select Sheets("Sheet2").Range(Cells(X, 1), Cells(X, 7)).Select Selection.Delete shift:=xlUp ---------- Sheet1のA1には任意の数字が入り、その数字に対応したセル範囲を削除するというものです 仮に3と入っているとして、Sheet2のA3からG3までを削除して 行を詰めたいと考えています Sheet1のA1には確かに数字が入っていることは確認しております あともし可能であれば、Sheets("Sheet2").Selectをしなくても 行を削除する方法があればご教授願いたいと思います webでいろいろ調べてみましたが、Sheets("Sheet2").Select としないといけないようでした VBAはまったくの初心者ですので、そもそも調べ方が間違っているかもしれませんが・・・

  • ExcelVBAで変数を用いた範囲指定について

    お世話になります。 ExcelVBAで困っていますので、アドバイスをお願いします。 A5:A10とD5:D10までといったように離れたセルへ Rangeを用いて範囲指定を行いたいのですが、 その際、行を示す数字に変数を用いたいと考えています。 この場合、どういう指定をしたら宜しいでしょうか? またRangeではなく他の方法もありましたら、 是非、ご提案願います。 どうぞよろしくお願いします。

  • VBA 印刷範囲設定がうまくいかない

    変数cntに値を代入し印刷範囲が変わるという事を、以下のコードで実行しようとしています。 Sub Macro1() cnt = 9 Sheets("A").Activate 範囲 = Sheets("A").Range(Cells(1, 1), Cells(33, cnt + 1)) ActiveSheet.PageSetup.PrintArea = 範囲 上記のコードですと、シート「A」のセルA1~J33までが印刷範囲になると思ったのですが、実行すると全く関係ないセルまで印刷範囲になってしまいます。 「A」シートには罫線やデータが入力されているセルが他にもあり、どうやらそれらのセルも同じく印刷範囲とされてしまっているようなのです。(例えばK列に罫線が引いてあり、セルに色がついているとK列まで印刷範囲になる) Sheets("A").Range(Cells(1, 1), Cells(33, cnt + 1)).select とすれば、望みどおりのセル範囲A1~J33がきちんと選択されるのですが、印刷範囲ではなぜこのようなことになってしまうのでしょうか。

  • ExcelVBAで範囲のセルを別のシートのセルに代入する方法はありますか

    ExcelVBAで範囲のセルを別のシートのセルに代入する方法はありませんか。 範囲でなく、一つのセルだけなら代入できるのですが、範囲にすると代入先が空白になってしまいます。 例えばSheet2のC1~C3をSheet1のB1~B3に代入したいとき Sheets("Sheet1").Range("B1:B3") = Sheets("Sheet2").Range("C1:C3") この記述だとSheet1のB1~B2までが空白になってしまいます。 アクティブシートが変わると処理がおかしくなるのでコピーペーストは使いにくいです。 よろしくお願いします。

  • ExcelVBAでセルの番地を変数として扱いたいですが

    ExcelVBAでセルの番地を変数として扱いたいですが 例えばaという変数に『Range(Cells(2, 5), Cells(2, 8))』を入れたとします。 このセル番地は複数を指定していると思うのですが、 このセル番地すべてを一個下にずらす、つまりCells(1,0)をプラスしたいんですが、 どうしたら良いのでしょうか? a + Cells(1,0)ではダメでした。

  • EXCEL VBA Applicationインスタンス内での範囲指定

    Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Private Const SCol = 1 Private Const SRow = 1 Private Const ECol = 1 Private Const ERow = 1 Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add xlBook.Sheets("Sheet1").Range("A1") = 1 xlBook.Sheets("Sheet1").Range(Cells(SCol,SRow), Cells(ECol, ERow)).Borders.LineStyle = True xlBook.SaveAs "c:\ss.xls" xlBook.Close xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing 以上のようにEXCEL VBA内で新規ExcelApplicationインスタンス内で値を代入し、線を引いているのですが線を引く範囲指定部分でアプリケーション定義またはオブジェクト定義のエラーですと表示されます。 xlBook.Sheets("Sheet1").Range("A1:B2").Borders.LineStyle = True ↑のような形であればエラーは出ません。 xlBook.Sheets("Sheet1").Range(Cells(1,1),Cells(2,2)).Borders.LineStyle = True ↑ではエラーが出ます。 新規ExcelApplicationインスタンス内でのRange(Cells)の使用方法が違うのでしょうか?よろしくお願いします。

  • ExcelVBAで「Cells」を使ってセルの選択範囲を指定する方法

    例えば、セル「A1」から「C5」とセル「F1」から「I4」の範囲を選択する場合、 Range("A1:C5,F1:I4").Select としますがこれを「Cells(Row,Column)」を使うやり方はどのようにすればよいのでしょうか? Range(Cells(1, 1), Cells(5, 3)).Select Range(Cells(1, 6), Cells(4, 9)).Select 上記のような二つに分けてプログラムを動かすのではなく、あくまでセル「A1」から「C5」とセル「F1」から「I4」の範囲を同時に指定する方法です。 回答よろしくお願いします。

  • 実行時エラー”1004”アプリケーション定義または

    次のようなコードで10の平均と20の平均はエラーにならないのですが75の時のみエラーになります Sheets(SN).Cells(gyou, 22)のセルにはすべて数字があるのですがエラーになります。 エラー”1004”アプリケーション定義またはオブジェクト定義のエラー au = 100 sk1 = 10 sk2 = 20 sk3 = 75 If WorksheetFunction.Sum(Range("V90:V99")) <> 0 Then Sheets(SN).Cells(au, 24).Value = Application.WorksheetFunction.Average(Sheets(SN).Range(Cells(au - (sk1 - 1), 22), _ Sheets(SN).Cells(au, 22))) End If If WorksheetFunction.Sum(Range("V75:V99")) <> 0 Then Sheets(SN).Cells(au, 25).Value = Application.WorksheetFunction.Average(Sheets(SN).Range(Cells(au - (sk2 - 1), 22), _ Sheets(SN).Cells(au, 22))) End If If WorksheetFunction.Sum(Range("V25:V99")) <> 0 Then Sheets(SN).Cells(au, 26).Value = Application.WorksheetFunction.Average(Sheets(SN).Range(Cells(au - (sk3 - 1), 22), _ Sheets(SN).Cells(au, 22))) エラーの原因を教えてくださいよろしくお願いします。

  • VBAのCopyコマンドについて

    エクセルVBAでシート3のRangeの値をからシート2のRangeへデータをコピーしようとしているのですが Sheets(3).Range("B3:B100").Copy _ Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1)) がうまくいって、 Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy _ sheets(2).Range(Cells(2, col2), Cells(100, col2)) が何故、オブジェクト定義エラーになってしまうのがわかりません。 col1、col2は列の変数です。 よろしくお願いします。

専門家に質問してみよう