【发布时间】:2016-08-10 19:57:22
【问题描述】:
我想创建一个 Excel 宏来执行以下操作: 在 A 列中取任意长度的数字列表 将唯一值复制到 D 列 使用 COUNTIF 公式填充 E 列,该公式将显示每个唯一数字出现的次数(因此它将具有 D 中的唯一数字,以及它在 E 中出现的次数) 根据列 E' 将列 D 和 E 的值从高到低排序 价值观
我知道如何使用 Excel GUI 执行这些步骤,但我想编写一个 VBA 宏来完成这些步骤。到目前为止,对我来说最困难的部分是让 COUNTIF 公式解决任意长度范围。关于如何实现这一点的任何想法?
编辑: 这是我最新录制的代码:
Range("A1:A1000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"D1:D2000"), Unique:=True
Range("E2").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(R2C1:R1000C1,RC[-1])"
Selection.AutoFill Destination:=Range("E2:E1000"), Type:=xlFillDefault
Columns("D:E").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("E2:E1000") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("D1:E1000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
我手动将范围设置为最大 1000,但我实际上想将其设为最后一个单元格中的数据。我想我可以对复制和粘贴部分执行 Range("A1", Range("A1").End(xlDown)) 之类的操作,但是 COUNTIF 不会接受这种表示法,对吗?
【问题讨论】:
-
第一步:如果您知道如何使用 GUI 进行操作,但不知道如何在代码中进行操作,请录制宏! (excel-easy.com/vba/examples/macro-recorder.html) 这将为您提供代码的起点。从那里,您可以编辑代码以完全按照您想要的方式运行。