应用场景 零售商品经常会调整价格,商品条码的唯一的,价格出现几条,取最新价格 知识要点 1:Collection 对象 是项目所组成的有序集合(不存在重复值) 2:Add方法,添加一个成员到Collection对象,object.add item key item为对象表达式指列表中的对象,item指定添加到集合的成员 3:Range.NumberFormatLocal 属性 返回或设置一个Variant值,代表对象的格式代码 4:Range.Sort 方法 对值区域进行排序。 Sub 查找最后一次价格() On Error Resume Next Dim only As New Collection, i As Integer, j As Integer Dim arr, arr2() arr = Range([a1], Cells(Rows.Count, 3).End(xlUp)).Value '将区域转化为数组,从而提速 For i = UBound(arr) To 1 Step -1 '遍历数组所有行,为了保留最后日期的价格,则从后向前循环 '将数组第一列i行的品名添加到collection对象中,如果存在重复,仅取首次出现者 only.Add arr(i, 1), CStr(arr(i, 1)) If err = 0 Then '如果没有错误(表示当前产品名称是第一次写入collection对象) j = j 1 '累加变量,该变量等于产品个数(不含重复值) ReDim Preserve arr2(1 To 3, 1 To j) '重新分配存储空间,(只能修改最末一维的大小) arr(1, j) = only(j) arr2(2, j) = arr(i, 2) arr2(3, j) = arr(i, 3) End If err.Clear '循环每一次自动清除错误(必须的,否则不恩能够取出后面的产品、价格和日期) Next i [e1].Resize(j, 3) = WorksheetFunction.Transpose(arr2) 'arr2转置后写入单元格 [g1].Resize(j, 1).NumberFormatLocal = 'm月d日' '将存放日期的单元格设置为日期格式 [h1].Resize(j, 1) = Evaluate('=row(1:' & j & ')') '创建一个辅助区,利用它将倒序的数据修正 '对产生的数据进行排序,以辅助区为标准倒序排列,可以使原本倒序的按原来的升序显示 [e1].Resize(j, 4).Sort key1:=[h1], order1:=xlDescending, ordercustom:=1, oridntation:=xlTopToBottom, dataoption1:=xlSortNormal [h1].resieze(j, 1).Clear '清除辅助区 End Sub |
|
来自: L罗乐 > 《VBA基础入门教程》