坚持删除存储在variant数据类型中的记录

时间:2011-09-15 06:49:40

标签: excel vba excel-vba

好的我已经尝试了这些并掌握了一些关于变体的观点,我已经编写了这些代码

Sub main()
Dim Vary As Variant
Vary = Sheet1.Range("A1:D11").Value
For i = 1 To UBound(Vary)
    For j = i + 1 To UBound(Vary)
        If Vary(i, 1) = Vary(j, 1) Then
            'I should delete the vary(j,1) element from vary 
            'in excel sheet we use selection.entirerow.delete
        End If
    Next j
Next i
End Sub

这是我试过的样本

 A     B     C     D 
 1    somevalues in BCD columns
 2
 3
 1

现在删除第4行不要认为我正在为独特的记录工作我只是在学习要做的事情,而在我学习变体的时候我被困在这一点上删除存储在变体中的完整行

我已将(A1:D11).value存储在变种

现在我如何删除变体中的A6元素或行,以便在将变体复制到其他工作表时可以避免它?

我是否还可以删除变体中的C和B列,以便在进行转置时不会复制C和B列?

我不知道变体究竟是什么 - 我正在考虑采用一组范围并执行类似于我们对excel表所做的操作,然后采用该变体并将其转换回工作表。

这是正确的思考方式还是我误解了变体的使用?

`variant(k,1)=text(x)`   some array shows mismatch ? whats wrong?

2 个答案:

答案 0 :(得分:4)

如果您打算使用varray来查看每行中的单元格以决定是否应该删除该行,那么您应该向后循环您的varray,就像您通过for循环执行for循环一样。细胞范围。由于您从第1行开始,变量i将始终等于元素所在的行号,因此您可以使用它来删除正确的行。

这是一个示例(比您尝试的更简单),它将删除A列和B列中的单元格相同的每一行。

Sub test()

Dim varray As Variant
varray = Range("A1:B11").Value

For i = UBound(varray, 1) To 1 Step -1
    If varray(i, 1) = varray(i, 2) Then
        Cells(i, 1).EntireRow.Delete
    End If
Next

End Sub

感兴趣的注意事项:

  • UBound(varray,1)给出行数
  • UBound(varray,2)给出列的计数

答案 1 :(得分:1)

没有第二个数组的一个解决方法是将故意错误引入要替换的元素,然后在将变量数组转储回范围后使用SpecialCells删除单元格。此示例将错误引入与A6对应的数组位置(在循环外部作为示例),然后当范围转储到E1时,SpecialCell错误删除将F6:H6转换为E6:G6。即

请在测试前保存 - 此代码将覆盖第一个工作表中的E6:H11

 Sub main()
    Dim Vary As Variant
    Dim rng1 As Range
    Set rng1 = Sheets(1).Range("A1:D11")
    Set rng2 = rng1.Offset(0, 4)
    Vary = rng1.Value2
    For i = 1 To UBound(Vary)
        For j = i + 1 To UBound(Vary)
            'your test here
        Next j
    Next i
    Vary(6, 1) = "=(1 / 0)"
    With rng2
        .Value2 = Vary
        On Error Resume Next
        .SpecialCells(xlFormulas, xlErrors).Delete xlToLeft
    End With
End Sub