Мне нужен макрос, который должен фильтровать столбец и извлекать требуемое значение даты вместе с позицией ячейки (например, «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
Также Dim Date As String Дата - зарезервированное слово. вы можете использовать это так
Слишком много ошибок ... Criterial: - это опечатка? Должен быть Criteria1
Также String не может быть листом Date = Sheets("alldata"), если вы определяете переменную как String.
Если ваши даты находятся в столбце A, то как можно поставить дату в столбце W? say "4/14/2017" cell position "W7"... Исправьте свой вопрос, прежде чем мы сможем дать вам соответствующий ответ ...
Код выполняется, но значение даты не копируется, а остается пустой ячейкой.
Не исключено, что код, который вы разместили выше, работает. он даже не запустится. В нем так много ошибок
Да, я согласен с тем, что есть ошибка, и у меня нет особых знаний в области написания макросов. так что, ребята, пожалуйста, помогите мне с простым кодом для извлечения информации, которая мне нужна.
Вы хотите отфильтровать дату и вернуть номер строки или адрес этой ячейки?
Да, пожалуйста, посмотрите картинку, которую я прикрепил, надеюсь, она даст вам четкое представление о том, что мне нужно. 1. Мне нужно снять галочку "# значение!" путем применения фильтров к столбцу даты 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
Да то же самое. Большое спасибо.
Этот синтаксис
Rows("3:3").Select.AutoFilter, а также ваша следующая строка недействительны. Рекомендую прочитать Как избежать использования Select в Excel VBA. И всегда сообщайте, что не так с вашим кодом. Были ли ошибки и какие.