• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2007 CurrentRegion…)

エクセルVBAでデータの全データ範囲を取得する方法

このQ&Aのポイント
  • Excel VBAを使用して、指定されたセル範囲から全データ範囲を取得する方法について質問があります。
  • 特定のシートとセル範囲を指定して、そのセル範囲内のデータが入っている全データ範囲を取得するExcel VBAの関数を作成しましたが、実行時にエラーが発生します。
  • エラーメッセージは型が違うという内容ですが、なぜエラーが発生するのでしょうか?どうすればエラーを解消できるでしょうか?

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

  • ベストアンサー
回答No.3

CurrentRegion の範囲は必ずしも ActiveSheet 上である必要はないと思いますが、呼び出し側で何かしら特定済みの Range1 をそのまま使って、 Set Range_Scope = Range1.CurrentRegion でよいかと。「.Range("セル番地")」というプロパティはあっても、「.Range1」というのはないので、勝手に作ったらエラー。「.Range(Range1)」というのも、Range1 が文字列ではないので、できないかと。

Nouble
質問者

お礼

Range1はローカルな変数なのでお気になさらなくてよいかと思いますよ あとレンジオブジェクトの実態を指し示していると思いますから .Range1,Cu… とかもありだと思うのですが?… ダメです?

その他の回答 (4)

回答No.5

No.4 さん、補足ありがとうございます。 >.Range1,Cu… とかもありだと思うのですが?… ダメです? ダメですね。説明済み。そういうプロパティはないので。 ドットなしの「Range1」ならプロパティではなく、あなたが定義したオブジェクト変数なので、「Range1.CurrentRegion」と使ってオッケー。 >レンジ情報からどのシートなのかは知り得ないのですか? debug.print range1.parent.name とでも打って実行してみては。

Nouble
質問者

お礼

ありがとうございます。 まだまだヒヨッコですが、 何とかRenge 使えそうかも? です。

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.4

オブジェクトがプロパティをサポートしてないとか、そんなエラーだったはず。VBEのエラーはかなり親切なので、ちゃんとチェックしましょうね。。 「オブジェクト . メンバ」は、オブジェクトが提供する機能(メンバ:=プロパティやメソッド)を呼び出します。 .Rangeは、Worksheetオブジェクトのプロパティ。型と同名なので混乱しますが、Rangeプロパティは「Rangeオブジェクト」ではなく、「Rangeオブジェクトを取得する機能」です。 http://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.worksheet_members(v=vs.80).aspx  Set Range1 = Sheets(Sheet_Name1).Range("A1") そもそも、等号の左右は同じなので、Range1にシート指定も含まれてます。※Sheet指定省略時はActiveSheet.Rangeとして扱われる。 ということで、ANo.3の指摘通りですよ。

Nouble
質問者

お礼

なるほど! シート情報がすでに含まれているところに、 別にシートを指定している時点で ダメダメなのですね。 ところで、 レンジ情報からどのシートなのかは 知り得ないのですか?

回答No.2

CurrentRegionの動作は、理解できないていない上に使ったことがないですが、Sheets(Sheet_Name1)は指定できない? ActiveSheetがガチの前提ということでは?? 'Option Explicit Function Range_Scope(Sheet_Name1 As String, Range1 As Range) As Range 'Set Range_Scope = Sheets(Sheet_Name1).UsedRange 'Set Range_Scope = Sheets(Sheet_Name1).CurrentRegion Set Range_Scope = Range1.CurrentRegion End Function Sub xxx() Set xRange = Range_Scope("Sheet1", Range("a1")) For Each xCell In xRange Debug.Print xCell.Value Next End Sub

Nouble
質問者

お礼

まずは謝罪します。 お礼が遅れ申し訳ありません。 さて、 幾つか書かれていますが、 どれがどうなのか、 いまいち汲めてません。 どう理解すれば適切でしょうか?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

function Range_Scope(Sheet_Name1 As String, Range1 As String) As Range set Range_Scope = sheets(Sheet_Name1).Range(Range1).currentregion end function じゃないの?

Nouble
質問者

お礼

レンジオブジェクトで受け取れないのですか? 要点としては、 レンジからはシート情報が読み取れない と、以前聞いた気がするのですが 非参照中のレンジ範囲を レンジオブジェクトとシート名を受け取って操作したい。 と、言うことなのです。 すでにレンジオブジェクトが取得されているのに 範囲を示す文字列でないと引き渡せないのはないかな? と、思ったのです。 それとも レンジオブジェクトは、その指し示す範囲が、 ブック、シートの別も含め、特定されている。 と、言うことでしょうか? ご指南お願いします。

関連するQ&A

専門家に質問してみよう