Excel VBA質問箱 IV

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

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


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

【46222】特定のセルだけコピーしたい さや 07/1/27(土) 6:26 質問[未読]
【46224】Re:特定のセルだけコピーしたい ichinose 07/1/27(土) 8:49 発言[未読]
【46226】Re:特定のセルだけコピーしたい さや 07/1/27(土) 12:58 質問[未読]
【46227】Re:特定のセルだけコピーしたい かみちゃん 07/1/27(土) 13:12 発言[未読]
【46230】Re:特定のセルだけコピーしたい さや 07/1/27(土) 14:34 質問[未読]
【46231】Re:特定のセルだけコピーしたい かみちゃん 07/1/27(土) 14:58 発言[未読]
【46233】Re:特定のセルだけコピーしたい さや 07/1/27(土) 15:25 発言[未読]
【46235】Re:特定のセルだけコピーしたい さや 07/1/27(土) 15:37 発言[未読]
【46236】Re:特定のセルだけコピーしたい かみちゃん 07/1/27(土) 15:46 発言[未読]
【46238】Re:特定のセルだけコピーしたい さや 07/1/27(土) 16:22 発言[未読]
【46239】Re:特定のセルだけコピーしたい かみちゃん 07/1/27(土) 16:35 発言[未読]
【46240】Re:特定のセルだけコピーしたい さや 07/1/27(土) 16:39 お礼[未読]
【46229】Re:特定のセルだけコピーしたい ichinose 07/1/27(土) 14:02 発言[未読]
【46234】Re:特定のセルだけコピーしたい さや 07/1/27(土) 15:27 お礼[未読]
【46228】Re:特定のセルだけコピーしたい Kein 07/1/27(土) 13:42 回答[未読]

【46222】特定のセルだけコピーしたい
質問  さや  - 07/1/27(土) 6:26 -

引用なし
パスワード
   次のようなプログラムを希望しています。

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だけをコピーする。

私がわかったのは、以下のコードです。

  Range("?").Copy
  Sheets("Sheet2").Select
  Range("v6").Select
  ActiveSheet.Paste
  Application.CutCopyMode = False
  
 あと、45967で教えていただいた事を参考にするような気がします。
  
 よろしくご教授お願いします。

【46224】Re:特定のセルだけコピーしたい
発言  ichinose  - 07/1/27(土) 8:49 -

引用なし
パスワード
   ▼さや さん:
おはようございます。

>
>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だけをコピーする。

例えば、Sheet1のA、C列には、

      A  B     C
 1    1      2007/1/27
 2    2      2007/1/27
 3    3      2007/1/27
 4    4      2007/1/27
 5    5      2007/1/28
 6    6      2007/1/29
 7    7      2007/1/30
 8    8      2007/1/31
 9    9      2007/2/1
10    10      2007/2/2
11    11      2007/2/3
12    12      2007/2/3
13    13      2007/2/3
14    14      2007/2/3
15    15      2007/2/3

というデータがあるとすると、

最新の日付は、上記の条件だと入力されているデータの最終行(C15)から
順に上の行を調べていきます。

すると、10行目で日付が15行目と違っています。
日付が変わった時点で、取得するセル範囲として、日付が変わる直前までの
11行目から15行目までのデータを移行します(つまり、A11から、A15)。

標準モジュールに

'==============================================
Sub main()
  Dim rw2 As Long
  Dim rw1 As Long
  Dim newdate As Date
  With Worksheets("sheet1")
    rw2 = .Cells(.Rows.Count, "a").End(xlUp).Row
    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

そろそろループ処理の考え方に慣れていきましょう。

【46226】Re:特定のセルだけコピーしたい
質問  さや  - 07/1/27(土) 12:58 -

引用なし
パスワード
   ▼ichinose さん、いつも丁寧なご回答ありがとうございます。

私の説明不足の点がありました。すみません。

>例えば、Sheet1のA、C列には、
>
>      A  B     C
> 1    1      2007/1/27
> 2    2      2007/1/27
> 3    3      2007/1/27
> 4    4      2007/1/27
> 5    5      2007/1/28
> 6    6      2007/1/29
> 7    7      2007/1/30
> 8    8      2007/1/31
> 9    9      2007/2/1
>10    10      2007/2/2
>11    11      2007/2/3
>12    12      2007/2/3
>13    13      2007/2/3
>14    14      2007/2/3
>15    15      2007/2/3
16
17
18
19
20
.
.
.
5000

