在声明为Variant的range中删除行和插入行



我必须遍历完整的A列并检查单元格值长度是否为<6 .

我过去常常在表单上执行这样的操作

 activesheet.range("A" & row_number).select
 selection.entirerow.delete

当人们建议使用变体时,我想使用变体。

我把一组range变成了一个变量。

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

假设A列中有20行单元格值长度小于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")?

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

像这样

  1. 在第一个工作表(数组X)上占用A1:D1000
  2. 测试每个列A单元格是否大于6个字符
  3. 如果它大于6,那么整个行(在您的情况下为4个单元格)被写为在数组Y中添加新行
  4. 在第二个工作表
  5. 中,简化数组被写入A1。
  6. 添加了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
    

最新更新