【发布时间】:2013-12-13 05:21:15
【问题描述】:
我有一个超过 100,000 行和几列的数据集。
我想要实现的是查找另一个范围内的值,如果匹配,则将其放在它旁边的列中。如果有多个匹配的值,请插入另一行并将其放入。
但是,代码需要很长时间才能加载,我的 excel 最终崩溃了……救命!
Sub Splitter_Step1a()
Dim RefSheet As Worksheet
Set RefSheet = ActiveWorkbook.Worksheets("RefList")
Dim ProdSheet As Worksheet
Set ProdSheet = ActiveWorkbook.Worksheets("Products")
Dim Brand, LastBrand, BrandList As Range
Set LastBrand = RefSheet.Range("A1").End(xlDown)
Set BrandList = RefSheet.Range(RefSheet.Range("A1"), LastBrand)
Dim Reference, ReferenceList, LastReference As Range
Set LastReference = ProdSheet.Range("C2").End(xlDown)
Set ReferenceList = ProdSheet.Range(ProdSheet.Range("C2"), LastReference)
Dim BrandInList As Boolean
'Part 1a - assigning brand references to product
For Each Brand In BrandList
For Each Reference In ReferenceList
If InStr(1, Reference, Brand, 1) And IsEmpty(Reference.Offset(0, 1).Value) Then
Reference.Offset(0, 1).Value = Brand.Offset(0, 1).Value
BrandInList = True
ElseIf Not IsEmpty(Reference.Offset(0, 1).Value) Then
If InStr(1, Reference, Brand, 1) Then
Reference.EntireRow.Insert
Reference.Offset(1, 1).Value = Brand.Offset(0, 1).Value
BrandInList = True
End If
Else
BrandInList = False
End If
Next Reference
Next Brand
End Sub
编辑 我正在寻找方法来更改代码以完全不使用循环或找到一种方法,以便 excel 不会崩溃并且宏可以在不到 5 分钟内运行..
EDIT2 我的 reflist 是一列,其中的单元格看起来像这样:
Howell Michigan
1234 Detroit Michigan
ABC Detroit Michigan
A Detroit Michigan
Ann Arbor Michigan
334 Ann Arbor Michigan
Amazing Howell & Detroit Kind
我的品牌列表如下所示:
column A column b
Howell Howell Michigan
Detroit Detroit Michigan
Ann Arbor Ann Arbor Michigan
这个项目的目标是两个部分:
第 1 部分 - 如果参考单元格包含 A 列中的内容,它将返回参考单元格旁边的单元格中 b 列中的内容。
第 2 部分 - 如果出现多次(例如 Howell & Detroit),则在参考单元格旁边的单元格中返回第一列 b 值,然后插入新行并复制所有内容,但将第二列 b 值改为(因此,拆分)
【问题讨论】:
-
我认为您可以使用
COUNTIF()“将其放在旁边的列中”并使用COPY() + PASTE() + REMOVEDUPLICATES() + Sort()“插入另一行并将其放入” --- 你能短示例 -
如果执行后可以添加三列:RefList的samples、Products的samples和RefList的sample
-
您可以使用表格格式添加您的示例,如下所示:sensefulsolutions.com/2010/10/format-text-as-table.html
-
reflist是单列数据集,还是与它关联的列更多?如果还有其他列,它们中的任何一个都有公式吗? -
是的,relist 旁边还有一列包含公式
标签: excel vba loops optimization rows