という具合にA列には、あらかじめ数値が入力されていて、C列に毎日、日付を入力していくというイメージです。

よろしくお願いします。

>そろそろループ処理の考え方に慣れていきましょう。

分かりました。参考書を見て勉強します。

【46227】Re:特定のセルだけコピーしたい
発言  かみちゃん  - 07/1/27(土) 13:12 -

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

横から失礼します。

> あらかじめ数値が入力されていて、C列に毎日、日付を入力していくというイメージです。

質問の内容がわかりません。
◆マクロ実行前のSheet1
   A B   C
  1 1
  2 2
  3 3
  4 4
  5 5
  6 6
  7 7
  8 8
  9 9
 :
5000

     ↓

◆マクロ実行後のSheet1
   A B   C
  1 1   2007/1/27
  2 2   2007/1/27
  3 3   2007/1/27
  4 4   2007/1/27
  5 5   2007/1/28
  6 6   2007/1/29
  7 7   2007/1/30
  8 8   2007/1/31
  9 9   2007/2/1
 :
5000

ということかと思いますが、
C1の日付けは、何に基づいて設定したいのですか?
マクロを実行したパソコンの日付なのでしょうか?
あと、C1〜C4、C5、C6、C7・・・の関係がわかりません。
C1〜C4は同じ日付なのに、C5、C6、C7が異なる日付とは?
同じ日付は、何行分設定すればいいのですか?

【46228】Re:特定のセルだけコピーしたい
回答  Kein  - 07/1/27(土) 13:42 -

引用なし
パスワード
   必ず日付が昇順ソートされている、という前提ならば

Sub Test1()
  Dim MyR As Range
  Dim Xdy As Long
   
  With Sheets("Sheet1")
   Set MyR = .Range("C65536").End(xlUp)
   Xdy = WorksheetFunction _
   .Match(CLng(MyR.Value), .Range("$C:$C"), 0)
   .Range(.Cells(Xdy, 1), MyR.Offset(, -2)) _
   .Copy Sheets("Sheet2").Range("V6")
  End With
  Set MyR = Nothing
  Application.Goto Sheets("Sheet2").Range("V1"), True
End Sub

というようなコードでも出来ますが、私ならたぶん、以下のように数式で判定・処理
する方法を選ぶでしょうね。

Sub Test2()
  Dim Ad As String
 
  With Sheets("Sheet1") _
  .Range("C1", Sheets("Sheet1").Range("C65536").End(xlUp))
   Ad = .Address
   With .Offset(, 253)
     .Formula = "=IF(RANK($C1," & Ad & ",0)=1,1)"
     .SpecialCells(3, 1).Offset(, -255) _
     .Copy Sheets("Sheet2").Range("V6")
     .ClearContents
   End With
  End With
  Application.Goto Sheets("Sheet2").Range("V1"), True
End Sub

【46229】Re:特定のセルだけコピーしたい
発言  ichinose  - 07/1/27(土) 14:02 -

引用なし
パスワード
   >私の説明不足の点がありました。すみません。
>
>>例えば、Sheet1のA、C列には、
>>
>>      A  B     C
>> 1    1      2007/1/27
>> 2    2      2007/1/27
>> 3    3      2007/1/27
>> 4    4      2007/1/27
>> 5    5      2007/1/28
>> 6    6      2007/1/29
>> 7    7      2007/1/30
>> 8    8      2007/1/31
>> 9    9      2007/2/1
>>10    10      2007/2/2
>>11    11      2007/2/3
>>12    12      2007/2/3
>>13    13      2007/2/3
>>14    14      2007/2/3
>>15    15      2007/2/3
>16
>17
>18
>19
>20
> .
> .
> .
>5000
>
>という具合にA列には、あらかじめ数値が入力されていて、C列に毎日、日付を入力していくというイメージです。
>
>よろしくお願いします。
>
>>そろそろループ処理の考え方に慣れていきましょう。
であるならば、基準にする列を変えるだけです。
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

でいけると思います。

上記のように例を出すのは非常に良いことですよ。

【46230】Re:特定のセルだけコピーしたい
質問  さや  - 07/1/27(土) 14:34 -

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

>> あらかじめ数値が入力されていて、C列に毎日、日付を入力していくというイメージです。
>質問の内容がわかりません。

