从USEDRANGE方法中排除第一行(我的工作表中的第1行)?

时间:2016-08-25 19:48:13

标签: excel excel-vba vba

我有一些来自我的经纪人的输入数据。 我编写了一些代码来自动计算,添加列和插入一些公式。

最后,我想做一些条件格式化(影响整行)以确定有利可图的事务(绿色字体整行)和丢失的事务(红色字体整行)。

为此,我使用了USEDRANGE方法 - 我知道这是一个棘手的方法,我的数据是一致的 - 没有空行,只有很少的空列,所以我认为USEDRANGE会处理它。我需要使用USEDRANGE,因为下次我将运行此报告时会有更多行。

但我在我的数据中有第一行,我将标题列为4列。

我希望我的标题保持黑色(字体),但我仍然想使用USEDRANGE方法。

enter image description here

如何使用USEDRANGE方法执行条件格式设置,排除第一行(因此它保持黑色字体)。

Option Explicit
Dim RowNumber As Long
Dim LastRow As Long
Dim ColumnNumber As Integer
Dim LastColumn As Integer
Dim VBA As Worksheet
Dim TotalRange As Range

Sub CondicionalFormating_WholeRows()
    Set VBA = Workbooks("lista transakcji Dukascopy od October 2015.xlsm").Worksheets("VBA")
    Set TotalRange = VBA.UsedRange
    LastRow = VBA.Cells(Rows.Count, 1).End(xlUp).Row
    LastColumn = VBA.Cells(1, Columns.Count).End(xlToLeft).Column

TotalRange.FormatConditions.Add Type:=xlExpression, Formula1:="=$H1<0"
TotalRange.FormatConditions(TotalRange.FormatConditions.Count).SetFirstPriority
    With TotalRange.FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Strikethrough = False
        .Color = -16777024
        .TintAndShade = 0
    End With
    TotalRange.FormatConditions(1).StopIfTrue = False

TotalRange.FormatConditions.Add Type:=xlExpression, Formula1:="=$H1>0"
TotalRange.FormatConditions(TotalRange.FormatConditions.Count).SetFirstPriority
    With TotalRange.FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Strikethrough = False
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = -0.499984740745262
    End With
    TotalRange.FormatConditions(1).StopIfTrue = False

    '   VBA.Range(Cells(1, 1), Cells(LastRow, LastColumn)).Select
End Sub

2 个答案:

答案 0 :(得分:12)

Set TotalRange = VBA.UsedRange '<<< your existing line

'Add this line right after
Set TotalRange = TotalRange.Offset(1,0).Resize(TotalRange.Rows.Count-1, _
                                               TotalRange.Columns.Count) 

答案 1 :(得分:3)

使用.offset(1)将整个范围参考向下移动1行。这将在范围的末尾留下一个空行。 .Resize(VBA.UsedRange.Rows.Count - 1)将裁掉最后一行。


Set TotalRange = VBA.UsedRange.Offset(1).Resize(VBA.UsedRange.Rows.Count - 1)