如何在Excel VBA中复制R子集机制?

时间:2016-09-02 09:15:09

标签: r excel vba excel-vba

首先感谢您阅读我的帖子。

我想问一下如何在中复制R子集机制?

这是我的功能:

Subdeck2 = deck2[(deck2[,3]>=10 & deck2[,4]<=30),]

代码使用创建名为data.frame的{​​{1}}对象,该对象是名为Subdeck2的{​​{1}}对象的子集,其中包含{ {1}}第三列值大于或等于十,第四列值小于或等于三十。

我想在和一个工作表中复制它,该工作表是包含源数据的工作表的子集。我认为中的数组命名对引用行和列非常有帮助。

中,当我不得不重复这样做时,它会让人感到困惑,因为我必须记住我已输入的行号和列号。

我只需要在中做一件特别的事情。我已经买了一本关于编程的书,但它长达1000页,我似乎无法在那里找到单词子集。

关于如何做到这一点或我可以学习如何做到这一点的任何建议将非常感激。谢谢!

1 个答案:

答案 0 :(得分:2)

以下是一个示例 - 尽管您的功能简洁明了。

该方法已被注释 - 但基本上,它会迭代源范围的行并检查每一行的标准。然后它选择输出范围并在输出之前将其大小调整为过滤数据的大小。

Option Explicit

Sub FilterLikeRSubset()

    Dim rngData As Range
    Dim rngRow As Range
    Dim rngFilter As Range
    Dim rngOutput As Range

    'get data
    Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("A1:D5")

    'iterate rows in data
    For Each rngRow In rngData.Rows
        'test row criteria
        If rngRow.Cells(1, 3) >= 10 And rngRow.Cells(1, 4) <= 30 Then
            'success
            If rngFilter Is Nothing Then
                Set rngFilter = rngRow
            Else
                Set rngFilter = Union(rngFilter, rngRow)
            End If
        End If
    Next rngRow

    'set range for output
    Set rngOutput = ThisWorkbook.Worksheets("Sheet1").Range("A10")
    Set rngOutput = rngOutput.Resize(rngFilter.Rows.Count, rngFilter.Columns.Count)

    'output
    rngOutput.Value = rngFilter.Value

End Sub

示例输出:

enter image description here