select案例循环

我基于我在这里find的另一个问题build模Select Case循环(链接: Excel VBA Select Case Loop Sub )。

为了使它适用,我必须做的改变非常小,而且我也没有看到我出错的地方。 这是我的代码:

Private Function getColor(ByVal MatVal As Range) As Integer Select Case MatVal Case 0 To 1 getColor = 9: Exit Function Case 1.01 To 3 getColor = 46: Exit Function Case 3.01 To 5 getColor = 27: Exit Function Case 5.01 To 10 getColor = 4: Exit Function Case 10.01 To 20 getColor = 5: Exit Function Case 20.01 To 30 getColor = 11: Exit Function Case 30 To 100 getColor = 29: Exit Function End Select End Function 

这是通过调用:

 Set LipR = Workbooks("LMacro.xlsm") Set SecX = Application.Workbooks.Open(Path & "SecX.csv") Set Xws = SecX.Sheets("SecX") Set Lws = LipR.Sheets("Funds") With Lws For i = 2 To 10 'LwsRows If Lws.Range("A" & i).Value <> "" Then LipR.Sheets.Add(After:=LipR.Sheets(LipR.Sheets.Count)).Name = Lws.Range("A" & i).Value NewFund = Lws.Range("A" & i).Value Set Fsheet = LipR.Sheets(NewFund) End If With Fsheet FsheetRows = .Range("A" & .Rows.Count).End(xlUp).Row End With .... Set MatPhase = Fsheet.Range("O4:O" & FsheetRows) For Each MatVal In MatPhase.Cells MatVal.Interior.ColorIndex = getColor(MatVal) Next MatVal Fsheet.Cells.EntireColumn.AutoFit Application.Goto _ Reference:=Fsheet.Range("A1"), Scroll:=True Next i End With 

我在这里错过了什么? 我真的试图避免这个if / elseif。

谢谢

我的猜测是你在调用函数的子程序中出错了。 下面的工作不需要对你的函数做任何修改,只要你的循环范围在0到100之间。

在我的例子中,我使用Sheet2并将FsheetRows设置为20.我在列P中包含了O列中值的副本的屏幕截图,以防单元格颜色难以看清。 根据需要进行修改以使用工作簿中的对象。

 Sub ColorMyCells() Dim Fsheet As Worksheet Dim FsheetRows As Long Set Fsheet = ThisWorkbook.Sheets("Sheet2") FsheetRows = 20 Dim MatVal As Range, MatPhase As Range Set MatPhase = Fsheet.Range("O4:O" & FsheetRows) For Each MatVal In MatPhase.Cells MatVal.Interior.ColorIndex = getColor(MatVal) Next MatVal End Sub 

运行后,范围现在看起来像下面的屏幕截图中的列O:

用select语句设置单元格颜色

我猜你的MatVal是一个单元/范围

 Private Function getColor(ByVal MatVal As Range) As Integer Select Case MatVal.Value Case 0 To 1: getColor = 9 Case 1.01 To 3: getColor = 46 Case 3.01 To 5: getColor = 27 Case 5.01 To 10: getColor = 4 Case 10.01 To 20: getColor = 5 Case 20.01 To 30: getColor = 11 Case 30 To 100: getColor = 29 End Select End Function