排序和删除行。运行时错误"13":类型不匹配



我尝试使用应该

的宏
  1. 排序H列的p值
  2. 删除p值为>=0.05
  3. 的行
  4. 用"B - E"填满第一列,我指的是I2=B2-E2;I3=B3-E3
  5. 按第一列排序

这个宏是由jeep创建的:

Sub sort1()
Dim m As Variant
With ActiveSheet
'delete rows 1:6
.Range("1:6").EntireRow.Delete Shift:=xlUp
'new column header for column I
Range("I1") = "diff"
'sort A:I on column H (ascending)
With .Range("A:I")
.Sort Key1:=.Columns(8), Order1:=xlAscending, Header:=xlYes
End With
'find >=0.05
m = Application.Match(0.05, .Range("H:H"), 0)
If IsError(m) Then m = Application.Match(0.05, .Range("H:H"))
'delete rows (>=0.05):<bottom of worksheet>
.Range(.Cells(m, "A"), .Cells(.rows.Count, "A")).EntireRow.Delete Shift:=xlUp
'new formula for column I data range
.Range("I2:I" & m - 1).FormulaR1C1 = "=RC[-7]-RC[-4]"
'calculate (actually unnecessary, putting in new formulas forces true calculation)
.Calculate
'sort A:I on column I (ascending)
With .Range("A:I")
.Sort Key1:=.Columns(9), Order1:=xlAscending, Header:=xlYes  
End With
End With
End Sub

它之前工作,但现在它停止在字符串

.Range(.Cells(m, "A"), .Cells(.rows.Count, "A")).EntireRow.Delete Shift:=xlUp

运行时错误'13':类型不匹配

请帮忙!

如果不知道该子程序正在处理的数据,就很难猜测为什么会出现该错误。然而,我打赌Application.Match函数在H列中找不到小于或等于0.05的任何值,因此m = #N/A和您不能将#N/A传递给.Cells()属性。

如果是这种情况(您可以检查它是否在错误出现后的直接窗口中),请尝试仅在MATCH成功时删除行并排序:

Sub sort1()
'begin your code here
'find >=0.05
m = Application.Match(0.05, .Range("H:H"), 0)
If IsError(m) Then m = Application.Match(0.05, .Range("H:H"))
If Not IsError(m) Then
'delete rows (>=0.05):<bottom of worksheet>
.Range(.Cells(m, "A"), .Cells(.rows.Count, "A")).EntireRow.Delete Shift:=xlUp
'new formula for column I data range
.Range("I2:I" & m - 1).FormulaR1C1 = "=RC[-7]-RC[-4]"
'calculate (actually unnecessary, putting in new formulas forces true calculation)
.Calculate
End If
'sort A:I on column I (ascending)
With .Range("A:I")
.Sort Key1:=.Columns(9), Order1:=xlAscending, Header:=xlYes
End With
'Continue your code here
End Sub

p。年代,你的代码目前并没有完全按照你所说的去做:

您想要删除所有大于或等于0.05的行,但是如果您没有一个完全等于0.05的值,并且在H列中有像:(0, ..., 0.048, 0.049, 0.051, 0.052, ...)这样的值,那么这行代码:

If IsError(m) Then m = Application.Match(0.05, .Range("H:H"))

将找到小于或等于0.05的最大值,即我们假设数据中的0.049
那么这行代码:

.Range(.Cells(m, "A"), .Cells(.rows.Count, "A")).EntireRow.Delete Shift:=xlUp

将删除从0.049到末尾的值(包括0.049)的行。

你的代码比你想要的多删除了一个额外的值,但是因为你说它以前是按你想要的工作的,所以我没有改变它。

如果您想纠正这种行为,您需要在第二次使用MATCH时为m添加一个:

If IsError(m) Then m = Application.Match(0.05, .Range("H:H")) + 1

相关内容

  • 没有找到相关文章

最新更新