- ベストアンサー
エクセルVBAでデータの全データ範囲を取得する方法
- Excel VBAを使用して、指定されたセル範囲から全データ範囲を取得する方法について質問があります。
- 特定のシートとセル範囲を指定して、そのセル範囲内のデータが入っている全データ範囲を取得するExcel VBAの関数を作成しましたが、実行時にエラーが発生します。
- エラーメッセージは型が違うという内容ですが、なぜエラーが発生するのでしょうか?どうすればエラーを解消できるでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
CurrentRegion の範囲は必ずしも ActiveSheet 上である必要はないと思いますが、呼び出し側で何かしら特定済みの Range1 をそのまま使って、 Set Range_Scope = Range1.CurrentRegion でよいかと。「.Range("セル番地")」というプロパティはあっても、「.Range1」というのはないので、勝手に作ったらエラー。「.Range(Range1)」というのも、Range1 が文字列ではないので、できないかと。
その他の回答 (4)
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.4 さん、補足ありがとうございます。 >.Range1,Cu… とかもありだと思うのですが?… ダメです? ダメですね。説明済み。そういうプロパティはないので。 ドットなしの「Range1」ならプロパティではなく、あなたが定義したオブジェクト変数なので、「Range1.CurrentRegion」と使ってオッケー。 >レンジ情報からどのシートなのかは知り得ないのですか? debug.print range1.parent.name とでも打って実行してみては。
お礼
ありがとうございます。 まだまだヒヨッコですが、 何とかRenge 使えそうかも? です。
- ap_2
- ベストアンサー率64% (70/109)
オブジェクトがプロパティをサポートしてないとか、そんなエラーだったはず。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の指摘通りですよ。
お礼
なるほど! シート情報がすでに含まれているところに、 別にシートを指定している時点で ダメダメなのですね。 ところで、 レンジ情報からどのシートなのかは 知り得ないのですか?
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
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
お礼
まずは謝罪します。 お礼が遅れ申し訳ありません。 さて、 幾つか書かれていますが、 どれがどうなのか、 いまいち汲めてません。 どう理解すれば適切でしょうか?
- bin-chan
- ベストアンサー率33% (1403/4213)
function Range_Scope(Sheet_Name1 As String, Range1 As String) As Range set Range_Scope = sheets(Sheet_Name1).Range(Range1).currentregion end function じゃないの?
お礼
レンジオブジェクトで受け取れないのですか? 要点としては、 レンジからはシート情報が読み取れない と、以前聞いた気がするのですが 非参照中のレンジ範囲を レンジオブジェクトとシート名を受け取って操作したい。 と、言うことなのです。 すでにレンジオブジェクトが取得されているのに 範囲を示す文字列でないと引き渡せないのはないかな? と、思ったのです。 それとも レンジオブジェクトは、その指し示す範囲が、 ブック、シートの別も含め、特定されている。 と、言うことでしょうか? ご指南お願いします。
お礼
Range1はローカルな変数なのでお気になさらなくてよいかと思いますよ あとレンジオブジェクトの実態を指し示していると思いますから .Range1,Cu… とかもありだと思うのですが?… ダメです?