Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : 指定なし)
指定した期間のみ繰り返したいです【for next】
投稿日時: 19/03/22 11:34:38
投稿者: timex timex

こんにちは。
シート間のデータを張り付けるマクロを作成してまして
指定した期間のみ繰り返し貼り付けをしたいと思っておりますが
うまくできません。
 
以下のvba【Sub 貼り付け()】に【指定期間】を追加して指定した期間のみ
貼り付けを繰り返すことは可能でしょうか?ご教授いただければ幸いです。
 
 【指定期間】
Dim d1 As Date, d2 As Date
 d1 = "1/09/2018"
 d2 = "30/09/2018"
 If d1 >= Worksheets("sheet2").Range("M" & i & ":" & "N" & i).Value <= d2 Then
 
 
【Sub 貼り付け()】
 Dim i As Long
  For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
     
  Worksheets("sheet1").Range("D" & i) = Worksheets("sheet2").Range("F" & i)
  Worksheets("sheet1").Range("J" & i) = Worksheets("sheet2").Range("L" & i)
  Worksheets("sheet1").Range("K" & i) = Worksheets("sheet2").Range("V" & i)
  Worksheets("sheet1").Range("Y" & i) = Worksheets("sheet2").Range("AB" & i)
 
   Next
      
End Sub
  
     
 

回答
投稿日時: 19/03/22 13:33:48
投稿者: sk

引用:
If d1 >= Worksheets("sheet2").Range("M" & i & ":" & "N" & i).Value <= d2 Then

・VBA の文法上、上記のような構文で
 三項比較を行なうことは出来ない。
 
・2 つ以上のセルを参照する Range オブジェクトの
 Value プロパティによって返されるのは、
 単一のデータではなく 2 次元配列である。
 
ということで、そもそもその式自体が無効です。
 
・M 列と N 列の各セルに格納されているのは、
 何を表す、どのような値なのか。
 
・d1 と d2 のそれぞれの比較対象となる列は
 どれなのか。
 
まずは以上の点について明記されることをお奨めします。

回答
投稿日時: 19/03/22 13:40:22
投稿者: Suzu

timex timex さんの引用:
指定した期間のみ繰り返し貼り付けをしたい

 
全範囲をコピーし、指定範囲のデータを削除 という 手もありますね。
どちらが良いのか、削除対象のレコード数に依りますね.

回答
投稿日時: 19/03/23 15:04:54
投稿者: WinArrow
投稿者のウェブサイトに移動

質問の仕方について、一言・・・・
 
>うまくいかない
この表現は、意図したような結果が得られないことは、推察できます。
 
しかし、「うまくいかないにのは、2通りの種類があります。
1つ目は、何かしらのエラーがでてコードが実行できない。
または、コードの実行がとまってしまう。
 
2つ目は、コードは実行できたが、意図した結果と違う
 
今回の質問に説明は、
上記の2つの種類のどちらなんでしょうか?
 
説明文だけでは、
それを解析するだけの情報が不足しています。
 
おそらく、1つ目のパターンに近いと思いますが・・・
【指定期間】に書かれている条件文をどこに記述しているか
で、判断が分かれます。
 
 
 
 

回答
投稿日時: 19/03/23 18:31:48
投稿者: simple

こんにちは。
既にご指摘がありますが、蛇足を追加します。
 
If d1 >= Worksheets("sheet2").Range("M" & i & ":" & "N" & i).Value <= d2 Then
の意図するところを、日本語で説明してもらえませんか?
M列とN列はセル結合されているということでしょうかね。
それなら、Range("M" & i ).Valueだけを相手にすればよいです。
 
d = Range("M" & i ).Value
とすると、既に指摘があったように、
If d1 >= d <= d2 Then という書き方はNGですので(意図と違うので)

If d1 >= d And d <= d2 Then
と書く必要があります。
 
以上は完全にこちらの想像ですので、質問者さんからまずは説明をしてください。

回答
投稿日時: 19/03/23 19:02:04
投稿者: simple

よく見ると不等号の向きがおかしいですね。どちらも上から抑える式になっている。

回答
投稿日時: 19/03/24 20:34:19
投稿者: WinArrow
投稿者のウェブサイトに移動

simple さんの引用:

よく見ると不等号の向きがおかしいですね。どちらも上から抑える式になっている。

 
「当該日付が、開始日〜終了日の間にある」という判定文は
 
If 開始日 <= 当該日付 And 当該日付 <= 終了日 Then
 
という構文になるでしょう。
 
質問者さんが、無反応なのは、
見ていないのか
試行錯誤しているのか?

投稿日時: 19/03/26 23:26:26
投稿者: timex timex

皆様
早速のご回答ありがとうございました。
お礼も言わず申し訳ございません。
 
出張で皆様のご回答をじっくりと読めていない状態ですので
職場で改めてじっくりと勉強させていただきます。
 
お忙しいところありがとうございました。

トピックに返信