对不起,我首先误解了你的问题。这里是结束了,比我想这是一个比较复杂的工作代码:d
Option Explicit
Private Function inCollection(ByRef myCollection As Collection, ByRef value As Variant) As Boolean
Dim i As Integer
inCollection = False
For i = 1 To myCollection.Count
If (myCollection(i) = value) Then
inCollection = True
Exit Function
End If
Next i
End Function
Sub listMinimums()
Dim source As Range
Dim target As Range
Dim row As Range
Dim i As Integer
Dim datas As New Collection
Dim minRows As New Collection
Set source = Range("A2:C5")
Set target = Range("D2")
target.value = source.value
For Each row In source.Rows
With row.Cells(1, 1)
If (inCollection(datas, .value) = False) Then
datas.Add .value
minRows.Add row.row, .value
End If
If (Me.Cells(minRows(.value), 2) > row.Cells(1, 2)) Then
minRows.Remove (.value)
minRows.Add row.row, .value
End If
End With
Next row
'output'
For i = 1 To minRows.Count
target(i, 1) = Me.Cells(minRows(i), 1)
target(i, 2) = Me.Cells(minRows(i), 2)
target(i, 3) = Me.Cells(minRows(i), 3)
Next i
Set datas = Nothing
Set minRows = Nothing
End Sub
注意:您可能希望与您的工作表的名称,以取代Me
。
这是那些Excel的例子在那里我真的希望将数据扔进访问和运行查询之一。使用'GroupBy'和'Min'函数可以准确找到你要找的东西。像这样:'SELECT Column1,Column2,Min(Column3)As Column3 FROM Table GROUP BY Column1'。当然,为此编写代码是一个很好的练习,但有时使用像Access这样的工具可以对这样的事情非常有帮助。 – 2009-12-09 22:14:50
Access不需要,Excel对ADO非常满意。 – Fionnuala 2009-12-10 19:26:58
这在Access中会很容易 - 但工具是Excel ... ADO示例看起来很有趣。 – 2009-12-10 20:29:58