通过VBA根据单元格值扩展/收缩列

时间:2019-02-25 18:45:34

标签: excel vba

我想根据另一个工作表中的单元格值自动添加列。 例如,如果单元格值显示为25,我希望它扩展列(包括公式/格式)以在22之后再插入3列。

如果单元格值更改为20,我希望它删除最后两列。

在VBA中有没有办法做到这一点?我认为可能需要某种类型的刷新按钮,除非有另一种方法使其成为更改事件?

谢谢!

Here's an example

Sub AddCols()

Dim lastColumn As Long

lastColumn = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
'lastColumn.Select

Cells(5, lastColumn + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

End Sub

编辑:我在下面尝试了以下代码,但是当更改事件发生时,它一直在给我一个错误。

colCount = Worksheets("Sheet2").Rows(1).End(xlToRight).Column
checkCell = Worksheets("Sheet1").Range("A1").Value

If checkCell > colCount Then
    cellDiff = checkCell - colCount
    Range(Columns(colCount + 1), Columns(colCount + cellDiff)).Insert Shift:=xlToRight
    Range(Cells(1, ColCount), Cells(lRow, ColCount)).AutoFill Destination:=Range(Cells(1, ColCount), Cells(lRow, ColCount + cellDiff)), Type:=xlFillDefault
Else
    cellDiff = colCount - checkCell
    startCol = colCount - cellDiff + 1
    Range(Columns(startCol), Columns(colCount)).Delete Shift:=xlToLeft
End If

1 个答案:

答案 0 :(得分:0)

帮助您前进的小例子...

dim lastcolumn as long, k as long
with sheets(1)
    lastcolumn = .cells(5,.columns.count).end(xltoleft).column
    if sheets(2).cells(1,1).value <> lastcolumn then k = sheets(2).cells(1,1).value - lastcolumn
    select case k
        case >0
            'insert columns
        case <0
            'remove columns
        case is 0
            'do nothing
    end select
end with       

编辑1:

更正了引用.rows.count而不是.columns.count的lastcolumn