遍历excel列

时间:2018-08-02 17:52:07

标签: excel vba excel-vba

我有NFL统计信息,我在其中登录表格以创建条件格式的热图。

我的数据从E列开始,到P列结束,但是我需要它从a2开始并转到该列的最后一行,然后对每一列都执行相同操作,因此条件不会重叠,并且创建一个大的热图。我只希望每个单独的列都有一个热图,以便我可以进行这种分析。 (并非所有的列都包含数字,并且它们已经扩散,所以有条件的格式无论如何都不应选择文本列)

如何在不显式引用它们的情况下循环这些列?我在一个职位上的状态不会包含与另一职位相同的列数。

我需要使它尽可能动态。另外,有人可以帮助我清理条件格式片段吗?我只是复制了宏记录的代码,因为我自己不知道如何编译它。

我在想这样的事情:

Dim Overall_Stats As Workbook
Dim RB_stats As Worksheet
Set RB_stats = Overall_Stats.Sheets(RB)

LastRow = Range("A" & Rows.Count).End(xlUp).Row

with RB_stats
     .Range("A2:A" & LastRow)
     .FormatConditions.AddColorScale ColorScaleType:=3
     .FormatConditions(.FormatConditions.Count).SetFirstPriority
     .FormatConditions(1).ColorScaleCriteria(1).Type = _
      xlConditionValueLowestValue

With .FormatConditions(1).ColorScaleCriteria     (1).FormatColor
    .Color = 8109667
    .TintAndShade = 0
End With
.FormatConditions(1).ColorScaleCriteria(2).Type = _
    xlConditionValuePercentile
.FormatConditions(1).ColorScaleCriteria(2).Value = 50
With .FormatConditions(1).ColorScaleCriteria(2).FormatColor
    .Color = 8711167
    .TintAndShade = 0
End With
.FormatConditions(1).ColorScaleCriteria(3).Type = _
    xlConditionValueHighestValue
With .FormatConditions(1).ColorScaleCriteria(3).FormatColor
    .Color = 7039480
    .TintAndShade = 0
End With

End With

For i = 1 to 100
    Columns(i).Select
next I

1 个答案:

答案 0 :(得分:1)

我不能为您提供条件格式设置,但是您可以通过逐步运行代码并检查每个步骤的效果来轻松地(尽管不是很快)对其进行配置。

要在动态变化的工作表中查找有趣的列,需要做三件事。

  1. 找到最右边的列

    Dim lastcol as long
    lastcol=RB_stats.usedrange.columns.count
    

注意:此方法简单且可靠性不高,但在最后一列数据不正确的情况下可以使用。准确找到最右边的列是另一门科学,请参见here

  1. 确定一列是否包含数字:假设第二行包含数据,则可以测试单元格中的值是否为类型:

    If Typename(Cells(2, col))="Double" Then 
     ... this is a column of numbers, do formatting
    

Typename为数字返回Double,其他值为StringDateEmpty

  1. 在所选列上应用格式

    For col=1 to lastcol
         If Typename(Cells(2, col))="Double" Then 
               ' this is a column of numbers, select range for formatting
             LastRow = Cells(Rows.Count, col).End(xlUp).Row
             with RB_stats.Range(Cells(2, col), Cells(LastRow, Col)
               ... do formatting here
             end with
         End If
    Next