プロが教える店舗&オフィスのセキュリティ対策術

シート名→ コース別VBA に
表示する窓口を設定しました。

そして、クラス出席番号順 というシート名から
そのコース別VBAに表示するという作業です。
表示するのは、番号・名前・住所などです。

一応、下のように打ってみたのですが、
「オブジェクトは、メソッドまたはプロパティをサポートしていません。」

よろしくお願い致します。


Sub コース別表示()
Set 窓 = Worksheets("コース別VBA")
引き取り = 窓.Cells(3, 2)
Set クラス = Worksheets("クラス出席番号順")

縦 = 6
For 行 = 3 To 351
If クラス.Cells(行, 9) = 引き取り Then
窓.cell(縦, 2) = クラス.Cells(行, 3)
窓.cell(縦, 3) = クラス.Cells(行, 4)
窓.cell(縦, 4) = クラス.Cells(行, 5)
窓.cell(縦, 5) = クラス.Cells(行, 6)
窓.cell(縦, 6) = クラス.Cells(行, 7)
窓.cell(縦, 7) = クラス.Cells(行, 8)

縦 = 縦 + 1

End If

Next

End Sub

「エクセル(VBA)で名簿から該当する人を」の質問画像

A 回答 (2件)

エラー修正に関しては#1の方の通りです。


気になった点は、データ数が増減する可能性があるのであるのでしょうから、コース別VBAシートに抽出したデータを最初に削除する必要があります。又、抽出元データの増減にも対処が必要です。
両シートのデータがあるであろう列のデータが存在する最終行を取得し、データ削除又はforループの指定をする為に、変数「窓最大」「クラス最大」を追加したのが下記のマクロです。ご参考まで。


Sub コース別表示()
Dim 窓, クラス As Worksheet
Dim 引き取り As String
Dim 縦, 行 As Integer
Dim 窓最大, クラス最大 As Integer


Set 窓 = Worksheets("コース別VBA")
Set クラス = Worksheets("クラス出席番号順")

引き取り = 窓.Cells(3, 2).Value

'コース別VBAシート C列の最終行を取得し、最終行が5以上であれば、B6~G列最終行までの値を削除する
窓最大 = 窓.Range("B" & Rows.Count).End(xlUp).Row
If 窓最大 > 5 Then 窓.Range("B6:G" & 窓最大).ClearContents


'クラス出席番号順シート C列の最終行を取得
クラス最大 = クラス.Range("C" & Rows.Count).End(xlUp).Row

縦 = 6
For 行 = 3 To クラス最大
If クラス.Cells(行, 9).Value = 引き取り Then

'クラス出席番号順シートのC列~H列の値をコース別VBAシートのB~G列に出力する
窓.Cells(縦, 2).Resize(, 6) = クラス.Cells(行, 3).Resize(, 6).Value
縦 = 縦 + 1

End If

Next

窓.Activate

End Sub
    • good
    • 0
この回答へのお礼

すごいですね。データ数の増減などあります。全くその通りです。
いろいろと検索され抽出できるようになりました。
大変助かりました。ありがとうございます(^^)

お礼日時:2013/04/24 23:35

(誤)窓.cell(縦, 2)


(正)窓.cells(縦, 2)

因みに転記先が連続しているのでしたら、窓.cells(縦, 2).Resize(,6) = クラス.Cells(行, 3).Resize(,6).Valueでよろしいのではないでしょうか。
    • good
    • 0
この回答へのお礼

そうでした。。自分だと気づかないものです。ありがとうございます。
また、転記先が連続している書き方についてもありがとうございました。

お礼日時:2013/04/24 23:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!