将公式转换为vba

将公式转换为vba,vba,excel,Vba,Excel,我有一张评估表。在表中,我必须查找三列S、T和U 如果列S包含无效,并且列T和U都已填充,那么我需要过滤整行 为此,我尝试了以下代码。代码对我来说很好用。但对我的其他同事来说,过滤器并不能根据情况工作 Z列被视为辅助列,根据条件标记为true或false。如果T列和U列都已填充且S无效,则它将标记为false,其余列标记为true 我在所有模块上都使用了OptionExplicit 有人能建议我如何克服这个问题吗?有人能帮我编码吗,不用公式 Sub fc() Dim totalrows As L

我有一张评估表。在表中,我必须查找三列S、T和U

如果列S包含无效,并且列T和U都已填充,那么我需要过滤整行

为此,我尝试了以下代码。代码对我来说很好用。但对我的其他同事来说,过滤器并不能根据情况工作

Z列被视为辅助列,根据条件标记为true或false。如果T列和U列都已填充且S无效,则它将标记为false,其余列标记为true

我在所有模块上都使用了OptionExplicit

有人能建议我如何克服这个问题吗?有人能帮我编码吗,不用公式

Sub fc()
Dim totalrows As Long
Dim sformula

totalrows = Range("A5").End(xlDown).Row
  With Sheets("Evaluation").Range("Z5:Z" & totalrows)
  ' if the S5 is not equal to invalid and any one of the column T and U are filled, then activate autofilter
    sformula = "=AND(S5<>""Invalid"",OR(ISBLANK(T5),ISBLANK(U5)))"
     .Formula = sformula
    .AutoFilter 26, True
    .Value = .Value
  End With
End Sub
Sub-fc()
所有行的长度相同
模糊公式
totalrows=范围(“A5”)。结束(xlDown)。行
带图纸(“评估”)。范围(“Z5:Z”和总计行)
'如果S5不等于无效,且T列和U列中的任何一列已填充,则激活自动过滤器
sformula=“=和(S5”“无效”“或(ISBLANK(T5)、ISBLANK(U5)))
.公式=s公式
.AutoFilter 26,正确
.Value=.Value
以
端接头

我刚刚试过,根据我在那里的经验,以下几点应该可以:

Sub fc()
Dim totalrows As Long, sformula AS String
sformula = "=AND(S5<>""Invalid"",OR(ISBLANK(T5),ISBLANK(U5)))"

totalrows = Range("A5").End(xlDown).Row
  With Sheets("Evaluation").Range("Z5:Z" & totalrows)
    .Formula = sformula
    .AutoFilter 1, True ' take the first column of the current range
  End With
End Sub
Sub-fc()
Dim totalrows等长,sformula等长字符串
sformula=“=和(S5”“无效”“或(ISBLANK(T5)、ISBLANK(U5)))
totalrows=范围(“A5”)。结束(xlDown)。行
带图纸(“评估”)。范围(“Z5:Z”和总计行)
.公式=s公式
.AutoFilter 1,True'取当前范围的第一列
以
端接头
在您的版本中,您使用了
.AutoFilter 26,True
,如果您将其应用于范围
[a1:z]
,则该选项将有效,但由于您正在范围
[z1:z]
中工作,因此您的范围中只有一列


我也不知道你想用
.value=.value
实现什么。就我所见,这只会用当前值I替换当前值。E不要做任何有用的事情,还是我遗漏了什么?

我只是尝试了一下,根据我在那里的经验,以下几点应该有用:

Sub fc()
Dim totalrows As Long, sformula AS String
sformula = "=AND(S5<>""Invalid"",OR(ISBLANK(T5),ISBLANK(U5)))"

totalrows = Range("A5").End(xlDown).Row
  With Sheets("Evaluation").Range("Z5:Z" & totalrows)
    .Formula = sformula
    .AutoFilter 1, True ' take the first column of the current range
  End With
End Sub
Sub fc()
Dim totalrows As Long, sformula As String

totalrows = Range("A5").End(xlDown).Row
sformula = "=AND(S5<>""Invalid"",OR(ISBLANK(T5),ISBLANK(U5)))"

