Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6232 / 13644 ツリー ←次へ | 前へ→

【46459】[46222]の追加質問です・セルのコピー さや 07/2/3(土) 21:56 質問[未読]
【46460】Re:[46222]の追加質問です・セルのコピー かみちゃん 07/2/3(土) 22:05 発言[未読]
【46461】Re:[46222]の追加質問です・セルのコピー ichinose 07/2/3(土) 22:16 発言[未読]
【46463】Re:[46222]の追加質問です・セルのコピー さや 07/2/3(土) 23:24 お礼[未読]
【46464】Re:[46222]の追加質問です・セルのコピー かみちゃん 07/2/3(土) 23:33 発言[未読]
【46465】Re:[46222]の追加質問です・セルのコピー さや 07/2/4(日) 0:00 お礼[未読]
【46466】Re:[46222]の追加質問です・セルのコピー へっぽこ 07/2/4(日) 0:42 発言[未読]
【46467】Re:[46222]の追加質問です・セルのコピー さや 07/2/4(日) 7:11 お礼[未読]

【46459】[46222]の追加質問です・セルのコピー
質問  さや  - 07/2/3(土) 21:56 -

引用なし
パスワード
   [46222]での質問では、下記の回答を ichinoseさんより頂きました。大変、お世話になりました。

今回は、下記のような追加コードを希望しています。

[46222]の内容

次のようなプログラムを希望しています。

1.A列に数値が入力されています。数値は昇順で、連番です。 (ダブりはありません)

2.A列に対応して、C列に日付が入力されます。これも昇順ですが、ダブりがあります。

例えば、2007/1/1がC1からC10に同じく入力、2007/1/27がC50からC54に入力されています。

3.A列を、下記の条件でsheet2のV列のセルV6を先頭とするセルにコピーしたい。

条件・・C列に入力される最新の日付(1番新しい日付)に対応している、A列のセルだけをコピーする。
   
   2.の例だとA50からA54だけをコピーする。
 

Sub main()
 Dim rw2 As Long
 Dim rw1 As Long
 Dim newdate As Date
  With Worksheets("sheet1")
    rw2 = .Cells(.Rows.Count, "c").End(xlUp).Row
'                  ↑ここをaからcに変える
    newdate = .Range("c" & rw2).Value
    For rw1 = rw2 - 1 To 1 Step -1
     If .Range("c" & rw1).Value <> newdate Then Exit For
     Next rw1
    .Range(.Cells(rw1 + 1, 1), .Cells(rw2, 1)).Copy
   Worksheets("sheet2").Range("v6").PasteSpecial xlValue
    Application.CutCopyMode = False
    End With
End Sub

追加質問

 上記の該当するA列のセルのうち「上から3番目のセルから最終セルまで」をsheet2のセルC2を先頭とする列にコピーしたい。
 上記の例だと、A52 A53 A54をコピーする。

 これが質問の内容です。よろしくご教授お願いします。

【46460】Re:[46222]の追加質問です・セルのコピー
発言  かみちゃん  - 07/2/3(土) 22:05 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>上記の該当するA列のセルのうち「上から3番目のセルから最終セルまで」を
>Sheet2のセルC2を先頭とする列にコピーしたい。

以下のような感じにすればいいかと思います。
'  .Range(.Cells(rw1 + 1, 1), .Cells(rw2, 1)).Copy
'  Worksheets("sheet2").Range("v6").PasteSpecial xlValue
  With .Range(.Cells(rw1 + 1, 1), .Cells(rw2, 1))
   .Offset(2).Resize(.Rows.Count - 2).Copy
  End With
  Worksheets("Sheet2").Range("C2").PasteSpecial xlValue

【46461】Re:[46222]の追加質問です・セルのコピー
発言  ichinose  - 07/2/3(土) 22:16 -

引用なし
パスワード
   ▼さや さん:
こんばんは。

