VBA, функция MATCH не возвращает правильное значение - PullRequest
2 голосов
/ 29 июня 2011

У меня проблема с вызовом функции Match из кода VBA: она возвращает неправильные значения.У меня есть такая таблица (это пример):

        a               b       c                   d
1   testRange               testValue   
2   01/01/2011 00:00        03/01/2011 00:00    testValue = A4
3   02/01/2011 00:00            
4   03/01/2011 00:00        result from match function  
5   04/01/2011 00:00        3                   testResult = MATCH(C2,A2:A20,1)
6   05/01/2011 00:00            
7   06/01/2011 00:00        testResult  
8   07/01/2011 00:00        9   
9   08/01/2011 00:00            
10  09/01/2011 00:00            
11  10/01/2011 00:00            
12  11/01/2011 00:00            
13  12/01/2011 00:00            
14  13/01/2011 00:00            
15  14/01/2011 00:00            
16  15/01/2011 00:00            
17  16/01/2011 00:00            
18  17/01/2011 00:00            
19  18/01/2011 00:00            
20  19/01/2011 00:00            

диапазон, который я ищу, находится в A1: A20, и я ищу значение, записанное в C2, которое, как вы можетесм. это просто значение диапазона (чтобы убедиться, что значение находится в диапазоне).Я ожидаю, что функция Match вернет число 3, как это происходит при вызове из электронной таблицы (ячейка C5), но функция, вызываемая в VBA, возвращает значение 9 (ячейка C10).Я использовал этот код:

Sub testMatch()
    testRange = Range("A2:A20")
    testValue = Range("C2")
    testResult = Application.WorksheetFunction.Match(testValue, testRange, 1)
    Range("C8") = testResult
End Sub

Я уже пытался преобразовать testValue в Date и Double (решения, предложенные на других форумах), но с Date у меня тот же результат, а с Double я получаю ошибку 1004«Невозможно получить свойство Match класса WorksheetFunctions»

Есть предложения?

Спасибо

1 Ответ

4 голосов
/ 29 июня 2011

Как предлагается на других форумах, вы должны ввести свои переменные (Дата ...) и использовать Option Explicit.

В этом случае ошибка возникает из-за использования дат внутри функции matchпопробуйте это:

Application.WorksheetFunction.Match(CLng(testValue), testRange, 0)

(edit> source: благодаря этому thread )

Я протестировал на вашем примере, и он работает для меня.

С уважением,

Макс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...