Application.ScreenUpdating = False

With Sheets("Evaluation").Range("Z5:Z" & totalrows)
     .Formula = sformula
     .Calculate
     DoEvents
     .Value = .Value
    .AutoFilter 26, True
End With

Application.ScreenUpdating = True

End Sub
Sub-fc()
Dim totalrows等长,sformula等长字符串
sformula=“=和(S5”“无效”“或(ISBLANK(T5)、ISBLANK(U5)))
totalrows=范围(“A5”)。结束(xlDown)。行
带图纸(“评估”)。范围(“Z5:Z”和总计行)
.公式=s公式
.AutoFilter 1,True'取当前范围的第一列
以
端接头
在您的版本中,您使用了
.AutoFilter 26,True
,如果您将其应用于范围
[a1:z]
,则该选项将有效,但由于您正在范围
[z1:z]
中工作,因此您的范围中只有一列

我也不知道你想用
.value=.value
实现什么。就我所见,这只会用当前值I替换当前值。E不做任何有用的事情,还是我遗漏了什么?

Sub fc()
Sub fc()
Dim totalrows As Long, sformula As String

totalrows = Range("A5").End(xlDown).Row
sformula = "=AND(S5<>""Invalid"",OR(ISBLANK(T5),ISBLANK(U5)))"

Application.ScreenUpdating = False

With Sheets("Evaluation").Range("Z5:Z" & totalrows)
     .Formula = sformula
     .Calculate
     DoEvents
     .Value = .Value
    .AutoFilter 26, True
End With

Application.ScreenUpdating = True

End Sub
Dim totalrows等长,sformula等长字符串 totalrows=范围(“A5”)。结束(xlDown)。行 sformula=“=和(S5”“无效”“或(ISBLANK(T5)、ISBLANK(U5))) Application.ScreenUpdating=False 带图纸(“评估”)。范围(“Z5:Z”和总计行) .公式=s公式 .算计 多芬特 .Value=.Value .AutoFilter 26,正确 以 Application.ScreenUpdating=True 端接头
Sub-fc()
Dim totalrows等长,sformula等长字符串
totalrows=范围(“A5”)。结束(xlDown)。行
sformula=“=和(S5”“无效”“或(ISBLANK(T5)、ISBLANK(U5)))
Application.ScreenUpdating=False
带图纸(“评估”)。范围(“Z5:Z”和总计行)
.公式=s公式
.算计
多芬特
.Value=.Value
.AutoFilter 26,正确
以
Application.ScreenUpdating=True
端接头

只需将.Value=.Value移到自动筛选上方并检查。@Sixthsense还有其他方法吗?我试着使用它,只需将.Value=.Value移到自动筛选上面并检查一下。@Sixthsense还有其他方法吗?我试过和它合作,我会尝试一下,然后给你回复。您能告诉我这一更改背后的原因吗?如果在第1列的范围内应用自动过滤器,将会很有帮助,所有内容都已过滤,好吧,不是在我的示例中:
1
是以相对方式解释的,请查看第
z
列。至少在我的Excel表格中。当我尝试使用大于1的数字时,我得到
运行tim错误1004:Range类的自动筛选方法失败
。因此,我只能使用
.AutoFilter 1,True
。我将尝试此方法并返回给您。您能告诉我这一更改背后的原因吗?如果在第1列的范围内应用自动过滤器,将会很有帮助,所有内容都已过滤,好吧,不是在我的示例中:
1
是以相对方式解释的,请查看第
z
列。至少在我的Excel表格中。当我尝试使用大于1的数字时,我得到
运行tim错误1004:Range类的自动筛选方法失败
。所以我只能使用
.AutoFilter 1,真的
。我不明白,你的代码在我的机器上运行完全正常。但我朋友的笔记本电脑无法使用。我们都使用相同的2013版EXcel。原因可能是什么?我不明白,你的代码在我的机器上运行得很好。但我朋友的笔记本电脑无法使用。我们都使用相同的2013版EXcel。原因可能是什么?你能帮我解决这个问题吗