VBA宏用于评估可变范围的列和行中的单元格,并在新工作表中输出二进制数

时间:2017-08-15 13:27:21

标签: excel vba excel-vba

我目前有以下代码:

Dim TrimThreshold As Integer
Dim Counter As Integer
Dim CurrentColumn As String
Set ws1 = ActiveWorkbook.Sheets("Data HUB")
Set ws2 = ActiveWorkbook.Sheets("sheet2")

TrimThreshold = Sheets("sheet2").Range("B3").Value
Counter = 0
CurrentColumn = "B2"

Sheets("Data HUB").Activate
For Each cell In Range(CurrentColumn, Range(CurrentColumn).End(xlDown))
    If cell.Value >= TrimThreshold Then
        Sheets("sheet2").Range("C3").Offset(Counter, 0).Value = 1
        Counter = Counter + 1
    Else
        Sheets("sheet2").Range("C3").Offset(Counter, 0).Value = 0
        Counter = Counter + 1
    End If
Next cell

此代码成功适用于1列,但无论如何都要评估列和行的可变范围?例如,我的数据可能看起来像附图:

sheet

但是数据工作表之间的列和行可能是可变的(尽管在单个工作表中列和行总是相等的!)

最终输出将是工作表的下一个选项卡中的二进制数(1或0),确定单元格的值是否大于单元格中输入的阈值(sheet2.cell“B3”in this情况)。

谢谢!

1 个答案:

答案 0 :(得分:0)

应该是自我解释:

Option Explicit

Sub Macro1()

  With Sheets("Data HUB")

    Dim inRange As Range
    Set inRange = .Range("B2")
    Set inRange = .Range(inRange.End(xlToRight), inRange.End(xlDown))

    Dim wsOut As Worksheet
    Set wsOut = ActiveWorkbook.Sheets("sheet2")

    Dim TrimThreshold As Long
    TrimThreshold = wsOut.Range("B3").Value

    Dim outRange As Range
    Set outRange = wsOut.Range("C3").Resize(inRange.Rows.Count, inRange.Columns.Count)

    outRange.Value = .Evaluate("(" & inRange.Address & ">=" & TrimThreshold & ")*1")

  End With

End Sub

如果您还有任何疑问,请询问:)