powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чего-то не хватает? Vlookup
4 сообщений из 4, страница 1 из 1
Чего-то не хватает? Vlookup
    #34609141
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разложил всё по полочкам, т.к. уже два дня с этим вопросом вожусь.
Может быть надо поменять тип переменных?

Есть папка: C:\Таблицы\
В ней очень много документов вида:
C 01.01.2007 по 18.01.2007.xls
C 01.01.2007 по 21.03.2007.xls
C 01.01.2007 по 03.03.2007.xls
C 01.01.2007 по 15.05.2007.xls
C 01.04.2007 по 08.06.2007.xls
C 01.04.2007 по 21.04.2007.xls
C 01.05.2007 по 29.05.2007.xls
C 01.05.2007 по 01.06.2007.xls
C 01.03.2007 по 13.06.2007.xls
C 01.03.2007 по 18.06.2007.xls
................
В каждом из этих документов меня интересует массив "C4:X450"
Искомое значение находится в первом столбце массива.
Надо:
написать функцию типа VBLOOKUP с тремя переменными:
1. искомое значение (должно совпадать со значением в первом столбце массива)
2. дата1 (первая дата в названии документа)
3. дата2 (вторая дата в названии тогоже документа)
Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function func(ByVal значение As String, ByVal дата1 As String, ByVal дата2 As String)
   Dim sdf As Range
   Dim sdf1 As String
   Dim sdf2 As String
   Dim sdf3 As String
   Dim sdf4 As String
   sdf1 = "'C:\Таблицы\["
   sdf2 = "C "
   sdf3 = " по "
   sdf4 = ".xls]Лист1'!C4:X450"
   sdf = sdf1 + sdf2 + дата1 + sdf3 + дата2 + sdf4
   func = WorksheetFunction.VLookup(значение, sdf,  2 , False)
End Function
Выдаёт, что ошибка в значении! Что не так???
Заранее благодарен.
...
Рейтинг: 0 / 0
Чего-то не хватает? Vlookup
    #34611327
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С ходу могу указать, что раз у вас

Dim sdf As Range

то вот это:

sdf = sdf1 + sdf2 + дата1 + sdf3 + дата2 + sdf4

не имеет смысла и работать не будет. Там по крайней мере нужен оператор Set. К тому же вы строки пытаетесь всунуть в ранг, а не в другие строки. И потом вы их складываете, а не конкатенируете, что также чревато.

Успехов.
...
Рейтинг: 0 / 0
Чего-то не хватает? Vlookup
    #34611391
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чисто технически, устранить ошибку можно, например, так:

Set sdf = ActiveWorkbook.Worksheets(1).Range("A1")
sdf.Value = sdf1 & sdf2 & data1 & sdf3 & data2 & sdf4

Но это не значит, что ее устранение как таковое решит вашу проблему.
...
Рейтинг: 0 / 0
Чего-то не хватает? Vlookup
    #34611591
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть вариант как-то в цикле запускать вот такой вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub func2(ByVal значение As Variant, ByVal дата1 As String, ByVal дата2 As String)
   Dim sdf As String
   Dim sdf1 As String
   Dim sdf2 As String
   Dim sdf3 As String
   Dim sdf4 As String
   sdf1 = "'C:\Таблицы\["
   sdf2 = "C "
   sdf3 = " по "
   sdf4 = ".xls]Лист1'!C4:X450"
   sdf = sdf1 + sdf2 + дата1 + sdf3 + дата2 + sdf4
   
   Debug.Print "=VLookup(" & значение & "," & sdf & ", 2, False)"
   Range("A1").Formula = "=VLookup(" & значение & "," & sdf & ", 2, False)"
   
End Sub
Код: plaintext
1.
2.
Sub sad()
    func2 """Февраль""", "01.03.2007", "18.06.2007"
End Sub
но я ещё не понял как это сделать. В ячейках должны появиться нормальные формулы.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чего-то не хватает? Vlookup
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]