• ベストアンサー

Rangeオブジェクトに格納できない

A1からD5までデータが入っているのですが、 そのデータの情報をRangeオブジェクトに格納する事は出来ないのでしょうか? vbaで Sub Sampsle() Dim r As Range r = ActiveSheet.UsedRange End Sub をやろうとしてるのですが、 実行時エラー_91「オブジェクト変数またはWithブロック変数が設定されていません」になります。 r に格納しちゃえば、最終列が何列目か最終行が何行目か、A1の値は何か、などしゅとくできるんじゃないかなー と思ったのですが、できないのでしょうか?

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

VBAでオブジェクトを変数に格納する場合は、   Set r = ActiveSheet.UsedRange といったように、「Set」が必要です。 Sub Sample()   Dim r As Range   Set r = ActiveSheet.UsedRange   MsgBox "使用範囲の総セル数は " & r.Count " です"   Set r = Nothing End Sub ※Setで格納した変数は、使用後はNothingをしておいた方が無難です。

kcdlcjlja8
質問者

お礼

あ!!!! set忘れてました! 無事解決しました。ありがとうございました。

関連するQ&A

  • 列の個数、行の個数を取得することは不可能ですか?

    http://okwave.jp/qa/q7981824.html の続きなのですが A1からD5まで値が入っているのに Sub Sampsle() Dim r As Range Set r = ActiveSheet.UsedRange End Sub で値を格納した場合、 列は全部で4つ 行は全部で5つなのですが ウォッチウインドウで確認すると Column : 1 : Long : Module1.Sampsle Row : 1 : Long : Module1.Sampsle になってしまうのですが、 オブジェクトに格納した値から 列の個数、行の個数を取得することは不可能ですか?

  • VBAのRangeオブジェクトについて

    いつもお世話になっております。 VBAのRangeオブジェクトについてご教示下さい。 例えば下記のPGを組みます。 Sub test() Dim r As Excel.Range Set r = Me.Range("A1") Debug.Print r.Cells.Count End Sub この時、Debug.Printには"1"と表示されます。 Debug.Printでブレイクを置き、ここでA列を削除するとDebug.printでエラーが出てしまいます。 Rangeオブジェクト生成後、もしも参照先のセルが削除してしまった場合、条件分岐の処理を入れたいのですが、どのように処理をいれればよろしいでしょうか? セル削除後、Rangeのプロパティを参照した時点でエラーが発生してしまいます。 Typeで確認するとRangeがちゃんと取れるのですが・・・。 "参照先のセルが消されたかどうか"を判別する方法はあるのでしょうか?

  • Excel.Rangeで取得した値を配列に格納するには?

    プログラミング初心者です。 VB.NET でExcelからデータを取得したのですが、配列等に格納したいのですが、うまくできなくて困っています。どなたか教えてください。 例)以下のデータを取得する場合 セルA(列)1(行)からA5まで セルB1からB5まで セルC1からC5まで Dim xl_APP As Excel.Application Dim xl_Book AS Excel.Workbook Dim xl_Sheet As Excel.Seets = xl_Book.Worksheets Dim xl_W_Sheet As Excel.Worksheet = CType(xl_W_Sheet.Item(1),Excel.Worksheet) 中略 Dim range_data As Excel.Range Dim i Integer Dim j Integer Dim strCel As String For i = 1 To 5 For j = 1 To 3 range_data = CType(xl_W_Sheet.Cells(i,j),Excel.Range) strCel = CStr(range_data.Value)  ↑String型変数に格納していますが、多次元配列?に格納して取り出せるようにしたいのですが、どうしたらよいのでしょうか? Next Nest <range_dataに格納されるデータ> A1:氏名 B1:学年 C:1 年齢 以下同上 ・・・・のように取り出したいと考えています。 よろしくお願いします。

  • Range.Name プロパティの使い方

    VBAの勉強中のものです。(エクセル) 一つ一つヘルプを見て、検証して勉強していこうと思ってるのですが 使い方がわからないので教えてください。 Range.Value プロパティならうまくいくのですが、 Range.Name プロパティの使い方がわかりません。 ----------------------- Sub test1() MsgBox Range("a1").Name End Sub Sub test2() Dim R As Range Set R = Range("a1") MsgBox R.Name End Sub ----------------------- どちらも、アプリケーション定義またはオブジェクト定義のエラーです。になります。 ----------------------- Sub test1() MsgBox Range("a1").Value End Sub Sub test2() Dim R As Range Set R = Range("a1") MsgBox R.Value End Sub ----------------------- rangeにすればうまくいきます。 Range.Name プロパティの使い方を教えてください。アドバイスよろしくお願いします。

  • 配列に格納したデータを指定行以下に転記する方法

    excel2000を使っています。 以下のコードだと最終行にデータが転記されます。これを4行目に確定して、転記したいのです。常に4行目つまりA列4行目以下に上書きしたいのです。 その場合コードをどのように変更すべきでしょうか? Sub 配列() With ActiveSheet ' 配列に格納 --------------------------- Dim i As Integer Dim LastRow As Long Dim SaleAry As Variant ' 配列に格納 --------------------------- SaleAry = Array(.Range("t4"), .Range("e5"), .Range("g5"), .Range("o5")) End With ' 転記 --------------------------- With Worksheets("daityou") LastRow = .Range("A65536").End(xlUp).Row For i = 0 To UBound(SaleAry) .Cells(LastRow + 1, i + 1).Value = SaleAry(i) ' Next i End With Set SaleAry = Nothing End Sub

  • VBAで、タイトル行(1行目)が移動できないようにしたい。

    以下のVBAで、最新仕入の情報はボタンを押すと(マクロを実行させると)別シートの正しい位置に移動します。 しかし、 newWSの2行目に、データが無い場合でボタンを押すとタイトル行(1行目)が、ruiWS シートの最終行の下に入ってしまい、困っています。 newWS の2行目にデータが無い場合には、ボタンを押しても、タイトル行が移動できないようにして、メッセージボックスで『データがありませんよ』と知らせるには、 どのようなプロシージャを書けばよいのか?教えていただきたくお願いします。 (VBAは、初心者です) Sub Macro1() Dim newWS As Worksheet Dim ruiWS As Worksheet Dim newCcount As Long Dim newRcount As Long Dim ruiCcount As Long Dim ruiRcount As Long Set newWS = Worksheets("最新仕入れ情報") Set ruiWS = Worksheets("累積仕入れ情報") newRcount = newWS.UsedRange.Rows.Count ruiRcount = ruiWS.UsedRange.Rows.Count newWS.Range("A2:F" & newRcount).Cut ruiWS.Select Range("B" & (ruiRcount + 1)).Select ActiveSheet.Paste End Sub

  • Rangeなどを変数でエラー

    Excel VBAについて。 以下のコードで「オブジェクトは、このプロパティまたはメソッドをサポートしていません」 エラーが発生します。原因は何でしょうか? Sub A() Dim stest Set stest = Worksheets("TEST") Dim ra Set ra = Range("C2") stest.ra.Value = Sheets("Sheet1").Cells(i, 2).Value ★ End Sub ★をSheets("TEST"). Range("C2").Value =略 のように、変数を使わずに記述するとエラーになりません。

  • マクロについて

    すみません、初心者です。ご教示ください。 今、表中の合計行(表の最終行)の上に、行を挿入するマクロを作成しておりまして。 【コマンドボタンを押すと、ウィンドウが出てきて、挿入したい行数を入力すれば、その分だけ挿入される】 Sub 表の行挿入() Dim r2 As Long Dim r As Long Dim rge As Range A列に合計欄があることが前提 Set rge = ActiveSheet.Range("A:A").Find("計") if rge Is Nothing Then Exit Sub r = rge.Row r2 = TextBox1.Text If r2 > 0 Then ActiveSheet.Range("A" & r & ":F" & (r + r2 - 1)).Insert xlDown ・・・ とここまで記述して、なやんでいます。 表はこの場合A列からF列までの範囲のものなのですが、 上記AやFという記述ではなく、マクロにて表の範囲指定を、うまくできないかな、と。 よろしくお願いいたします。

  • 最終列に入力されている文字を表示する

    エクセルVBAで最終列に入力されている値の表示方法について教えてください。 最終行については表示できるのですが、最終列に入力されているものの表示がうまくいきません。 A列の最終行の値をセル”D1”に表示するについては Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long r = Cells(Rows.Count, 1).End(xlUp).Row Range("D1").Value = Cells(r, 1).Value End Sub でうまくいきました。 最終行、例えば3列目の10行目に”111”と入力されているときにセル”D1”に”111”と表示するようにはどうしたらよいのでしょうか。 どなたがご指南ください宜しくお願いします。

  • 範囲内に合計を出す

    毎日SUM関数で合計を出していますが、もっと簡単に出せないかと思い質問しました。H7からデーター(数字)が下に入っていきます。(H7.H8.H9.・・・・・)日によ って最後の行が違います。(シートは毎日違いますが最初に入る場所はH7からと決まっています。)昨日はH7~H20でした。今日はH7~H27ですと日によってばらばら です。計算のしかたですが、H20で終わった時は、合計ボタンを押したらH7~H20までをH1に合計を表示してH列の最終行の次も合計を表示する所まではなんとか 出来ましたが、L列から以降のセルにデーターがあっても最終行と判断しない様にするにはどうすればいいですか。(A列~K列で最終行がK25の時M列のM30にデーターがある時はH31が最終行の次と表示しますが本当はH26と表示してほしいです)アプリケーションはExcel2000です。よろしくお願いします。 Private Sub CommandButton1_Click() Dim maxRow As Long maxRow = Application.Max(Range("H65536").End(xlUp).Row, 5) Range("H1") = Application.Sum(Range("H7:H" & maxRow)) Range("A1:K2").Copy With ActiveSheet.UsedRange .Cells(.Count + 1).Select End With ActiveSheet.Paste Application.CutCopyMode = False With ActiveSheet.UsedRange .Cells(.Count + 1).Select End With End Sub

専門家に質問してみよう