希望得到永恒的感激......
用数据打开工作表,按ALT F11启动IDE,然后单击插入 - >模块 . 这将在你的VBA“Project”中添加一个“Module”
在“项目管理器窗口”中(单击视图 - >“项目管理器窗口”以显示它)双击“Module1”节点以打开模块代码窗格并将此代码放入其中
Option Explicit
Sub RemoveDupesAndRetainData()
Dim cell As Range
Dim nDupes As Long
With ActiveWorkbook.Worksheets("Data") '
With .Range("A1:Q" & .Cells(.Rows.Count, 1).End(xlUp).Row) '
.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes '
For Each cell In .Offset(1).Resize(, 1).SpecialCells(xlCellTypeConstants) '
nDupes = WorksheetFunction.CountIf(.Columns(1), cell.Value) - 1 '
If nDupes > 0 Then '
.AutoFilter Field:=1, Criteria1:=cell.Value ' only rows with same current cell content will be displayed...
With .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) ''
Intersect(cell.EntireRow, .Columns("I")).Value = Join(Application.Transpose(Intersect(.Cells, .Columns("I").EntireColumn)), ";") ' ...concatenate "Resource" field...
Intersect(cell.EntireRow, .Columns("P")).Value = Join(Application.Transpose(Intersect(.Cells, .Columns("P").EntireColumn)), ";") ' ...concatenate "Special" field...
Intersect(cell.EntireRow, .Columns("Q")).Value = Join(Application.Transpose(Intersect(.Cells, .Columns("Q").EntireColumn)), ";") ' ...concatenate "Notes" field...
cell.Offset(1).Resize(nDupes).EntireRow.Delete '
End With
.AutoFilter '
End If
Next cell
End With
End With
End Sub
返回Excel UI,按Alt F8弹出“宏”对话框
在组合框中选择“RemoveDupesAndRetainData”,然后按“执行”按钮
观察会发生什么...如果出现错误,您可以按错误消息框中的“调试”按钮,将您引入VBA编辑器右侧的行,从而导致错误
另一种运行宏的方法如下:
在VBA IDE(来自Excel UI的ALT F11)模块代码窗格中(双击项目管理器窗口中所需的模块节点)将鼠标光标放在 Sub RemoveDupesAndRetainData 和 End Sub 语句之间的任意点,然后按F8使宏开始第一线黄色阴影
现在按F8键逐步执行将要执行的每个代码行,并且还会显示黄色阴影
在每个步骤中,您可以通过将鼠标悬停在代码中的任何位置上或通过在立即窗口中键入 ? variable_name 来查询每个变量值(您可以通过单击"Ctrl+G"或选择View-> Immediate Window来显示)
将鼠标光标放在任何有意义的代码“word”中并按“F1”将启动相关的帮助主题以了解该特定对象 . 每个主题都将有超链接深入挖掘并获得更多相应的信息
当然,网络是另一个宝贵的知识来源,在那里可以找到几乎所有你需要的东西,有几十个特定于Excel和VBA的博客
我认为上面的内容会让你开始,更重要的是,继续下去
这是一个漫长的过程,但是这里帮助编码研究员的每个人都是这样开始的,并且从未达到过这个目的