删除行并在声明为Variant的范围中插入行

时间:2011-09-20 07:00:12

标签: excel excel-vba vba

我必须通过完整的A列并检查单元格值长度是否为< 6然后删除它。

我曾经像这样

在纸张上执行操作
 activesheet.range("A" & row_number).select
 selection.entirerow.delete

正如人们建议使用变体我想使用变体。

我已将一组范围纳入变体。

 dim var as variant 
 var=sheet1.range("A1:D1000").value

假设我有20行,其A列中的单元格值长度小于6.我必须删除变量变量中的这20行,包括变体中的其他对应列,即B,C,D。我的意思是var (“A18:D18”)应该完全删除。

我听说有人说我们无法删除变体中的条目,我们应该采用新变体并将这些值复制到新变体中。如果是这种情况,我如何将一个变体复制到另一个变体?

对于A列单元格值长度大于6的行,单元格值应转换为标准格式。我使用像

这样的表格完成了它
activesheet.cells("some cell!).value=activesheet.cells("").value

我循环遍历每一行,每次我敲击表单时都需要一些时间。我想现在使用变体,完成整个范围,执行操作并将其写回。

如何删除我们输入变量的完整行,如var(“A2:D2”),然后将var(“A4:D4”)值复制到其他变量,如var2(“A6:D6”)?< / p>

我们是否还可以在变量的中间插入一个变量,就像我们在工作表中插入行一样?

1 个答案:

答案 0 :(得分:4)

像这样的东西

  1. 第一个工作表(数组X)上需要A1:D1000
  2. 测试每个列A单元格以查看它是否超过6个字符
  3. 如果大于6,则整行(在您的情况下为4个单元格)写为a 数组Y中的新行
  4. 缩小的数组在sexcond工作表中写入A1
  5. 将sheet1列的格式添加到sheet2列

    Sub VarExample()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Set ws1 = ActiveWorkbook.Sheets(1)
    Set ws2 = ActiveWorkbook.Sheets(2)
    Dim X
    Dim Y
    Dim lngRow As Long
    Dim lngCOl As Long
    Dim lngCnt As Long
    'define the size of the array to be processed on sheet 1
    X = ws1.Range("A1:D1000").Value2
    'make the second array the same size as the first
    ReDim Y(1 To UBound(X, 1), 1 To UBound(X, 2))
    'Look at the first record in each row  [,1] part to see if it is longer than 6 chars
    For lngRow = 1 To UBound(X, 1)
        If Len(X(lngRow, 1)) > 6 Then
         'Longer than 6 so add 1 more row to the length of the 2nd array
            lngCnt = lngCnt + 1
            'Loop through value in this row of the first array and place in the second array
            For lngCOl = 1 To UBound(X, 2)
                Y(lngCnt, lngCOl) = X(lngRow, lngCOl)
            Next lngCOl
        End If
    Next
    'create a range on the second sheet equal in size to the second array and dump the array to it
    ws1.[a1].Resize(UBound(Y, 1), UBound(Y, 2)).Value2 = Y
    'copy formatting
    ws1.[a1].Resize(1, UBound(X, 2)).EntireColumn.Copy
    ws2.[a1].Resize(1, UBound(X, 2)).EntireColumn.PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
    End Sub