在工作表中的两个位置多次插入列

问题描述 投票:0回答:3

我有一个工作表,其中包含各种数据,以及同一行上包含月份 X、Y、Z 等的两个列范围,一个用于支出成本,一个用于已开具发票的成本。

我已经编写了代码,可以使用输入硬数据所需的格式复制另一个工作表。

我还需要在第一个月列的右侧输入两列,以便根据需要输入新的月份。

我在主代码中开始并第一次工作。

Sheets("Cost").Range("K:K").EntireColumn.Insert
Sheets("Cost").Range("O:O").EntireColumn.Insert

但是,下次我生成月份时,范围已更改,VBA 代码将新列放置在错误的位置。

如何动态更新两个位置的范围?

excel vba dynamic insert
3个回答
0
投票

您可以通过搜索行中的值(可能是固定值)或通过输入框或通过使用在搜索值后添加列的代码进行选择来实现 如果您添加一张简单数据的照片可能会更容易找到更好的方法

count = 0
Add = False
For Each cell In Sheets("Cost").Range("1:1")
   If Add Then
   cell.EntireColumn.Insert
   Add = False
   Count = Count + 1
   End If
    If cell.Value = "value to search" Then
        Add = True
        'MsgBox cell.Address
    End If
    
    If Count = 2 Then
        Exit For
    End If
Next cell

0
投票
  • 插入第一列时,列(从 K 列到右侧)将向右移动。也就是说,

    Columns("O")
    在P列上。那么第二次插入是错误的。

  • 插入和删除都要从末尾开始执行。

    Sheets("Cost").Columns("O").Insert
    Sheets("Cost").Columns("K").Insert
  • 顺便说一句,
    Columns("O")
    相当于
    Range("K:K").EntireColumn

问题:但是,下次我生成一个月时,显然范围已更改,并且 vba 将新列放置在错误的位置。

  • 如果需要多次执行代码,最好通过标题来定位该列。例如。假设在 Col J 处插入一列(单元格 J1 =“Col11”)
Sub demo()
    Dim c As Range
    Const KEY = "Col11"
    Set c = Sheets("Cost").Rows(1).Find(KEY, LookIn:=xlValues, lookat:=xlWhole)
    If c Is Nothing Then
        MsgBox "Can't find " & KEY
    Else
        c.EntireColumn.Insert
    End If
End Sub

0
投票

另一个想法是,它需要位于第一个移位之前的列中的三个单元格来存储列名称和移位次数,因为它将影响第二列的位置,即通过使用 2 个函数 asc() 和 chr() 如下

我使用了A1,A2,A3,您可以使用任何工作表中的任何其他单元格

If Range("a1").Value = "" And Range("a2").Value = "" Then
    Sheets("Cost").Columns("O").Insert
    Sheets("Cost").Columns("K").Insert
    Range("a1").Value = "K"
    Range("a2").Value = "O"
    Range("a3").Value = 1
Else
Sheets("Cost").Columns(Chr(Asc(Range("a1").Value) + 1)).Insert
Range("a1").Value = Chr(Asc(Range("a1").Value) + 1)
Range("a3").Value = Range("a3").Value + 1
Sheets("Cost").Columns(Chr(Asc(Range("a2").Value) + 1 + Range("a3").Value)).Insert
Range("a2").Value = Chr(Asc(Range("a2").Value) + 1)
End If
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.