1

複数のステーションごとに 31 日間のデータを記録した毎日のデータを使用していますが、うるう年を削除するには VBA コードが必要です。記録されたデータの日付のリストと、削除したい閏年ではない年のリストがあります。余分な 30 日と 31 日を削除するために、次の基本的なコードを使用しました。

Dim lastrow, i As Long

lastrow = ActiveSheet.Cells(65536, 1).End(xlUp).Row

For i = 1 To lastrow
    'delete 31st days for February
    If ActiveSheet.Range("D" & i) = 2 And ActiveSheet.Range("E" & i) = 31 Then
        Rows(i).Select
        Selection.Delete shift:=xlUp
    End If
Next i

非常にシンプルでうまく機能するので、データ内に存在しない日付 (つまり、02/29/non-leapyear) を見つけて行を削除する場合に、同様のことができることを望んでいましたが、非常に困難であることが判明しました範囲内の値を一致させることは困難です。私はこのようなものに沿って考えていました:

Dim lastrow, i As Long, leapyear as Workbook

Set leapyear = Workbooks("LeapYears.xlsx")

lastrow = ActiveSheet.Cells(65536, 1).End(xlUp).Row

For i = 1 To lastrow
    'obviously this is where I have the problem trying to match a cell to a range
    If ActiveSheet.Range("D" & i) = leapyear.Sheets(1)range("C2:C90") Then
        Rows(i).Select
        Selection.Delete shift:=xlUp
    End If
Next i

これを処理するためのヘルプまたは別の方法は大歓迎です!

4

1 に答える 1

0

この質問からの私の回答の修正版

Sub Sample()

Dim StartingScreenUpdateValue As Boolean
Dim StartingEventsValue As Boolean
Dim StartingCalculations As XlCalculation

With Application
    StartingScreenUpdateValue = .ScreenUpdating
    StartingEventsValue = .EnableEvents
    StartingCalculations = .Calculation
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
End With


Dim varTestValues As Variant

varTestValues = Workbooks("LeapYears.xlsx").Sheets(1).Range("C2:C90")

Rows(1).Insert
[A1].FormulaR1C1 = "TempHeader1"
[A1].AutoFill Destination:=Range("A1:H1"), Type:=xlFillDefault

Range("D1").AutoFilter Field:=4, Criteria1:=Application.Transpose(varTestValues), Operator:=xlFilterValues

Range("D2", Range("D" & Rows.Count).End(xlUp)) _
    .SpecialCells(xlCellTypeVisible).EntireRow.Delete

ActiveSheet.AutoFilterMode = False
Rows(1).Delete


With Application
    .ScreenUpdating = StartingScreenUpdateValue
    .EnableEvents = StartingEventsValue
    .Calculation = StartingCalculations
End With

End Sub

注:このコードは、アドバイスがない場合、データにヘッダーがあると仮定して実行されます。

覚えておいてください 100% 動作することを確認するまでは、実際のデータではなく、常にデータのコピーに対してコードを実行してください。

于 2013-10-07T20:56:06.177 に答える