Excel有效地查找剩余的列

时间:2017-04-17 19:29:52

标签: excel excel-vba vba

我有一个脚本(感谢SO的帮助!)允许用户选择一些不连续的列并将其索引插入到数组中。我现在需要做的是有效地选择剩余的列,即用户没有选择到另一个数组中的列,以对这些列执行单独的操作。

例如,用户选择列A,C,F,G,并将这些索引放入数组Usr_col()中。其余列(B,D,E)需要存储在数组rem_col()

我现在能够想到的是针对用户选择的列数组测试每个使用过的列的索引,如果它不包含在该数组中,则将其插入到新数组中。像这样:

For i = 1 to ws.cells(1, columns.count).end(xltoright).column 
    if isinarray(i, Usr_col()) = false Then
        rem_col(n) = i
        n = n+1
    end if
next

我只是在寻找一种更有效的解决方案。

1 个答案:

答案 0 :(得分:0)

我同意@ScottHoltzman的观点,即该网站通常不会成为提高工作代码效率的舞台。但是,这个问题对前一个问题有不同的倾向,因为最明显的解决方案是在一个循环中将列号分配给一个或另一个数组。

下面的代码为您提供了一个骨架示例。您需要检查用户选择的正确列。此外,在循环中重新定义数组不是很好的形式,但如果用户选择相邻的列,那么您需要获取区域计数和列数以获得数组大小。如果你在循环罐中重新加注,我会把它留给你:

Dim targetCols As Range, allCols As Range
Dim selColNum() As Long, unselColNum() As Long
Dim selIndex As Long, unselIndex As Long

Set targetCols = Application.InputBox("Select your columns", Type:=8)

For Each allCols In Sheet1.UsedRange.Columns
    If Intersect(allCols, targetCols) Is Nothing Then
        ReDim Preserve unselColNum(unselIndex)
        unselColNum(unselIndex) = allCols.Column
        unselIndex = unselIndex + 1
    Else
        ReDim Preserve selColNum(selIndex)
        selColNum(selIndex) = allCols.Column
        selIndex = selIndex + 1
    End If
Next