当前位置: 首页 > 知识库问答 >
问题:

需要vba宏删除每列中除第一行和最后一行以外的单元格

宋宏儒
2023-03-14

我有一个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

共有3个答案

冯泓
2023-03-14

您可以使用范围。删除方法(Excel)

range(ID.Offset(0, 0), ID.Offset(0, b)).Delete Shift:=xlToLeft 
贡斌
2023-03-14

我会这样说:

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
屠嘉
2023-03-14

这是一种稍微不同的方法,但应该会有所帮助。

此外,通常最好不要像使用b那样在循环中声明变量

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

祝你好运

 类似资料:
  • 我是新来的希望你们能帮我。。。 我是java编程的初学者,我想我对这个问题有点不知所措。 我的程序运行得很好,除了一个让我恼火的小细节。我有一个JTable,第一列有一个按钮,可以从表中删除这一行。它工作得很好,除了当我试图删除表的最后一行时,按钮停留在那里,然后表冻结,我无法删除任何行,因为我收到了一个“越界异常”。但是,当我使用命令表时。getRowCount()); 在删除该行之前和之后,表

  • 问题内容: 我试图弄清楚如何禁止在stdout上显示用户输入。 后跟任何打印语句将保留用户键入的内容。不会显示用户键入的内容,但会保留“ Password:”提示。 为了解决这个问题,我只想删除最后一行(这也会从行尾删除换行符)。 问题答案: 您可能可以使用VT100控制代码执行所需的操作。 可能是这样的:

  • 为了缩短一些名字,但仍然保持它们的可读性,我想删除字符串中的所有元音,除了第一个和最后一个。例如,我希望“明尼苏达”变成“明斯塔”。 我已经尝试使用Perl的零宽度查找正则表达式语法,如下所示: 然而,尽管这适当地处理了第一个元音,但它删除了最后一个元音。为了解决这个问题,我试着保留最后一个元音,如下所示: 这也不起作用,大概是因为“$”将整个正则表达式锚定在字符串的末尾。 当然,我可以查找第一个

  • 问题内容: 我有三列的表:,和 有重复的字段。我想删除所有具有相同的行为别人 ,除了 对最近更新的一个。 因此,如果表包含这些行: 然后,我只想保留这些行: 您如何在SQL中做到这一点?我想象会从具有重复值的行中删除单个random(?)行,但是如何使其除最近更新的行之外的 所有 行删除呢? 问题答案: 您可以使用左联接来执行此操作: 这意味着对于每一行,它会寻找更新日期最近的另一行,如果有更新日

  • 我的VBA脚本中有一些代码,当行的相应B列的值等于零时,应该删除整行。不幸的是,我所使用的代码行并不是我想要的,因为如果相应行中的任何单元格等于零,它会删除整行。以下是迄今为止的代码: 例如,我有一行,其中D列中的单元格等于零,而这段代码删除了整行,即使B列中的单元格的值不是零。如何更改代码,使其实际上只扫描列B中的条目? 如有任何帮助,我们将不胜感激。