【问题标题】:need vba macro to delete cells except first and last row in each column需要 vba 宏来删除每列中除第一行和最后一行之外的单元格
【发布时间】:2018-08-15 17:24:58
【问题描述】:

我有一个具有多行和多列的 Excel,每行的列值范围不同。

需要一个宏来删除一行中的所有单元格,除了每行中的第一个和最后一个单元格,并将最后一个值粘贴到第一个值旁边。

尝试了以下脚本:

Sub test()
Dim sh As Worksheet
Dim IDS As range
Dim ID As range

Set sh = ThisWorkbook.Sheets("Sheet1")

    Set IDS = ActiveSheet.range("A2", range("A1").End(xlDown))

    For Each ID In IDS

        Dim b As Integer
        Dim k As Integer

        k = sh.range("ID", sh.range("ID").End(xlToRight)).Columns.Count
        b = k - 1

        range(ID.Offset(0, 0), ID.Offset(0, "b")).Select
        Selection.ClearContents

    Next ID

End Sub

【问题讨论】:

  • 只是脚本的初学者。在问题中添加了我的脚本(现在)。
  • 行数和列数?只是一个估计或最大值就可以了
  • 行数和列数都是动态的。或者可以将行数视为 1000,但列是动态的。

标签: vba excel


【解决方案1】:

这是一个有点不同的方法,但应该会有所帮助。

此外,通常最好不要像使用 b & k 那样在循环中声明变量,仅供参考

Sub test()

    Dim sh As Worksheet
    Dim row As Integer
    Dim lastCol As Integer

    Set sh = ThisWorkbook.Sheets("Sheet1")

    For row = 2 To sh.Cells(Sheets(1).Rows.Count, "A").End(xlUp).row

        lastCol = sh.Cells(row, Columns.Count).End(xlToLeft).Column

        sh.Range("B" & row).Value = sh.Cells(row, lastCol).Value
        sh.Range(sh.Cells(row, 3), sh.Cells(row, lastCol)).ClearContents

    Next

End Sub

祝你好运

【讨论】:

  • 这确实有效,感谢您的支持。如果我只想在 H 列之后运行此代码,即删除 H 列之后的第一行和最后一行,使 A 到 G 列保持不变,该怎么办。你能给出同样的建议吗?
  • @senthilsg 没问题。为此,将“B”更改为“H”,并在下一行将 (row, 3) 更改为 (row, 9)
【解决方案2】:

我会这样做:

Sub test()
    Dim cell As Range

    With ThisWorkbook.Sheets("Sheet1") ' reference relevant sheet
        For Each cell In .Range("A2", .Cells(.Rows.Count, "A").End(xlUp)) ' loop through referenced sheet column A cells from row 2 down to last not empty one
            With .Range(cell, .Cells(cell.Row, .Columns.Count).End(xlToLeft)) ' reference referenced sheet range spanning from current cell to last not empty one in the same row
                If .Count > 2 Then ' if referenced range has more then 2 cells
                    cell.Offset(, 1).Value = .Cells(1, .Count).Value ' store last cell value next to the current one
                    .Offset(, 2).Resize(, .Columns.Count - 1).ClearContents 'clear all cells right of current one
                End If
            End With
        Next
    End With
End Sub

【讨论】:

    【解决方案3】:

    您可以使用Range.Delete Method (Excel)

    range(ID.Offset(0, 0), ID.Offset(0, b)).Delete Shift:=xlToLeft 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-12
      • 2011-04-30
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多