Как написать макрос для фильтрации столбца и выведения нужного значения?

Мне нужен макрос, который должен фильтровать столбец и извлекать требуемое значение даты вместе с позицией ячейки (например, «22.04.2018», позиция ячейки «A9 или просто 9»). Пожалуйста, помогите мне решить эту проблему

Смотрите код, который я написал ниже

Dim Date As String

Date = Sheets("alldata")
Rows("3:3").Select.AutoFilter.Range("$A$3:$AA$606").AutoFilter , Field:=1, Criterial: = "#VALUE!"
Range("A3").Select.xlFilterValues.offset(1, 0).Copy.value

Sheets("Log").Cells(2, "AF").value = Date

Как написать макрос для фильтрации столбца и выведения нужного значения?

Этот синтаксис Rows("3:3").Select.AutoFilter, а также ваша следующая строка недействительны. Рекомендую прочитать Как избежать использования Select в Excel VBA. И всегда сообщайте, что не так с вашим кодом. Были ли ошибки и какие.

Pᴇʜ 17.04.2018 11:36

Также Dim Date As String Дата - зарезервированное слово. вы можете использовать это так

Siddharth Rout 17.04.2018 11:39

Слишком много ошибок ... Criterial: - это опечатка? Должен быть Criteria1

Siddharth Rout 17.04.2018 11:41

Также String не может быть листом Date = Sheets("alldata"), если вы определяете переменную как String.

Pᴇʜ 17.04.2018 11:42

Если ваши даты находятся в столбце A, то как можно поставить дату в столбце W? say "4/14/2017" cell position "W7"... Исправьте свой вопрос, прежде чем мы сможем дать вам соответствующий ответ ...

Siddharth Rout 17.04.2018 11:42

Код выполняется, но значение даты не копируется, а остается пустой ячейкой.

rozario_k 17.04.2018 11:44

Не исключено, что код, который вы разместили выше, работает. он даже не запустится. В нем так много ошибок

Siddharth Rout 17.04.2018 11:45

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

rozario_k 17.04.2018 11:49

Вы хотите отфильтровать дату и вернуть номер строки или адрес этой ячейки?

Siddharth Rout 17.04.2018 11:53

Да, пожалуйста, посмотрите картинку, которую я прикрепил, надеюсь, она даст вам четкое представление о том, что мне нужно. 1. Мне нужно снять галочку "# значение!" путем применения фильтров к столбцу даты 2. Затем будут доступны значения даты. В этом мне нужно первое значение даты и номер строки первого значения даты.

rozario_k 17.04.2018 11:59
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
10
497
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Следующее будет фильтровать даты и для каждой даты копирует значение в журнал листа в столбце AF:

Sub foo()
Dim ws As Worksheet: Set ws = Sheets("alldata")
Dim wsLog As Worksheet: Set wsLog = Sheets("Log")
'declare and set your worksheet, amend as required
Dim LastRow As Long, LogLastRow As Long
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'get the last row with data on Column A
Dim c As Range, rng As Range

    ws.Rows("3:3").AutoFilter
    ws.Range("$A$3:$AA$" & LastRow).AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(0, "01/01/2018")
    Set rng = ws.Range("$A$4:$A$" & LastRow).SpecialCells(xlCellTypeVisible)

    For Each c In rng
        LogLastRow = wsLog.Cells(wsLog.Rows.Count, "AF").End(xlUp).Row
        c.Copy Destination:=wsLog.Cells(LogLastRow, "AF")
        'if instead of copying the value, you want to return its address,
        'you can get the address by using "c.Address" for each value in the range
    Next c
End Sub
Ответ принят как подходящий

Это то, что вы пытаетесь?

Sub Sample()
    Dim ws As Worksheet
    Dim rng As Range

    Set ws = Sheets("alldata")

    With ws
        Set rng = .Range("$A$3:$A$606")

        '~~> Remove any filters
        .AutoFilterMode = False

        With rng
            .AutoFilter Field:=1, Criteria1: = "<>#VALUE!"

            '~~> Get the Row Number
            MsgBox .Offset(1, 0).SpecialCells(xlCellTypeVisible).Row

            '~~> Get The cell Address
            MsgBox .Offset(1, 0).SpecialCells(xlCellTypeVisible).Cells(1, 1).Address

            '~~> Get the Date
            Sheets("Log").Cells(2, "AF").Value = _
            .Offset(1, 0).SpecialCells(xlCellTypeVisible).Cells(1, 1).Value
        End With

        '~~> Remove any filters
        .AutoFilterMode = False
    End With
End Sub

Да то же самое. Большое спасибо.

rozario_k 17.04.2018 13:35

Другие вопросы по теме