excel - 如何复制和粘贴单元格,然后使用 excel VBA 以特定方式删除某些行?
问题描述
我必须先说我在 VBA 方面低于最低水平的新手。我目前在 excel 中有一列数据,当您从该列向下移动时,有关公司的信息以三行一组的形式存储。数据分组如下(数据之间没有空行):
A公司
www.CompanyA.com
公司位置
B公司
www.CompanyB.com
公司B位置...等。
我需要创建一个代码来复制下面的单元格,将其粘贴到右侧的单元格中,然后删除下面的行。然后复制现在下面的单元格,并将其粘贴到右侧两个,然后选择下一个单元格并重复下一个三行数据集。如果这有助于解释我的想法,我在下面包含了我糟糕的初稿。任何帮助将不胜感激。谢谢!
Sub Clean()
Do Until IsEmpty(ActiveCell.Value)
Range("A1").Activate
Selection.Offset(1, 0).Copy
Selection.Offset(0, 1).Paste
ActiveCell.Offset(1, 0).EntireRow.Delete xlShiftUp
Selection.Offset(1, 0).Copy
Selection.Offset(0, 2).Paste
ActiveCell.Offset(1, 0).EntireRow.Delete xlShiftUp
ActiveCell.Offset(1, 0).Select
Loop
End Sub
解决方案
这可以帮助你做你想做的事。不是最好的解决方案,但这将比你所做的更快地循环所有单元格。
Sub test()
Dim lRow As Long, i As Long
Dim ws As Worksheet
Dim RowsToDelete As Range
Set ws = ActiveSheet
With ws
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' Get the last row
For i = lRow To 1 Step -3
.Cells(i - 2, 3) = .Cells(i, 1)
.Cells(i - 2, 2) = .Cells(i - 1, 1)
If RowsToDelete Is Nothing Then 'first 2 rows to be deleted
Set RowsToDelete = Range(.Rows(i).EntireRow, .Rows(i - 1).EntireRow)
Else 'append more rows with union
Set RowsToDelete = Application.Union(RowsToDelete, .Rows(i).EntireRow, .Rows(i - 1).EntireRow)
End If
Next i
If Not RowsToDelete Is Nothing Then 'if there is something to be deleted
RowsToDelete.Delete
End If
End With
End Sub
推荐阅读
- c# - 如何在页面加载时获取选项卡名称
- sql - 排序内连接的结果
- graphql - 终止与非终止链接阿波罗链接?
- javascript - 如何在 discord.js 中重置嵌入数据?
- nhibernate - NHibernate 5 EntityMode 不是 ISessionImplementor 的成员
- c# - 在 C# EF 中同时使用 SqlFunctions.SoundCode 和 string.Spilit() 时出现错误
- reactjs - 反应中选择的问题
- javascript - 导入函数中的对象引用
- r - 从R中的列表中获取整个列表作为Json
- windows - 如何在 Windows 10 中启用 IP 转发和端口重定向?