>[46222]での質問では、下記の回答を ichinoseさんより頂きました。大変、お世話になりました。
>
>今回は、下記のような追加コードを希望しています。
>
>[46222]の内容
>
>次のようなプログラムを希望しています。
>
>1.A列に数値が入力されています。数値は昇順で、連番です。 (ダブりはありません)
>
>2.A列に対応して、C列に日付が入力されます。これも昇順ですが、ダブりがあります。
>
>例えば、2007/1/1がC1からC10に同じく入力、2007/1/27がC50からC54に入力されています。
>
>3.A列を、下記の条件でsheet2のV列のセルV6を先頭とするセルにコピーしたい。
>
>条件・・C列に入力される最新の日付(1番新しい日付)に対応している、A列のセルだけをコピーする。
>   
>   2.の例だとA50からA54だけをコピーする。
> 
>
>Sub main()
> Dim rw2 As Long
> Dim rw1 As Long
> Dim newdate As Date
>  With Worksheets("sheet1")
>    rw2 = .Cells(.Rows.Count, "c").End(xlUp).Row
>'                  ↑ここをaからcに変える
>    newdate = .Range("c" & rw2).Value
>    For rw1 = rw2 - 1 To 1 Step -1
>     If .Range("c" & rw1).Value <> newdate Then Exit For
>     Next rw1
    if rw1+3<=rw2 then
     .Range(.Cells(rw1 + 3, 1), .Cells(rw2, 1)).Copy
     Worksheets("sheet2").Range("v6").PasteSpecial xlValue
      Application.CutCopyMode = False
     end if
'こんなところでしょうか!!
'でも、 2007/1/27が C53とC54だけだったらどうするのですか?
'上記のコードはその時はコピーしていません
>    End With
>End Sub
>
>追加質問
>
> 上記の該当するA列のセルのうち「上から3番目のセルから最終セルまで」をsheet2のセルC2を先頭とする列にコピーしたい。
> 上記の例だと、A52 A53 A54をコピーする。
>
> これが質問の内容です。よろしくご教授お願いします。

【46463】Re:[46222]の追加質問です・セルのコピー
お礼  さや  - 07/2/3(土) 23:24 -

引用なし
パスワード
   ichinose さん、かみちゃんさん、早速のご回答ありがとうございます。

お二人のコードの違いを、今晩、学びたいと思います。


>'でも、 2007/1/27が C53とC54だけだったらどうするのですか?
>'上記のコードはその時はコピーしていません

同じ日付が2つだけという事は、まず、ありえません。

しかし、万が一を想定して、コードを作成した方がよいのでしょうか?

【46464】Re:[46222]の追加質問です・セルのコピー
発言  かみちゃん  - 07/2/3(土) 23:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>しかし、万が一を想定して、コードを作成した方がよいのでしょうか?

それにこしたことはないので、私が提示したコードの対処策を提示させていただきます。
  With .Range(.Cells(rw1 + 1, 1), .Cells(rw2, 1))
   If .Rows.Count > 2 Then
    .Offset(2).Resize(.Rows.Count - 2).Copy
    Worksheets("Sheet2").Range("C2").PasteSpecial xlValue
   End If
  End With

【46465】Re:[46222]の追加質問です・セルのコピー
お礼  さや  - 07/2/4(日) 0:00 -

引用なし
パスワード
   かみちゃん さん、こんばんは。

ご返信、ありがとうございます。


また、「Offset」についても理解しようと思います。

【46466】Re:[46222]の追加質問です・セルのコピー
発言  へっぽこ  - 07/2/4(日) 0:42 -

引用なし
パスワード
   横槍ですが….Address使うと理解が早いかと。


Sub サンプル()
  MsgBox Range("C10").Offset(-1, 2).Address
  MsgBox Range("C10").Resize(4, 5).Address
  MsgBox Range("C10").Offset(-1, 2).Resize(4, 5).Address
End Sub

【46467】Re:[46222]の追加質問です・セルのコピー
お礼  さや  - 07/2/4(日) 7:11 -

引用なし
パスワード
   ▼へっぽこ さん、おはようございます。

>.Address使うと理解が早いかと。

ありがとうございました。

色々、試してみます。

6232 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free