如何在vba中向一个键添加多个项
我是vba新手,我试图制作一个程序来向一个键添加多个项 例如: 桌子 然后,如果名称重复,则将列值设置为前一个…如:如何在vba中向一个键添加多个项,vba,excel,Vba,Excel,我是vba新手,我试图制作一个程序来向一个键添加多个项 例如: 桌子 然后,如果名称重复,则将列值设置为前一个…如: Name Date Time Date Time XYZ 20 4 22 6 ABC 21 5 我已经为单个项目值排序并添加
Name Date Time Date Time
XYZ 20 4 22 6
ABC 21 5
我已经为单个项目值排序并添加了重复值之和,但我发现对于多值项目很难做到这一点。所以请大家帮忙
谢谢 subt()
Sub t()
Application.DisplayAlerts = False
Dim Tempsheet As Worksheet
Dim c As Range
Set Tempsheet = ThisWorkbook.Sheets.Add
With ThisWorkbook.Sheets("sheet1")
rng = .UsedRange.Address
.UsedRange.Sort key1:=.Range("b1"), order1:=xlAscending, key2:=.Range("c1"), order2:=xlAscending, Header:=xlYes
.UsedRange.Columns(1).Copy
Tempsheet.Range("a1").PasteSpecial (xlPasteValues)
Tempsheet.Columns(1).RemoveDuplicates Columns:=1, Header:=xlYes
For Each cell In Tempsheet.Range("a1:a" & Tempsheet.Range("a" & Rows.Count).End(xlUp).Row).Cells
i = i + 1
If i <> 1 Then
With .Range(rng)
Set c = .Find(what:=cell.Value, after:=.Range("a1"), LookIn:=xlValues, lookat:=xlWhole)
firstAddress = c.Address
If Not c Is Nothing Then
Do
j = j + 1
If j <> 1 Then
k = k + 1
.Range(c.Offset(0, 1), c.Offset(0, 2)).Copy
.Range(firstAddress).Offset(0, (k * 2) + 1).PasteSpecial (xlPasteValues)
.Range(firstAddress).Offset(-1, (k * 2) + 1) = "Date"
.Range(firstAddress).Offset(-1, (k * 2) + 2) = "Time"
c.EntireRow.ClearContents
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End If
j = 0
Next cell
.UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Tempsheet.Delete
End Sub
Application.DisplayAlerts=False
将临时工作表设置为工作表
调光范围
Set Tempsheet=thisvoolk.Sheets.Add
使用此工作簿。工作表(“工作表1”)
rng=.UsedRange.Address
.UsedRange.Sort key1:=.Range(“b1”),order1:=xlAscending,key2:=.Range(“c1”),order2:=xlAscending,Header:=xlYes
.UsedRange.Columns(1).复制
Tempsheet.Range(“a1”).PasteSpecial(XLPasteValue)
Tempsheet.Columns(1).RemovedUpplicates列:=1,标题:=xlYes
对于Tempsheet.Range(“a1:a”和Tempsheet.Range(“a”和Rows.Count).End(xlUp.Row).单元格中的每个单元格
i=i+1
如果我是1那么
带.量程(rng)
设置c=.Find(what:=cell.Value,after:=.Range(“a1”),LookIn:=xlValues,lookat:=xlother)
firstAddress=c.地址
如果不是,那么c什么都不是
做
j=j+1
如果j1那么
k=k+1
.范围(c.偏移量(0,1),c.偏移量(0,2)).复制
.Range(firstAddress).Offset(0,(k*2)+1.PasteSpecial(xlPasteValues)
.Range(firstAddress).Offset(-1,(k*2)+1)=“日期”
.Range(firstAddress).Offset(-1,(k*2)+2)=“时间”
c、 EntireRow.ClearContents
如果结束
集合c=.FindNext(c)
循环而不是c为Nothing,c.Address为firstAddress
如果结束
以
如果结束
j=0
下一个细胞
.UsedRange.Columns(1).特殊单元格(xlCellTypeBlanks).EntireRow.Delete
以
删除临时工作表
端接头
您正在为Excel功能的基本部分编写一个精巧的程序。它被称为透视表
Sub t()
Application.DisplayAlerts = False
Dim Tempsheet As Worksheet
Dim c As Range
Set Tempsheet = ThisWorkbook.Sheets.Add
With ThisWorkbook.Sheets("sheet1")
rng = .UsedRange.Address
.UsedRange.Sort key1:=.Range("b1"), order1:=xlAscending, key2:=.Range("c1"), order2:=xlAscending, Header:=xlYes
.UsedRange.Columns(1).Copy
Tempsheet.Range("a1").PasteSpecial (xlPasteValues)
Tempsheet.Columns(1).RemoveDuplicates Columns:=1, Header:=xlYes
For Each cell In Tempsheet.Range("a1:a" & Tempsheet.Range("a" & Rows.Count).End(xlUp).Row).Cells
i = i + 1
If i <> 1 Then
With .Range(rng)
Set c = .Find(what:=cell.Value, after:=.Range("a1"), LookIn:=xlValues, lookat:=xlWhole)
firstAddress = c.Address
If Not c Is Nothing Then
Do
j = j + 1
If j <> 1 Then
k = k + 1
.Range(c.Offset(0, 1), c.Offset(0, 2)).Copy
.Range(firstAddress).Offset(0, (k * 2) + 1).PasteSpecial (xlPasteValues)
.Range(firstAddress).Offset(-1, (k * 2) + 1) = "Date"
.Range(firstAddress).Offset(-1, (k * 2) + 2) = "Time"
c.EntireRow.ClearContents
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End If
j = 0
Next cell
.UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Tempsheet.Delete
End Sub