1

単純な作業のように聞こえますが、さまざまなアプローチを試みてきましたが、まだ成功していません。

  1. 多くの変数を含む大きなデータ セットがあり、そのうちの 2 つが役に立ちます。1 つ目は「シンボル」(aaa、bbb、ccc など) と呼ばれ、2 つ目は「日付」(例: 2012-05-15 20:00) です。1 つのシンボルが複数の日付に対応します。

  2. 特定の日付 (例: bbb、2012-05-15) のシンボルを削除したかったのですが、削除するシンボルのリストがあります。

  3. データセットの日付とforループの削除日付を比較し、特定のシンボルで互いに等しい場合は行全体を削除しようとしていましたが、そこに問題があります。

  4. コードは以下のとおりです。

    Dim d1 As Date
    d1 = DateSerial(2012, 5, 15) 'This is the deleting date  
    MsgBox (IsDate(d1)) 'This returns true   
    MsgBox (IsDate(DateValue(Cells(4, 9)))) 'This returns true
    
    For j = lastRow To 2 Step -1  
       If Cells(j,2).Value = "bbb" And (CDate(d1) = DateValue(Cells(j, 9))) Then Rows(j).EntireRow.Delete  
    Next
    
  5. VBA で「型の不一致」エラーが発生しました。If d1 = DateValue(Cells(j,9)) Then Rows(j).EntireRow.Delete も試しましたが、これもうまくいきませんでした。エラーが発生した場合、スクリーンショットのセルに値が表示されます。

    エラーが発生すると、スクリーンショットの値がセルに表示されます

4

2 に答える 2

2

DateValue に変換できない空のセルが表示されているようです。

イミディエイト ウィンドウで、次の操作を試してください。

?DateValue("")同じエラーが発生します。

ロジックを少し拡張する必要があります。

For j = lastRow To 2 Step -1  
   If Cells(j,2).Value = "bbb" And Not Cells(j,9) = vbNullString And IsDate(Cells(j,9) Then
      If (CDate(d1) = DateValue(Cells(j, 9))) Then Rows(j).EntireRow.Delete  
   End If
Next
于 2013-10-09T20:40:36.513 に答える