Формула для поиска в диапазоне с заданным листом - VBA

Узнай цену своей работы

Формулировка задачи:

Приветствую! Имеется следующий макрос:
Листинг программы
  1. Function П2УЛ(Массив, ПвСтолбце, ПвСтроке, Индекс, ИмяЛиста)
  2. On Error Resume Next
  3. МассивЛ = Массив.Parent.Name
  4. МассивК = Replace(Массив, МассивЛ, ИмяЛиста)
  5. Set г = МассивК
  6. МассивСтолбец = МассивК.Columns(1)
  7. МассивСтрока = МассивК.Rows(1)
  8. е = Индекс - Индекс
  9. в = Application.WorksheetFunction.Match(ПвСтроке, МассивСтрока, 0)
  10. д = Application.WorksheetFunction.Match(ПвСтолбце, МассивСтолбец, 0)
  11. б = г.Cells(д, в)
  12. П2УЛ = б
  13. End Function
И макрос:
Листинг программы
  1. Function ИмяЛиста(Ячейка) As String
  2. ИмяЛиста = Ячейка.Worksheet.Name
  3. End Function
С помощью макроса "ИмяЛиста" на каждом листе создается столбец/строка с именем текущего листа. Затем создаются ссылки на эти ячейки на другом листе, для каждого листа. Что должна делать формула: В переменной "Массив" изменять имя листа согласно данным из переменной "ИмяЛиста", преобразовав его тем самым в "МассивК". Затем в уже в диапазоне заданном "МассивК" выполнить поиск по переменным "ПвСтолбце" и "ПвСтроке". Переменная "Индекс" нужна для перерасчёта макроса (не всегда отзывается на F9). Формула не работает, в чём причина понять не могу, прошу помочь.
Листинг программы
  1. Function П2УЛ3(ПвСтолбце, ПвСтроке, Индекс, ИмяЛиста)
  2. On Error Resume Next
  3. з = """"
  4. ж = з & ИмяЛиста & з
  5. МассивК = Sheets(ж).[B5:G20]
  6. Set г = МассивК
  7. МассивСтолбец = МассивК.Columns(1)
  8. МассивСтрока = МассивК.Rows(1)
  9. е = Индекс - Индекс
  10. в = Application.WorksheetFunction.Match(ПвСтроке, МассивСтрока, 0)
  11. д = Application.WorksheetFunction.Match(ПвСтолбце, МассивСтолбец, 0)
  12. б = г.Cells(д, в)
  13. П2УЛ3 = б
  14. End FunctionFunction П2УЛ4(ПвСтолбце, ПвСтроке, Индекс, ИмяЛиста As String)
  15. On Error Resume Next
  16. Dim ж As String
  17. и = "B5"
  18. л = "!"
  19. ж = ИмяЛиста & л & и
  20. МассивК = Application.WorksheetFunction.INDIRECT(ж)
  21. Set г = МассивК
  22. МассивСтолбец = МассивК.Columns(1)
  23. МассивСтрока = МассивК.Rows(1)
  24. е = Индекс - Индекс
  25. в = Application.WorksheetFunction.Match(ПвСтроке, МассивСтрока, 0)
  26. д = Application.WorksheetFunction.Match(ПвСтолбце, МассивСтолбец, 0)
  27. б = г.Cells(д, в)
  28. П2УЛ4 = б
  29. End Function

Решение задачи: «Формула для поиска в диапазоне с заданным листом»

textual
Листинг программы
  1. Function П2УЛ5(НомерСтолбцаМассив, НомерСтрокиМассив, ПвСтолбце, ПвСтроке, Индекс, ИмяЛиста)
  2. On Error Resume Next
  3. Dim ж As Integer
  4. ж = ИмяЛиста
  5. Set Лист = Worksheets(ж)
  6. Массив = Лист.Range(Cells(НомерСтрокиМассив, НомерСтолбцаМассив), Cells(7000, 7000))
  7. Set г = Массив
  8. МассивСтолбец = Массив.Columns(1)
  9. МассивСтрока = Массив.Rows(1)
  10. е = Индекс - Индекс
  11. в = Application.WorksheetFunction.Match(ПвСтроке, МассивСтрока, 0)
  12. д = Application.WorksheetFunction.Match(ПвСтолбце, МассивСтолбец, 0)
  13. б = г.Cells(д, в)
  14. П2УЛ5 = б
  15. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы