【发布时间】:2017-03-10 01:29:55
【问题描述】:
TL;DR:我需要一个公式来连接可见单元格、删除重复项并在值之间添加“,”。
我有一个电子表格,我一直都有宏过滤并运行数据拉取。
第 3 行包含从 A6:S16627 中的数据集中提取特定指标的公式。
第 3 行中的一个单元格调用 VBA 脚本来运行该脚本连接可见单元格,并返回一个删除重复项的值。
例如,如果数据为 100、100、101、102、101,则返回“100、101、102”。
我的困难是,当父宏运行通过自动过滤器并将第 3 行复制+粘贴到另一张纸上时,此脚本无法有效刷新。
有没有办法将下面的脚本复制为 excel 公式,适用于我上面提供的场景?
Public Function MakeList(myRange As Range)
Dim c As Range, MyDict As Object
Set MyDict = CreateObject("Scripting.Dictionary")
On Error Resume Next
For Each c In myRange
If Rows(c.Row).Hidden = False Then
MyDict.Add c.Value, 1
End If
Next c
MakeList = Join(MyDict.keys, ", ")
End Function
感谢您提供的任何帮助。
编辑:
这是与上面代码交互的第二个代码。
Option Explicit
Sub VBAFilterCopyPaste()
Dim cell As Range 'loop range
Dim Rng As Range 'range for unique values
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim lRow As Long 'last row in RegionSummary
Dim i As Integer 'counter
Set ws1 = Worksheets("WAP")
Set ws2 = Worksheets("HCAsummary")
Set ws3 = Worksheets("NamedRange")
Application.ScreenUpdating = False
'reset autofilter
ws1.ListObjects("Table2").Range.AutoFilter
'autofilter on project selected
ws1.ListObjects("Table2").Range.AutoFilter Field:=1, Criteria1:=ws2.Range("Q6")
'copy Column B in Table2 to named Range I1
ws1.Range("B5:B16627").SpecialCells(xlVisible).Copy 'extend 16627 this if needed
ws3.Range("i1").PasteSpecial
'Remove duplicates for unique values
ws3.Columns("I:I").RemoveDuplicates Columns:=1, Header:=xlYes
'set range for loop and sort
Set Rng = ws3.Range("i2:i" & ws3.Cells(Rows.Count, "i").End(xlUp).Row)
Rng.Sort Key1:=ws3.Range("I1"), Order1:=xlAscending
lRow = 11 'set current last row for start of HCASummary
'loop to copy row 3 from ws1 to ws2
For Each cell In Rng
'increment last row
i = i + 1
With ws1
.ListObjects("Table2").Range.AutoFilter Field:=2, Criteria1:=cell.Value
.Range("A3:S3").Copy
ws2.Range("a" & lRow + i).PasteSpecial xlPasteValues
End With
Next
'goto ws2.Range A11
Application.Goto ws2.Range("A11")
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
为什么不从你的其他脚本调用函数?
-
@RyanWildry 你能把它添加到上面你看到它所属的脚本中吗?我不确定你会替换什么。
-
@SJR 它会产生错误,我似乎无法使其正常工作。
-
您必须将其余代码发布给我们才能解决。
-
@RyanWildry 和 user3598756 - 您的两个脚本都按预期修复了功能。我用我当前的脚本拉取测试了它们中的每一个,并且它们都遭受了与我上面的脚本相同的命运,当过滤器更改时它们不会更新。您必须按 F2+Enter 重新计算输出。有没有办法让它在任何工作表更改时重新运行?也许这可能会解决我的重叠问题。
标签: vba excel excel-formula