好的我已经尝试了这些并掌握了一些关于变体的观点,我已经编写了这些代码
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?
答案 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
感兴趣的注意事项:
答案 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