Как вывести диапазон (или номера строк) формулы в указанной ячейке? - PullRequest
0 голосов
/ 21 января 2020

Закончил пару часов поиска и так и не нашел то, что искал. Я обычно ищу такие вещи, как «извлечь значение диапазона из формулы» и т.д. c, но это не дает мне того, что мне нужно. Я даже просмотрел раздел «Похожие вопросы», набирая название.

Я полностью полагаюсь на поиск помощи в написании фрагментов VBA, и до сих пор у меня все получалось.

Что я пытаюсь сделать:

ОК. Я поясню, что я пытаюсь сделать в соответствии с предложением от Pᴇʜ

  1. У меня есть лист с тысячами строк данных (от 10 до 30 тысяч строк)
  2. Предыдущий сотрудник прошел их вручную и вручную ввел строки Avg, Min, Max, Std Dev между необработанными данными. Количество строк, рассчитанное выше, не всегда было согласованным (иногда 60 строк, иногда 35 и т. Д. c)
  3. Я ищу нижнюю или конечную строку, выполняя поиск текста "Avg". Это хорошо работает. Просто найдите ячейку с помощью «AVG», затем переместитесь на 1 ячейку вверх, и это мое время окончания.
  4. Пока что я не могу сделать, это найти строку START (используя циклы, потому что есть МНОГИЕ МНОГИЕ из них 30, 40, 50 для каждого листа. И, вероятно, 60 листов. Поэтому было бы неэффективно делать это вручную)

  5. Единственный способ, которым это можно сделать надежно, - это использовать что доступно, что является формулой - (например, =AVERAGE(C50:C110)). Я всегда буду выбирать формулу AVERAGE, и это всегда один набор диапазонов, а не несколько наборов (для каждого примера).

  6. Как я уже говорил, мне нужно извлечь начальную строку из этой формулы и вернуть ее так я могу использовать его как-то, чтобы указать, какую ячейку копировать и вставлять, и делать это в al oop снова и снова для каждого набора данных.

Надеюсь, это прояснит мою ситуацию. Я пытался не вдаваться в подробности, но, оглядываясь назад, думаю, это была не самая лучшая идея.

Прошу прощения.

Ссылка Scott_Craner на ответ arcadeprecint должна работать. Мне просто нужно изменить его для работы с циклами.

Советы?

1 Ответ

3 голосов
/ 21 января 2020

Если ячейка A1 содержит формулу =AVERAGE(C50:C110), то

Debug.Print Range("A1").Precedents.Address(RowAbsolute:=False, ColumnAbsolute:=False)

вернет C50:C110. Если есть больше прецедентных ячеек, адреса разделяются запятыми, например, =AVERAGE(C50:C110)+B5 приводит к C50:C110,B5.

В качестве альтернативы вы можете l oop через области прецедентов, чтобы получить все адреса отдельно.

Dim iArea As Range
For Each iArea In Range("A1").Precedents
    Debug.Print iArea.Address(RowAbsolute:=False, ColumnAbsolute:=False)
Next iArea 

Чтобы получить начальную и конечную строку прецедентного адреса, вы можете просто выполнить некоторые вычисления строки:

Dim rng As Range
Set rng = Range("YourAvrCell")

Debug.Print rng.Precedents.Address(RowAbsolute:=False, ColumnAbsolute:=False)

Debug.Print rng.Precedents.Row
Debug.Print rng.Precedents.Rows.Count + r.Precedents.Row - 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...