首先感谢您阅读我的帖子。
我想问一下如何在excel-vba中复制R子集机制?
这是我的r功能:
Subdeck2 = deck2[(deck2[,3]>=10 & deck2[,4]<=30),]
代码使用r创建名为data.frame
的{{1}}对象,该对象是名为Subdeck2
的{{1}}对象的子集,其中包含{ {1}}第三列值大于或等于十,第四列值小于或等于三十。
我想在excel-vba和一个工作表中复制它,该工作表是包含源数据的工作表的子集。我认为excel中的数组命名对引用行和列非常有帮助。
在r中,当我不得不重复这样做时,它会让人感到困惑,因为我必须记住我已输入的行号和列号。
我只需要在excel中做一件特别的事情。我已经买了一本关于vba编程的书,但它长达1000页,我似乎无法在那里找到单词子集。
关于如何做到这一点或我可以学习如何做到这一点的任何建议将非常感激。谢谢!
答案 0 :(得分:2)
以下是一个示例 - 尽管您的r功能简洁明了。
该方法已被注释 - 但基本上,它会迭代源范围的行并检查每一行的标准。然后它选择输出范围并在输出之前将其大小调整为过滤数据的大小。
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
示例输出: