Застрял при удалении записи, хранящейся в типе данных варианта - PullRequest
1 голос
/ 15 сентября 2011

Хорошо, я попробовал это и понял некоторые варианты, и я написал этот код

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 AND Bв варианте, чтобы, когда я делаю транспонирование, он не будет копировать столбцы C и B?

Я не знаю, что именно это за вариант - я думал взять набор диапазонов и выполнить такие операции, как мыдля листа Excel, затем возьмите этот вариант и перенесите его обратно на лист.

Это правильный образ мышления или я неправильно понял использование вариантов?

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

Ответы [ 2 ]

4 голосов
/ 15 сентября 2011

Если вы планируете использовать varray для просмотра ячеек в каждой строке, чтобы решить, следует ли удалять эту строку или нет, вам следует перебирать свой varray в обратном направлении, так же, как если бы вы выполняли цикл for черездиапазон ячеек.Поскольку вы начинаете со строки 1, переменная i всегда будет равна номеру строки, в которой был расположен элемент, поэтому вы можете использовать ее для удаления нужной строки.

Вот пример (более простой, чем вы есть)пытаясь сделать, однако), что удалит каждую строку, в которой ячейки в столбцах A и B одинаковы.1) дает количество строк

UBound (varray, 2) дает количество столбцов
1 голос
/ 15 сентября 2011

Одним из обходных путей без второго массива является внесение преднамеренной ошибки в элемент, который вы хотите заменить, затем используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...