|
|
| Excel VBA Macro ・ 値の操作 ・ FAQ |
|
オートフィルタで抽出した行数を取得するコードでエラーが出てしまうが?
|
|
|
|
Question 008p |
拙著「組み方講座・プロの定番」 |
 |
 |
|
|
116ページ 3章2-3 定番(3)C1 ◆ 環境・・ Excel 2000 & Windows XP

「オートフィルターで抽出したデータの行数等を取得する」を参考にしてマクロを組んだのですが、現状のExcel2000の環境では、[実行時エラー '438": オブジェクトは、このプロパティまたはメソッドをサポート
していません。] がでます。 (★★印の箇所です)
Dim DBシート, 基点セル, 抽出列, 抽出キー
Dim 別シート, コピー先キー
Dim コピー先シート As Worksheet
Dim 抽出範囲 As Range
Dim 領域 As Range
Dim 行数
'オートフィルターで抽出
DBシート = "sheet1"
基点セル = "A1"
抽出列 = 2
抽出キー = txtPeji.Text
With Worksheets(DBシート)
.Activate
If .AutoFilterMode Then 'オートフィルタモードがオンなら
Selection.AutoFilter 'リセットする
End If
End With
Range(基点セル).AutoFilter field:=抽出列, Criteria1:=抽出キー
'データがない場合
Set 領域 = Range(基点セル).CurrentRegion
行数 = 領域.Columns(1).SpecialCells(xlCellTypeVisible).cell.Count - 1 '★★
If 行数 = 0 Then
MsgBox "一致するデータはありません"
Else
'抽出結果をコピーする
Worksheets("抽出").Cells.Clear '抽出シートのクリア
別シート = "抽出"
コピー先セル = "A1"
Set コピー先シート = Worksheets(別シート)
Set 抽出範囲 = Worksheets(DBシート).Range(基点セル).CurrentRegion
コピー先シート.Cells.Clear
With 抽出範囲
.Resize(.Rows.Count - 1).Offset(1).Copy _
Destination:=コピー先シート.Range(コピー先セル)
End With
End If
Worksheets("sheet1").AutoFilterMode = False 'オートフィルタオフ
私ども全くの初心者で、お手間を取らせますが、よろしければ、記述違いを指摘していただけないでしょうか。
よろしくお願いします。
|
|
Answer |
Copyright (C) 2005.12.13 永井善王 |
|
|
拙著「ExcelVBAマクロ組み方講座 プロの定番・裏技・合わせ技[編]」をご購読、ありがとうございます。
「全くの初心者」とご謙遜ですが、拝見したところ、定番B[C1]、[C3]、[E2]、合わせ技@のサンプルや、
ユーザーフォームから抽出キーの値を取得される等、上手に組み合わせておられます。
エラー原因は s が漏れているからだと思いますから、下記のとおり
cell の後に s を入れて cells としてください。
行数 = 領域.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
|
|
|
|
| |
|
|