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

次のような処理を考えています。
   A    B     (シート1)
2001/5/1 10000
2001/5/2 3000
  :   :
このデータはACCESSからインポートしたものですが、これを下記のような
シートに展開しようとしています。
    1月  2月  ・・・   (シート2)
1日 10000 ???
2日 3000  ???
:  :  :
年が変わるとシートを追加します。
次のようなロジックを考えました。
Dim Rng As Range  (他略)
I = 2
Wrk_Year = 9999
Worksheets("シート1").Activate
Do While (ActiveSheet.Range("A" & I) <> "")
 Set Rng = Range("A" & I)
 If Wrk_Year = Year(Rng.Value) Then
  Else
   Wrk_Year = Year(Rng.Value)
   For Each Worksheet In Worksheets '同じシート名があるか
    If Worksheet.Name = Wrk_Year & "年" Then
     Sh_Flg = 0
     Exit For
    Else
     Sh_Flg = 1
    End If
   Next
   If Sh_Flg = 1 Then
    Worksheets("シート2").Copy after:=Worksheets(Worksheets.Count) '最後尾にシートコピー
    ActiveSheet.Name = Wrk_Year & "年"
    Worksheets("シート1").Activate
    Sh_Flg = 0
   End If
  End If
  Cell_Month = Month(Rng.Value) + 1
  Cell_Day = Day(Rng.Value) + 1
(1) Rng.Value.Copy Worksheets(Wrk_Year & "年").Cells(Cell_Day, Cell_Month)
  I = I + 1
Loop
ここで、(1)でいつも「オブジェクトが必要です。」とのエラーになってしまいます。
たぶん、非常に基礎的なことだと思うのですが、なぜでしょうか?

A 回答 (2件)

#01です



COPYメソッドはRangeオブジェクトに対しては有効ですが、Valueに対しては行えません。Copyの対象が不適切なので「オブジェクトが必要です。」というエラーになったと考えられます。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

勉強になりました。たいへんよくわかりました。

お礼日時:2006/09/19 00:01

時間がなくゆっくり読んでいられないのですが(1)は値を代入するところですね。

ならば

 Worksheets(Wrk_Year & "年").Cells(Cell_Day, Cell_Month) = Rng.Value

で良いのではないでしょうか。

Copyメソッドを使いたいのであれば Rng.Copy をして、(Value.Copyではない)
Worksheets(Wrk_Year & "年").Cells(Cell_Day, Cell_Month) をSelectしてから、Activesheet.Paste で貼り付けます 
    • good
    • 0
この回答へのお礼

確かにできました。ありがとうございます。

しかし、いったい何が悪かったのでしょうか?
(わたしもまだ基本的なところが理解できていないのかも知れません。)

お礼日時:2006/09/17 12:25

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A