Найти все ссылки на ячейку - программирование
Подтвердить что ты не робот

Найти все ссылки на ячейку

У меня есть следующие данные

    -----------------------------------
.      A     B     C

 1    Data  Total  Left
 2    D1     10     5
 3    D2     20    13
 4    D3     30    21
 5   
 6   
 7    =A2   1     
 8    =A3   2
 9    =A4   3
 10   
 11   =A2   4
 12   =A3   5
 13   =A4   6   

    -----------------------------------

Я ищу две вещи конкретно.

Есть ли способ найти все ссылки на ячейку?

Есть ли способ увеличить букву ячейки? т.е. когда я нахожу ссылку A7 (для A2), я хочу получить значение для B7.

4b9b3361

Ответ 1

Для первого вопроса:

Я не думаю, что есть способ найти все ссылки на ячейку, написав формулы Excel. Существует ряд функций поиска, но они не ищут в формулах, а только значения. Таким образом, вы можете выполнить поиск "D1" (значение в A2 в приведенном выше примере) и определить, что A7 содержит "D1". Например, = Match ( "D1", A7: A13) должно указывать значение индекса строки. Такая схема поиска может работать, если значения являются достаточно уникальными, например, значение первичного ключа.

Мне даже было бы трудно, и, возможно, невозможно найти все ссылки, используя VBA, в самом общем случае. Вам придется перебирать ячейки (или следить за изменениями) и анализировать их формулы из текста, чтобы идентифицировать ссылки (yuk!). Если бы вы могли ограничить типы формул ссылками, которые бы помогли много (например, ограничиться просто копией формулы типа = A1 или аналогичной), потому что в общих формулах может быть довольно сложным и они не всегда идентифицируют по имени точную ячейку ссылаясь. Приведем приведенную ниже формулу. Это действительно (в некотором смысле) ссылка на ячейку A8, хотя в ней упоминается A7.


Для второго вопроса

=Offset(A7,0,1)

Вы получите значение в ячейке рядом с A7.

и

=Offset(A7, Match("D1", A7:A11) - 1, 1)

дает значение в ячейке рядом с тем, которое соответствует "D1".

Ответ 2

Есть ли способ найти все ссылки на ячейку?

Выберите область листа, которую вы хотите изучить, и в меню Formulas выберите Trace Precedents. Это покажет, какие ячейки используются в формулах в выбранной области

enter image description here

Это может быть автоматизировано с помощью VBA, если требуется.


Есть ли способ увеличить букву ячейки?

Если вы хотите изменить формулу в ячейке, для которой потребуется VBA.

Если вы имеете в виду что-то еще, требуется больше объяснений.

Ответ 3

Поиск ссылок на ячейку

  • Выберите ячейку, в которой вы хотите найти ссылки
  • Перейдите к FormulasTrace Dependents

Image to clarify instruction 2

Before

After

Каждый раз, когда вы нажимаете Trace Dependents, Excel показывает один уровень глубже (иждивенцы иждивенцев).

After, to full depth

Обратите внимание, что вы можете перейти в другую сторону и найти ячейки для выбранных ссылок на ячейки с помощью Trace Precedents. Вы можете очистить все стрелки с помощью Remove Arrows.


Увеличение буквы ячейки

С учетом ссылки A7 вы можете найти значения других ячеек с формулами =OFFSEET(...) или =INDIRECT(...) и ADDRESS(...).

Для ссылки на ячейку B7 на ссылку A7,

=OFFSET(A7, 0, 1)

или

INDIRECT(ADDRESS(ROW(A2), COLUMN(A2)+1))

Ответ 4

Мне нужно сделать это с помощью С#, поскольку я создаю addin. В любом случае вот мой код:

        Application excelApp;
        try
        {
            excelApp = new Application();

            if (excelApp == null) // Go to catch block if excelApp = null
                throw new Exception();
        }
        catch
        {                
             throw new Models.Exceptions.MsOfficeNotFoundException("Excel");
        }

        excelApp.Visible = visible;

        // add workbook
        var workBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
        // add worksheet
        Worksheet workSheet = (Worksheet)workBook.Worksheets[1];

//затем дайте пользователю заполнить формулы и т.д.

чтобы получить диапазон всех ячеек, на которые ссылаются, например, на ячейку A1:

         (workSheet .Cells[i + 1, 1] as Range).Dependents; //

** Другими словами, искать функцию зависимых **