У меня есть рабочая тетрадь с 1 до 30 листов. В ячейке H4 я связал формулу:

=[sub.xlsx]Sheet1!$B$2

в листе 1: ячейка H4 формула в ячейке H4 должна быть =[sub.xlsx]Sheet1!$B$2
в листе 2: ячейка H4 формула в ячейке H4 должна быть =[sub.xlsx]Sheet1!$B$3
в листе 3: ячейка H4 формула в ячейке H4 должна быть =[sub.xlsx]Sheet1!$B$4
в листе 4: ячейка H4 формула в ячейке H4 должна быть =[sub.xlsx]Sheet1!$B$5
в листе 5: ячейка H4 формула в ячейке H4 должна быть =[sub.xlsx]Sheet1!$B$6
..и так далее..

..................................

Таким образом, в каждом листе номер ячейки должен изменяться автоматически. Мне не придется нажимать знак = и вводить снова и снова.

3 ответа3

2

В Excel введите Alt+F11, чтобы открыть окно Visual Basic.  Слева щелкните правой кнопкой мыши имя вашей электронной таблицы и выберите InsertModuleModule1 - Code откроется справа.  Вставьте следующее в этом окне:

Function SHEET_NUM()
    SHEET_NUM = Application.Caller.Parent.Index
End Function

Теперь вернитесь к таблице.  Просто для удовольствия, чтобы увидеть, как это работает, введите =SHEET_NUM() в любую ячейку.  Он должен отображать номер листа, на котором он находится.  Итак, введите

=INDIRECT("[sub.xlsx]Sheet1!$B$" & (SHEET_NUM()+1))

в ячейку H4 на каждом листе.  SHEET_NUM()+1 будет оцениваться как 2 на Sheet1 , 3 на Sheet2 и т.д. - другими словами, номер строки, который вы хотите использовать в своей ссылке.  & является оператором сцепления; он объединит постоянную строку "[sub.xlsx]Sheet1!$B$" с вычисленным номером строки, приводя к нужной ссылке.  Функция INDIRECT берет строку, которая выглядит как ссылка, и отменяет ссылки на нее; т.е. он выбирает значение, на которое ссылается.

Несколько предупреждений:

  • Если вы имеете дело с одной книгой (stu.xlsx), ссылающейся на другую (sub.xlsx), вам потребуется открывать вторую книгу всякий раз, когда вы работаете с первой - хотя Excel может ссылаться на данные в закрытой книге, INDIRECT функция не может.  Если это проблема, вы можете выполнить маневр копирования и вставки значений.
  • Вам нужно будет сохранить книгу в виде файла .xlsm и включать макросы каждый раз, когда вы ее открываете.  (Или выполните вышеупомянутый маневр копирования и вставки значений.)
  • AFAICT, рабочим листам присваивается номер при их создании, и их трудно изменить.  В частности, если вы переместите свои листы, они сохранят свои первоначальные номера, что может привести к путанице.  (Но с другой стороны, вы можете переименовать их, не беспокоясь об изменении их номеров.)
1

Следующие шаги должны получить именно ту формулу, которую вы ищете, без VBA:

  1. Выделите все листы, для которых должна отображаться формула (вы можете добавить каждый лист в выделение, удерживая клавишу "Ctrl" и щелкая ее вкладку)
  2. Введите следующую формулу в другую пустую ячейку, возможно, H3:= IF (ВЛЕВО (ВПРАВО (CELL ("имя файла", $ A $ 1), 2), 1)= "t", RIGHT (CELL ("имя файла", $ A $ 1), 1), RIGHT (CELL ("имя файла", $ A $ 1), 2))
  3. Введите следующую формулу в ячейку H4 (заменив H3 на ячейку, которую вы использовали на шаге 2):= "= [sub.xlsx] Sheet1!$ B $ "& Н3+1
  4. Выберите ячейку H4, скопируйте и вставьте значения
  5. Очистите формулу, созданную на шаге 2
  6. Найдите и замените «=» на «=» по всей книге (Ctrl+H для поиска и замены)
  7. Отмените выбор других листов (вы можете удалить каждый лист из выделения, удерживая клавишу "Ctrl" и щелкая ее вкладку)

Не делайте ничего другого между шагами 1 и 7, если вы не знаете, как работать с несколькими выбранными листами.

0

Лучше всего открыть файл sub.xlsx, сгруппировать все 30 листов в stu, вставить одну версию формулы (например, = [sub.xlsx] Sheet1!$ B $ 2 в H4 листа 1 стю), разгруппируйте и затем вручную отрегулируйте H4 в каждом листе сту (кроме того, в который была введена формула, например, в листе 2, замените 2 на 3 и т.д.).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .