У меня проблемы с нахождением значения столбца и привязкой его к соответствующему номеру строки в vba Excel2007 - PullRequest
1 голос
/ 24 июня 2011

Во-первых, я использую Excel 2007 и работаю в редакторе Visual Basic (я полагаю, VBA).

Я пытаюсь взять лист данных (7500 строк), уменьшить его до 2999 строки отформатировать его, чтобы начать с InitialValue (0.2) из ​​столбца «F», я хочу, чтобы InitialValue определялся как номер строки.Все значения во всех строках до первого вхождения 0.2 в столбце «F» затем могут быть удалены.Затем я хочу начать с новой строки 1 и сократить файл до 2999 строк.

Столбец F - это счетчик данных, который иногда сбрасывается из-за специфического входа датчика движения, и поэтому я хотел бы только найтипервая ссылка в наборе данных к предписанному InitialValue (0.2).Я не уверен, если мне нужно написать стратегию для этого.

лист имеет формат:

ROW  |    A        |   B   |    C    |        D
1       date-time    data      data        599.4
2       date-time    data      data        599.6
3       date-time    data      data        599.8
4       date-time    data      data          0.2
5       date-time    data      data          0.4
6       date-time    data      data          0.6
7       date-time    data      data          0.8
.       date-time    data      data          1.0
.       date-time    data      data          0.2
.       date-time    data      data          0.4
7500    date-time    data      data        345.4

Я довольно новичок в VBA, поэтому я, безусловно, здесь упускаю что-то важное,В строке «Set InitialValue» я получил ошибку требуемого объекта

 Sub Scrub_clean()
        'Scrub_clean Macro  isolates event

    Dim InitialValue As Integer
    Set lookupTable = Worksheets("Sheet1").Range("D1:D7500")

    With Worksheets(1).Range("D1:D7500").Value
        Set InitialValue = .Find(0.2, LookIn:=xlValues)

    End With

    Rows("1:InitialValue-1").Select
        'subtract one from initial value to ensure the 0.2 value does not get deleted
    Selection.Delete Shift:=xlUp

    Rows("3000:7500").Select
    Selection.Delete
 End Sub

У меня не получается получить определение первого вхождения 0.2 в столбце «D», и я не уверен, гдечтобы убедиться, что макрос не продолжает искать другие вхождения того же значения.Любая помощь будет принята с благодарностью.Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 25 июня 2011

Вы пытаетесь использовать команду Set для переменной InitialValue, которая измеряется как целое число. Вы не можете сделать это, либо используйте:

 InitialValue = .Find(0.2, LookIn:=xlValues).Row

Или измерьте переменную InitialValue как диапазон, тогда вы можете использовать set, как вы изначально делали.

Также вам не нужно выделять ячейки для работы с ними, используйте:

Rows("3000:7500").Delete

Вот как я бы сделал то, что вы просите:

Sub Scrub_clean()
        'Scrub_clean Macro  isolates event

    Dim rCell As Range

    With Worksheets("Sheet1")
        Set rCell = .Range("D1:D7500").Find(0.2, LookIn:=xlValues)

        If Not rCell Is Nothing Then
            '// Assumes you have no headers as per your example
            .Rows(1).Resize(rCell.Row - 1).Delete Shift:=xlUp
            .Rows(3000).Resize(.UsedRange.Rows.Count).Delete Shift:=xlUp
        End If
    End With


 End Sub
0 голосов
/ 28 июня 2011

Спасибо за вашу помощь.Я также обнаружил, что это работает, это довольно грубо, интересно, будет ли команда Find более эффективным процессом?

   Sub Scrub_clean()

    Dim InitialValue As Integer
    Set lookupTable = Worksheets("Sheet1").Range("d1:d7500")

    With Worksheets(1).Range("d1:d7500")
        Set InitialValue = .Find(0.2, LookIn:=xlValues)

    End With

    Rows("1:InitialValue-1").Select

    Selection.Delete Shift:=xlUp

    Rows("3000:7500").Select
    Selection.Delete
End Sub    
0 голосов
/ 25 июня 2011

Попробуйте удалить. Значение в вашем утверждении С.Я не думаю, что функция Find является членом свойства Value, но она является частью объекта Range.

...