我有一个excel电子表格,其数据来自不同的数据源。
我遇到的问题是数据“重复”:
(网站是A栏,所有者是B栏):
Site Owner
http://website1.com John Doe
http://website1.com Jane Doe
http://website2.com John Smith
http://website2.com Jane Smith
http://website2.com John Doe
我想将此更改为:
Site Owner1 Owner 2 Owner 3
http://website1.com John Doe Jane Doe
http://website2.com John Smith Jane Smith John Doe
我目前正在为每个网站复制“所有者”,并使用“转置”方法粘贴它们以实现此目的。问题是,有很多记录,这是非常无聊的,可能是浪费的工作。
有没有办法通过宏,脚本或其他方式自动完成此操作?
谢谢!
答案 0 :(得分:1)
我不会为你写出任何VBA。但是,通过点击一些简单的工作表,您可以通过以下方式实现这一目标:
你需要在OzGrid上使用mrickerson的这个自定义函数:
Function ConcatIf(ByVal compareRange As Range, ByVal xCriteria As Variant, _
Optional ByVal stringsRange As Range, Optional Delimiter As String) As String
Dim i As Long, j As Long, criteriaMet As Boolean
Set compareRange = Application.Intersect(compareRange, _
compareRange.Parent.UsedRange)
If compareRange Is Nothing Then Exit Function
If stringsRange Is Nothing Then Set stringsRange = compareRange
Set stringsRange = compareRange.Offset(stringsRange.Row - compareRange.Row, _
stringsRange.Column - compareRange.Column)
For i = 1 To compareRange.Rows.Count
For j = 1 To compareRange.Columns.Count
If (Application.CountIf(compareRange.Cells(i, j), xCriteria) = 1) Then
ConcatIf = ConcatIf & Delimiter & CStr(stringsRange.Cells(i, j))
End If
Next j
Next i
ConcatIf = Mid(ConcatIf, Len(Delimiter) + 1)
End Function
然后,您需要创建一个包含您网站唯一值的列。
然后您只需要使用ConcatIf函数创建组合列,然后您可以将其直接复制并粘贴到文本编辑器中并将其另存为CSV:
如果你想自动化这个,我相信你不会有困难,但这通常是你如何做到的。祝你好运。
答案 1 :(得分:1)
为了弥补我上面的错误数据透视表建议...
Sub Tester()
Dim data, rngTL As Range, num
Dim i As Long, f As Range
Dim site, owner
data = Selection.Value 'select raw data before running
'where the pivoted data goes: edit to suit...
Set rngTL = ThisWorkbook.Sheets("Sheet1").Range("A1")
num = 0
For i = 1 To UBound(data, 1)
site = Trim(data(i, 1))
owner = Trim(data(i, 2))
Set f = rngTL.Resize(num + 1, 1).Find(site, , xlValues, xlWhole)
If f Is Nothing Then
num = num + 1
rngTL.Offset(num, 0).Value = site
rngTL.Offset(num, 1).Value = owner
Else
f.End(xlToRight).Offset(0, 1).Value = owner
End If
Next i
End Sub
答案 2 :(得分:-1)
对唯一条目使用“高级过滤”方法,并使用带转置的pastespecial方法将结果复制到其他位置。