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:
我猜你的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