以下の誤りです。すみませんでした。

あらかじめ「A列」には、1から5000の数値が入力されていて、C列に毎日、日付を入力していくというイメージです。

また、正しくは以下の通りです。


◆マクロ実行前のSheet1
   A B   C
  1 1   2007/1/27
  2 2   2007/1/27
  3 3   2007/1/27
  4 4   2007/1/27
  5 5   2007/1/28
  6 6   2007/1/29
  7 7   2007/1/30
  8 8   2007/1/31
  9 9   2007/2/1
  : .
   5000

>C1の日付けは、何に基づいて設定したいのですか?
>マクロを実行したパソコンの日付なのでしょうか?
そうではなく、毎日、私が別紙明細に基づき、手入力します。

>あと、C1〜C4、C5、C6、C7・・・の関係がわかりません。
>C1〜C4は同じ日付なのに、C5、C6、C7が異なる日付とは?

これは例えばの話しです。毎日、C列に日付を入力する個数は予想できません。1個の日、3個の日、21個の日と様々です。
また、毎日入力する日付は、基本的にPCのTODAY()と一致しますが、例外もあります。TODAY()の1日前、3日前などがあります。

>同じ日付は、何行分設定すればいいのですか?

確実に予測できませんが、概ね、最高で50行くらいです。

よろしくお願いします。

【46231】Re:特定のセルだけコピーしたい
発言  かみちゃん  - 07/1/27(土) 14:58 -

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

>あらかじめ「A列」には、1から5000の数値が入力されていて、C列に毎日、日付を入力していくというイメージです。
>
>また、正しくは以下の通りです。
>
>
>◆マクロ実行前のSheet1

マクロ処理によって「日付を入力していく」のか、
「日付を入力してから」マクロ処理をするのかどちらなのですか?
また、Sheet2との関連はいかがでしょうか?

>>マクロを実行したパソコンの日付なのでしょうか?
>そうではなく、毎日、私が別紙明細に基づき、手入力します。

「日付を入力してから」マクロ処理をするということでしょうか?

>>あと、C1〜C4、C5、C6、C7・・・の関係がわかりません。
>>C1〜C4は同じ日付なのに、C5、C6、C7が異なる日付とは?
>
>これは例えばの話しです。毎日、C列に日付を入力する個数は予想できません。1個の日、3個の日、21個の日と様々です。
>また、毎日入力する日付は、基本的にPCのTODAY()と一致しますが、例外もあります。TODAY()の1日前、3日前などがあります。

マクロ処理によって「日付を入力していく」のでしょうか?

>>同じ日付は、何行分設定すればいいのですか?
>
>確実に予測できませんが、概ね、最高で50行くらいです。

マクロ処理によって「日付を入力していく」のであれば、マクロ処理開始時に、
・設定したい日付(初期値は、パソコンの日付)
・設定したい行数、もしくは、設定したいセル範囲
をInputBoxなどで指定して処理するということでいいのでしょうか?
また、処理開始行は、日付が入っていないところからという条件でいいのでしょうか?

【46233】Re:特定のセルだけコピーしたい
発言  さや  - 07/1/27(土) 15:25 -

引用なし
パスワード
   ▼かみちゃん さん こんにちは

>マクロ処理によって「日付を入力していく」のであれば、マクロ処理開始時に、
>・設定したい日付(初期値は、パソコンの日付)
>・設定したい行数、もしくは、設定したいセル範囲
>をInputBoxなどで指定して処理するということでいいのでしょうか?
InputBoxは必要ないと思います。

>また、処理開始行は、日付が入っていないところからという条件でいいのでしょうか?

いいえ、処理開始行は、最初の日付が入っているところからです。

よろしくお願いします。

【46234】Re:特定のセルだけコピーしたい
お礼  さや  - 07/1/27(土) 15:27 -

引用なし
パスワード
   ▼ichinose さん:ありがとうございました。

助かりました。

【46235】Re:特定のセルだけコピーしたい
発言  さや  - 07/1/27(土) 15:37 -

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

>マクロ処理によって「日付を入力していく」のか、
>「日付を入力してから」マクロ処理をするのかどちらなのですか?
「日付を入力してから」マクロ処理をします。

>また、Sheet2との関連はいかがでしょうか?

マクロを実行すると、該当のA列のセルがSheet2のV6にコピーされるようにしたいのです。


