【发布时间】:2020-04-05 17:03:29
【问题描述】:
我想删除特定列中的单元格。
Sub do_it()
Dim sht As Worksheet, n As String, cell, num, tmp, rngDest As Range, i As Integer
Set sht = ActiveSheet
n = sht.Range("A1").Value
i = 0
For Each cell In sht.Range("A20:A34,D20:D34,H20:H34").Cells
tmp = cell.Offset(0, 1).Value
If cell.Value = n And tmp Like "*#-#*" Then
'get the first number
num = CLng(Trim(Split(tmp, "-")(0)))
'find the next empty cell in the appropriate row
Set rngDest = sht.Cells(num, sht.Columns.Count).End(xlToLeft).Offset(0, 1)
'make sure not to add before col J
If rngDest.Column < 12 Then Set rngDest = sht.Cells(num, 12)
cell.Offset(0, 1).Copy rngDest
' This is getting the next number in A/D/H----
Set tmp = cell.Offset(1, 0)
' This is filling up B17 - F18 in order until filled
If sht.Range("B17").Value = "" Then
sht.Range("C17").Value = cell.Offset(0, 1).Value
sht.Range("B17").Value = tmp.Value
ElseIf sht.Range("C18").Value = "" Then
sht.Range("C18").Value = cell.Offset(0, 1).Value
sht.Range("B18").Value = tmp.Value
ElseIf sht.Range("E17").Value = "" Then
sht.Range("E17").Value = cell.Offset(0, 1).Value
sht.Range("D17").Value = tmp.Value
ElseIf sht.Range("E18").Value = "" Then
sht.Range("E18").Value = cell.Offset(0, 1).Value
sht.Range("D18").Value = tmp.Value
End If
'---- This clears the B columns after using the value ----
Dim rg As Range, rg1 As Range
If cell.Column = 1 Then
Set rg = cell.Offset(, 1).Resize(, 1)
If cell.Column > 1 Then Set rg1 = cell.Offset(, 1).Resize(, 2)
End If
End If
Next cell
If Not rg Is Nothing Then rg.ClearContents 'will be delete column b
'If Not rg1 Is Nothing Then rg1.ClearContents 'will be delete column e,f,g,
End Sub
问题是在复制和粘贴过程后删除了正确的列。
使用 Excel 图片:
当在单元格区域 A20:A34(单元格 B34)中找到在单元格 A1 中输入的数字(在本例中为 8)时,仅在此单元格区域中,我需要在复制后删除单元格 B34 的内容并粘贴。
当数字在单元格区域 D20:D34 和 H20:H34 中找到时,我需要在复制和粘贴功能完成后删除单元格 E20/F20/G20 和 I/J/K。
【问题讨论】:
-
Dim sht As Worksheet, n As String, cell, num, tmp, rngDest As Range将rngDest声明为Range,但将cell,num, tmp声明为Variant。这是你的意图吗? -
它有效,但我能问一下问题是什么。我到了那里,但我的 VBA 经验不属于你的任何地方。谢谢你的帮助。
-
我刚刚检查过,这是我的原件; Sub do_it() Dim n, sht As Worksheet, cell As Range, num, tmp, rngDest As Range Set sht = ActiveSheet n = sht.Range("A1") For Each cell In sht.Range("A15:A30,C15 :C30,E15:E30,G15:G30,I15:I30").Cells tmp = cell.Offset(0, 1).Value 如果 cell.Value = n 和 tmp 一样 "#-# " Then ' 得到第一个数字 num = CLng(Trim(Split(tmp, "-")(0))) Debug.Print "在 " & cell.Address 中找到一个肯定的结果
-
其余的; '在适当的行中找到下一个空单元格 Set rngDest = sht.Cells(num, sht.Columns.Count).End(xlToLeft).Offset(0, 1) '确保不要在 col L 之前添加 If rngDest.Column