Страницы: 1
RSS
Поиск данных на листе с помощью MATCH на VBA
 
Задача:
 В опеределенной заранее известной строке листе пробиты даты, причем в виду пользовательской "ответственности" в этой же строке может быть все, что угодно.
Необходимо:
 Найти столбец (его номер), в котором находится дата (переданная через параметр) на VBA.
Мое решение следующее
Код
 WorksheetFunction.IfError(WorksheetFunction.Match("29.06.2016", Rows(2), 0), 0) 

Иногда (на некоторых листах) работает нормально, а на других выдается ошибка 1004
Код
"Unable to get the Match property of the WorksheetFunction class"
Подскажите пожалуйста как победить и/или иной лучший способ поиска номера нужного столбца на VBA?
 
Метод .Find ?
Согласие есть продукт при полном непротивлении сторон
 
Код
Вариант 1.
    On Error Resume Next
        Cells(1).Value = WorksheetFunction.IfError(WorksheetFunction.Match("29.06.2016", Rows(2), 0), 0)
    If Err.Number <> 0 Then Cells(1).Value = 0
    On Error GoTo 0
----------------------------------------------------
Вариант 2.
    If WorksheetFunction.CountIfs(Rows(2), "29.06.2016") Then
        Cells(1).Value = WorksheetFunction.IfError(WorksheetFunction.Match("29.06.2016", Rows(2), 0), 0)
    Else
        Cells(1).Value = 0
    End If
 
Во вложении файл, в котором ни первый вариант ни второй не работают или работают не так как надо, т.е. данная дата на листе есть, а результат работы кода 0
Изменено: e_artem - 03.10.2016 15:16:32
 
Цитата
e_artem написал: Во вложении файл, в котором ни первый вариант ни второй не работают
В Вашем файле вообще нет никаких макросов. Что там должно  работать?
Согласие есть продукт при полном непротивлении сторон
 
А Вы нас не тролите?

Во-первых, утверждаете, что код VBA не работает, и прикладываете файл "*.xlsx". Тут с Вами сложно спорить, VBA в таких файлах работать не будет.
Во-вторых, утверждаете, что "...данная дата на листе есть". Дата "29.09.2016" на листе действительно есть, но ни один MATCH её не признает как  "29.06.2016".

Как бы то ни было, пример с решением во вложении.
 
Прошу прощения, что не написал.... У меня не получилось прикрепить в форум ни xlsm ни xlsb файл. Прикрепился только xlsx.
Да, действительно, MATCH не понимает эту дату как таковую, и я не смог разобраться почему.
В итоге, я сделал так (переместил все в массив и его перебрал циклом)
Код
Dim Dt As Variant
Dt = Rows("2:2")
For i=1 to ...
Хотя этот подход не отличается особой интелигентостью решения (по эффективности исполнения кода)
Не могли бы вы прямо в форум кунить код из прикрепленного файла, не могу скачать его (политика инф. без.)?
Спасибо
 
Код
Sub aaaa()
    Dim d As Integer
    On Error Resume Next
        d = WorksheetFunction.Match(CLng(DateValue("29.06.2016")), Rows(2), 0)
    If Err.Number <> 0 Then d = 0
    On Error GoTo 0
    
    MsgBox ("Столбец " & d)
End Sub

Изменено: МатросНаЗебре - 03.10.2016 16:52:15
 
Теперь понятно, нужно было завернуть в фантик нормализующими функциями! Спасибо.
P.S.
Поковыряюсь еще, кто его знает как далеко может зайти пользовательская выдумка по заполнению диапазона из второй строки.
Страницы: 1
Читают тему
Наверх