2016-03-07 52 views
0

下面我列出了“ID”数字及其关联的“数字”及其“数值”。我试图创建一个子函数来创建一个动态数组,它收集所有具有等于和小于30的“数值”的“值”。填充数组后,将其合并并置于标题为“30或更少”。我一直在尝试使用VBA做这件事,但没有运气。我已经阅读了一堆帖子和文件,告诉我如何做到这一点,但我无法理解它。有人能告诉我如何完成这件事。它使我疯狂,我相信它简单,我最终希望扩大这个范围,以便对“数字”进行相同的处理,这些数字大于30但小于60,等等。谢谢如何创建动态数组循环访问列表并根据条件对数值进行汇总

ID Number Value 
    0 60  100 
    1 31  101 
    2 12  102 
    3 30  103 
    4 21  104 
    5 60  105 
    30 or less 
+3

这可以使用SUMIF()或SUMIFS()的公式来完成。是否有VBA的理由? –

+0

请发布您迄今为止编写的VBA代码。如果您还没有任何VBA代码,那么您可能需要查看以下解释VBA编程和数组[适用于初学者](http://www.homeandlearn.org/index.html)的网站:http: //www.homeandlearn.org/excel_vba_and_arrays.html – Ralph

+0

@ScottCraner我在VBA srcip中需要这个,因为我不知道我要搜索数字<30条件的区域有多大。我希望excel告诉用户每个ID在这个数字<30条件下的总值是多少。这个例子很简单,因为我正在用它来练习一个更大的问题。我将pst的代码是迄今为止我写的实际宏。循环是我尝试让循环做某事的失败尝试。我试图做一些简单而失败的事情。请帮助 –

回答

0

尝试粘贴到VB中的新模块。

这假定你的原始数据是Sheet(1)和排序的数据将在一个新的空白工作表Sheet(2)

Sub AddNumbers() 
Dim RowNo, ColNo As Long 

'Skip Header Row 
RowNo = 2 

    Do Until Sheets(1).Cells(RowNo, 1) = "" 

     If Sheets(1).Cells(RowNo, 2) <= 30 Then 
     Sheets(2).Cells(1, 1) = "30 or less" 
     ColNo = 1 
     Sheets(2).Cells((Sheets(2).Cells(Rows.Count, 1).End(xlUp).row + 1), ColNo) = Sheets(1).Cells(RowNo, 3) 

     ElseIf Sheets(1).Cells(RowNo, 2) > 30 And Sheets(1).Cells(RowNo, 2) <= 60 Then 
     Sheets(2).Cells(1, 2) = "Between 30 and 60" 
     ColNo = 2 
     Sheets(2).Cells((Sheets(2).Cells(Rows.Count, 2).End(xlUp).row + 1), ColNo) = Sheets(1).Cells(RowNo, 3) 

     ElseIf Sheets(1).Cells(RowNo, 2) > 60 And Sheets(1).Cells(RowNo, 2) <= 90 Then 
     Sheets(2).Cells(1, 3) = "Between 60 and 90" 
     ColNo = 3 
     Sheets(2).Cells((Sheets(2).Cells(Rows.Count, 3).End(xlUp).row + 1), ColNo) = Sheets(1).Cells(RowNo, 3) 

     End If 

     RowNo = RowNo + 1 

    Loop 

    ' Add Subtotals 

    ColNo = 1 
    Do Until Sheets(2).Cells(1, ColNo) = "" 
    Sheets(2).Cells((Sheets(2).Cells(Rows.Count, ColNo).End(xlUp).row + 1), ColNo).Formula = "=SUM(" & Col_Letter(ColNo) & "2:" & Col_Letter(ColNo) & (Sheets(2).Cells(Rows.Count, ColNo).End(xlUp).row) & ")" 
    Sheets(2).Cells((Sheets(2).Cells(Rows.Count, ColNo).End(xlUp).row), ColNo).Font.Bold = True 
    ColNo = ColNo + 1 
    Loop 

End Sub 

Function Col_Letter(lngCol As Long) As String 
Dim vArr 
vArr = Split(Cells(1, lngCol).Address(True, False), "$") 
Col_Letter = vArr(0) 
End Function