此代码以前有效,我更改了一些字符串并且它已经开始出现故障。大约在脚本的一半时,它将开始分配" N / A"大约10行,然后再次分配数字。例如," O" + i返回" 1级"并改为" N / A"如果其他受影响的列发生了变化,并且如果它注册了一个"等级0",它将放置" 1"进一步向下,在大约20个偏移放置实例后,代码返回工作状态。如果我重新输入列O并再次运行它,代码就能正常运行。我很乐意提供任何帮助。
PS,我不是编码员所以我知道它有点乱。Sub Fix_Haz_Rec()
Dim lastRow3 As Integer 'last row of sheet 3
Sheets(3).Activate
lastRow3 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To lastRow3
ActiveSheet.Range("D" & i).Value = Math.Round(ActiveSheet.Range("D" & i).Value, 3)
ActiveSheet.Range("E" & i).Value = Math.Round(ActiveSheet.Range("E" & i).Value, 3)
ActiveSheet.Range("F" & i).Value = Math.Round(ActiveSheet.Range("F" & i).Value, 3)
ActiveSheet.Range("G" & i).Value = Math.Round(ActiveSheet.Range("G" & i).Value, 3)
ActiveSheet.Range("I" & i).Value = Math.Round(ActiveSheet.Range("I" & i).Value, 2)
ActiveSheet.Range("J" & i).Value = Math.Round(ActiveSheet.Range("J" & i).Value, 3)
ActiveSheet.Range("K" & i).Value = Math.Round(ActiveSheet.Range("K" & i).Value, 3)
ActiveSheet.Range("L" & i).Value = Math.Round(ActiveSheet.Range("L" & i).Value, 3)
If ActiveSheet.Range("M" & i).Value = "N/A" Or ActiveSheet.Range("M" & i).Value = "#N/A" Then
Else
If ActiveSheet.Range("O" & i) = "Level 4" Then
ActiveSheet.Range("O" & i) = 4
Else
If ActiveSheet.Range("O" & i) = "Level 3" Then
ActiveSheet.Range("O" & i) = 3
Else
If ActiveSheet.Range("O" & i) = "Level 2" Then
ActiveSheet.Range("O" & i) = 2
Else
If ActiveSheet.Range("O" & i) = "Level 1" Then
ActiveSheet.Range("O" & i) = 1
Else
If ActiveSheet.Range("O" & i) = "Level 0" Then
ActiveSheet.Range("L" & i) = ActiveSheet.Range("N" & i).Value / 12
ActiveSheet.Range("O" & i) = "N/A"
Else
If ActiveSheet.Range("O" & i) = ">Max." Then
ActiveSheet.Range("O" & i) = "> Max"
End If
End If
End If
End If
End If
End If
Next i
Sheets("Recommended").Activate
ActiveSheet.Range("A4:P" & lastRow3).Select
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlYes
ActiveSheet.Range("D4:M" & lastRow3).Select
Selection.NumberFormat = "0.00"
End Sub
答案 0 :(得分:0)
给它一个去 - 它应该有很长的路要走,帮助你实现你所追求的目标。
首先对值替换进行排序,然后进行清理 - 即继续尝试查找" 0级"并执行L / N操作,直到您无法再找到该值。
With ActiveSheet.Range("O4:O" & lastRow3)
.Replace "Level 4", 4, xlWhole
.Replace "Level 3", 3, xlWhole
.Replace "Level 2", 2, xlWhole
.Replace "Level 1", 1, xlWhole
.Replace ">Max.", "> Max", xlWhole
Set rngLevel0 = .Find(What:="Level 0", LookAt:=xlWhole)
Do While Not rngLevel0 Is Nothing
ActiveSheet.Range("L" & rngLevel0.Row) = ActiveSheet.Range("N" & rngLevel0.Row).Value / 12
rngLevel0.Value = "N/A"
Set rngLevel0 = .Find(What:="Level 0", LookAt:=xlWhole)
Loop
End With