Удалить строки и вставить строки в диапазонах, объявленных как Variant - PullRequest
0 голосов
/ 20 сентября 2011

Мне нужно пройти через полный столбец A и проверить, не равна ли длина ячейки <6, а затем удалить его. </p>

Я использовал для таких операций на листе вот так

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

Поскольку люди предложили использовать вариант, я хочу работать с вариантами.

Я взял набор диапазонов в варианте.

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

Предположим, у меня есть 20 строк, длина ячейки которых вСтолбец меньше 6. Я должен удалить эти 20 строк в переменной варианта, включая другие соответствующие столбцы в варианте, то есть B, C, D. Я имею в виду, что var ("A18: D18") должен быть полностью удален.

Я слышал, что люди говорят, что мы не можем удалить запись из варианта, мы должны взять новый вариант и скопировать только эти значения в новый вариант.Если в такой ситуации я копирую один вариант в другой?

Для строк, у которых длина ячейки столбца больше 6, значения ячеек должны быть преобразованы в стандартный формат.Я сделал это, используя лист типа

activesheet.cells("some cell!).value=activesheet.cells("").value

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

Как удалить всю введенную нами строку, например, var ("A2: D2"), а затем скопироватьЗначение var ("A4: D4") для другого варианта, например, var2 ("A6: D6")?

Можем ли мы вставить запись в вариант в середине варианта, как мы вставляем строку в лист?

1 Ответ

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

как то так

  1. Требуется A1: D1000 на первом листе (массив X)
  2. Проверяет каждую ячейку столбца, чтобы определить, длиннее ли она 6 символов
  3. Если оно больше 6, тогда вся строка (4 ячейки в вашем случае) записывается как новая строка в массиве Y
  4. Сокращенный массив записывается в A1 на листе второй секунды
  5. Добавлено форматирование столбцов листа1 в столбцы листа2

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