0

sub financials

dim g as long
dim r as long
dim y as long
dim oh as range
dim vr as range
dim sum as long
set vr = Sheets("Financials").Range("B5:B53")
set oh = sheets("Financials").Range("B2")

y = application.worksheetfunction.countif(vr, "y")
g = application.worksheetfunction.countif(vr, "g")
r = application.worksheetfunction.countif(vr, "r")

if g = 5 then
oh = "G"
elseif g = 4 and y = 1 then
oh = "G"
elseif r>=2 then
oh = "R"
elseif y >= 1 and r>= 1 then
oh = "R"
elseif y >=3  then
oh = "R"
elseif g=3 and y=2 then
oh = "Y"
elseif g=4 and r=1 then
oh = "Y"
elseif g=2 and y=3 then
oh = "Y"
elseif y=2 then
oh = "Y"
end if
end sub

这是我到目前为止所写的,它工作正常,但正如你所见,有 5 个单元格决定了整个单元格。但我意识到有时少于 5 个单元格 - 有时只有 2 个或 3 个。如果少于 5 个,则此公式不适用,因为它需要 5 个单元格来确定整个单元格。

我正在考虑使用 sum 函数。所以总结 y, g, r 的计数,如果该总和等于 1,2,3 那么它将执行以下命令,但我不知道该怎么做

如果 y,g,r 之和 = 3,则执行以下操作:

if g = 3 then
oh = "G"
elseif g = 1 and y = 2 then
oh =  "Y"
elseif g = 2 and r = 1 then
oh = "Y"
elseif g =1 and y = 1 and r =1 then
oh = "R"
elseif y = 2 and r = 1 then
oh = "R"
elseif r = 3 then
oh = "R" 

如果 y,g,r 之和 = 2,则执行以下操作:

if g = 2 then
oh ="G"
elseif g = 1 and y = 1 then 
oh = "y"
elseif y = 1 and r =1 then
oh = "R"

等等

我也需要锁定工作表,但宏必须继续运行。我怎么做?

4

1 回答 1

2

在获得单元格的总和后,您可以使用选择案例。对于这个例子,我会使用 select case,因为它比使用 ifs 和 else ifs 对我来说更简洁一些,但这是个人喜好。有关选择案例的更多示例,请在此处查看

锁定工作表需要一行:

sheets("worksheetname").protect userinterfaceonly:=True

有关工作表锁定的更多信息,请查看此链接

Sub financials()

Dim g As Long
Dim r As Long
Dim y As Long
Dim oh As Range
Dim vr As Range
Dim sum As Long
Dim i
Set vr = Sheets("Financials").Range("B5:B53")
Set oh = Sheets("Financials").Range("B2")

y = Application.WorksheetFunction.CountIf(vr, "y")
g = Application.WorksheetFunction.CountIf(vr, "g")
r = Application.WorksheetFunction.CountIf(vr, "r")

x = y + g + r

Select Case x
    Case Is = 5
        If g = 5 Then
        oh = "G"
        ElseIf g = 4 And y = 1 Then
        oh = "G"
        ElseIf r >= 2 Then
        oh = "R"
        ElseIf y >= 1 And r >= 1 Then
        oh = "R"
        ElseIf y >= 3 Then
        oh = "R"
        ElseIf g = 3 And y = 2 Then
        oh = "Y"
        ElseIf g = 4 And r = 1 Then
        oh = "Y"
        ElseIf g = 2 And y = 3 Then
        oh = "Y"
        ElseIf y = 2 Then
        oh = "Y"
        End If

    Case Is = 3
        If g = 3 Then
        oh = "G"
        ElseIf g = 1 And y = 2 Then
        oh = "Y"
        ElseIf g = 2 And r = 1 Then
        oh = "Y"
        ElseIf g = 1 And y = 1 And r = 1 Then
        oh = "R"
        ElseIf y = 2 And r = 1 Then
        oh = "R"
        ElseIf r = 3 Then
        oh = "R"
        End If

    Case Is = 2
        If g = 2 Then
        oh = "G"
        ElseIf g = 1 And y = 1 Then
        oh = "y"
        ElseIf y = 1 And r = 1 Then
        oh = "R"
        End If

    'more cases here

    End Select


End Sub
于 2012-11-21T14:40:39.463 回答