>また、処理開始行は、日付が入っていないところからという条件でいいのでしょうか?
処理開始行は、最初の日付が入っているところからという事です。

よろしくお願いします。

【46236】Re:特定のセルだけコピーしたい
発言  かみちゃん  - 07/1/27(土) 15:46 -

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

>>マクロ処理によって「日付を入力していく」のか、
>>「日付を入力してから」マクロ処理をするのかどちらなのですか?
>「日付を入力してから」マクロ処理をします。

それでは、[46230]で語失言されている
>あらかじめ「A列」には、1から5000の数値が入力されていて、C列に毎
>日、日付を入力していくというイメージです。
が非常にわかりません。
「C列に毎日、日付を入力していく」というのは、どういうことですか?

>>また、Sheet2との関連はいかがでしょうか?
>
>マクロを実行すると、該当のA列のセルがSheet2のV6にコピーされるようにしたいのです。

お手数ですが、
マクロ処理実行前のSheet1のイメージと
マクロ処理実行後のSheet2のイメージを
提示していただけませんか?
シートイメージ提示の際には、投稿欄の右下にある「等幅」にチェックを入れて
いただくとキレイに見えます。

>>・設定したい行数、もしくは、設定したいセル範囲
>>をInputBoxなどで指定して処理するということでいいのでしょうか?
>InputBoxは必要ないと思います。

マクロ処理で日付を入力するわけではないから、InputBoxは必要ないということでしょうか?

今ひとつなさりたいことが理解できていないのは、私だけかもしれません(T_T)

【46238】Re:特定のセルだけコピーしたい
発言  さや  - 07/1/27(土) 16:22 -

引用なし
パスワード
   ▼かみちゃん さん、こんにちは。
さやです。説明が下手でご迷惑をかけすみません。

>それでは、[46230]で語失言されている
>>あらかじめ「A列」には、1から5000の数値が入力されていて、C列に毎
>>日、日付を入力していくというイメージです。
>が非常にわかりません。
>「C列に毎日、日付を入力していく」というのは、どういうことですか?
具体的に述べると、毎日、C列に日付、D列に商品名、E列に金額などを入力しています。(D、E列はマクロと関係ありません)
毎日、該当するA列を選択して、Sheet2のV6に貼り付けています。
関数の関係で、A列をSheet2にコピーしたいのです。

>マクロ処理実行前のSheet1のイメージ
マクロ実行前のSheet1
   A B   C
  1     2007/1/27
  2     2007/1/27
  3     2007/1/27
  4     2007/1/27
  5     2007/1/28
  6     2007/1/29
  7     2007/1/30
  8     2007/1/30
  9     2007/1/30
  10
  11
  12
  . 
  5000

>マクロ処理実行後のSheet2のイメージを
>提示していただけませんか?

マクロ実行後のSheet2
   v列

6   7   マクロ実行によりこの7、8、9がSheet1よりSheet2にコピーされる
7   8
8   9
9
10

>マクロ処理で日付を入力するわけではないから、InputBoxは必要ないということでしょうか?
はい、そうです。

【46239】Re:特定のセルだけコピーしたい
発言  かみちゃん  - 07/1/27(土) 16:35 -

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

まず、最初に謝らないといけないことがあります。
[46236]で
>それでは、[46230]で語失言されている
書きましたが、
>それでは、[46230]でご発言されている
の間違いです。誤字とはいえ、大変申し訳ありません。

>6   7   マクロ実行によりこの7、8、9がSheet1よりSheet2にコピーされる

7、8、9がコピーされるのはどのように決めるのかといえば、
Sheet1のC列の値の入っている最終行(C9セル)から順に同じ日付をまとめて(C7:C9セル)それらの行のA列の値(A7:A9セル)をSheet2にコピーしたいということであれば、
[46229]のichinoseさん、ご提示のコードで十分ですし、解決されたご様子ですの
で、それでよろしいかと思います。

私が、理解できていないにもかかわらず、横から割り込んでしまい申し訳ありませんでした。

【46240】Re:特定のセルだけコピーしたい
お礼  さや  - 07/1/27(土) 16:39 -

引用なし
パスワード
   ▼かみちゃん さん
 こんにちは。さやです。
>私が、理解できていないにもかかわらず、横から割り込んでしまい申し訳ありませんでした。

とんでもないです。熱心に心配していただき、ありがとうございました。

これからも、よろしくお願いします。

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