• 締切済み

VBAでの日付について

A列(すべて)2005/5/1以降に契約した人にはB列に○を入れるVBAがうまくいきません。よろしくお願いいたします

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

#4です。 先ほどの回答だと、○がつかないセルには "" (長さが0の文字列)が代入されてしまいますね。"" は見た目は空白と同じなのですが、完全な空白ではありませんので以下のように変えます。 Sub test02() With Range("B:B") .FormulaR1C1 = "=IF(RC[-1]>=DATEVALUE(""2008/5/1""),""○"")" .Copy .PasteSpecial Paste:=xlValues Application.CutCopyMode = False .SpecialCells(xlCellTypeConstants, xlLogical).ClearContents End With End Sub

1961hit
質問者

お礼

回答ありがとうございます。 始めたばかりですが、ほんとに難しいです。 基本からしっかり勉強しないといけませんね。。 さっそく試してみます。 ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

> A列(すべて) ほんとうにA列すべてにデータが入っているならループでまわすなんてしたらかなり時間がかかってしまいます。 場合によってはフリーズしてしまうかも。 こんな手はどうでしょう? Sub test01() With Range("B:B") .FormulaR1C1 = "=IF(RC[-1]>=DATEVALUE(""2008/5/1""),""○"","""")" .Copy .PasteSpecial Paste:=xlValues End With Application.CutCopyMode = False End Sub これなら多分、瞬時に終わると思います。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

もう少しVBAの基本的なところを勉強してみてください 補足を元にすると Sub hizuke() Dim rng As Range For Each rng In Range("a:a") If rng.Value >= #5/1/2008# Then rng.Offset(0, 1).Value = "○" End If Next End Sub こんな感じですかね 初心者的には、こちらの方が分かりやすいかも Sub hizuke_2() Dim i As Long For i = 1 To Range("a65536").End(xlUp).Row If Cells(i, 1).Value >= #5/1/2008# Then Cells(i, 2).Value = "○" End If Next End Sub 因みに日付は#5/1/2008#のように##で挟むのがルールです

1961hit
質問者

お礼

回答ありがとうございます。 #で囲むことをすっかり忘れていました。 確かにかなりの勉強不足です。。。 基本からみっちり頑張らねば! ありがとうございました。

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.2

セル一つ一つをループで回し 1つのセルのvalueを比較するという形にしないといけません。 どうしてもVBAでやるなら。 この場合には関数で記述した方が簡単だとは思いますが。

1961hit
質問者

お礼

ありがとうございます。 確かに関数のほうがかんたんなのですが、今VBAの勉強中なので …。また、よろしくお願いします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

うまくいかないコードを提示してみては。

1961hit
質問者

補足

ありがとうございます 下のやり方をしたのですが、どこを直せばいいでしょうか? Sub hizuke() If Range("a:a").Value >= 2005 / 5 / 1 Then Range("b:b").Value = "○" End If End Sub

関連するQ&A

専門家に質問してみよう