2015-12-05 5 views
2

Я создаю приложение для работы с электронными таблицами, которое потребует от пользователя заполнения различных разделов входного листа. Для того, чтобы выделить эти разделы в логические средства, я использую заголовки и суб заголовки, как показано ниже:Именованные диапазоны Excel для создания добавочных заголовков и подзаголовков

Image of input sheet

Если у меня есть много заголовков, будет значительное количество ручной работы в нумерации заголовков , Я попытался автоматизировать процесс, создав нужный диапазон Header1, который соответствует серым заголовкам на рисунке ниже. Таким образом, в ячейках A2 и A11 формула равна =Header1. Формула в названном диапазоне Header1 является:

IF(COUNTA(INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()))))=0,0,INDEX(INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()))),MATCH(ROW(INDIRECT(ADDRESS(ROW()-1,COLUMN()))),INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()))),TRUE)))+1

В основном формула подсчитывает все значения в столбце А и добавляет 1 на. Другими словами, он красиво увеличивается каждый раз, когда вы вызываете Header1 в своей камере, независимо от того, на каком листе вы находитесь (отсюда и использование INDIRECT). Только частью жесткого кодирования является отправной клеткой, которая является A1 и я поставил 0 в том, что таким образом он обнаруживает, чтобы начать с 1

Моим вопрос - Подобным же образом, как я достиг Инкрементирование заголовков используя именованные диапазоны, как я могу это сделать для заголовков sub? В приведенной выше картинке показан эффект, который я пытаюсь достичь (например, 2.1, 2.2), однако я хочу, чтобы это было автоматически, просто поместив формулу =Header2 в ячейку, например.

EDIT - я получил, насколько формуле:

=SUM(INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()-1)))) & "." & MAX(1,COUNTA(INDEX(INDIRECT(CONCATENATE("$B$1",":",ADDRESS(ROW()-1,COLUMN()))),MATCH(SUM(INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()))))-1,INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()-1))),FALSE)):INDIRECT(ADDRESS(ROW()-1,COLUMN()))))

... который работает при помещении в качестве формулы в ячейке, но не работает, когда используется в имени ассортимент. Странный!

+0

Я думаю, что у меня есть подход, но я не совсем понимаю, что именно вы хотите сделать. У вас есть электронная таблица, которая содержит много данных, и вы хотите вставить заголовки? Можете ли вы показать образец своего «входного» листа? Если это не так, добавьте дополнительный комментарий, чтобы более четко сказать, что вы хотите сделать. – SezMe

+0

Я был более явным. Входной лист не относится к вопросу, однако –

+0

Это так. Каковы данные? Нумерация только? Целые? Смешанные? Решение, которое преодолевает ваши проблемы, зависит от данных. Создаете ли вы заголовок перед загрузкой данных? Если это так, проблему легко решить.Вы должны быть более конкретными, прежде чем помощь может быть предложена. – SezMe

ответ

1

Полезная идея, используя формулу Defined Names. Однако ваша формула сильно изменчива.

Предложите, чтобы создать два определенных имен на уровне рабочей книги (масштаб) следующим образом:

  1. именованных _Hdr(изменить при необходимости) со следующей формулой:

    =IF(COLUMN() <> 1, "", 1 
    + MAX(INDEX(!$A:$A, 1) : INDEX(!$A:$A, - 1 + ROW()))) 
    
  2. Именовано _Sub(при необходимости изменить) по следующей формуле:

    =IF(COLUMN() <> 2, "", 0.01 
    + IF(MAX(INDEX(!$A:$A, 1) : INDEX(!$A:$A, - 1 + ROW())) 
    > MAX(INDEX(!$B:$B, 1) : INDEX(!$B:$B, - 1 + ROW())), 
    MAX(INDEX(!$A:$A, 1) : INDEX(!$A:$A, - 1 + ROW())), 
    MAX(INDEX(!$B:$B, 1) : INDEX(!$B:$B, - 1 + ROW())))) 
    

Используйте 0.1, если подпункты меньше, чем 10, если выше, но менее 100 Использование 0.01 (при необходимости отрегулировать)

Edit: Добавить ! в диапазоне столбцов в формулах, чтобы гарантировать, что ссылки будут автоматически обновляться до соответствующего Sheet, где используется эта формула.

Вышеприведенные формулы разбиты на несколько строк, чтобы облегчить чтение и понимание, затем введите одну строчку при создании имен.

предполагают также, чтобы скрыть Define Names(т.е. Visible = False) для того, чтобы избежать формул быть случайно изменены.

С вышеупомянутыми именами:

  • Там нет необходимости вводить ноль в строке 1.
  • формулы работают с цифрами, игнорируя любые ярлыки.
  • Они проверяют первое, что формула вводится в ожидаемом колонке (т.е. _Hdr и _Sub столбцы 1 и 2 соответственно).
  • Поскольку формулы работают с числами, они получают номер MAX для каждого столбца и добавляют 1 или 0.1 для генерации следующего номера.
  • Формулы не являются летучими (не используется INDIRECT).
  • Они используют функцию INDEX для генерации требуемых диапазонов.
+0

Это замечательно. Выполняется полностью, как вы описали. Единственная проблема, которую я обнаружил, заключается в том, что если я нахожусь в подзаголовке '1.9', следующий подзаголовок будет' 2.0', а не '1.10' –

+0

. Я вижу, нет упоминания о том, что есть более 9 подпунктов. Но это не проблема. Просто сделайте это, вместо добавления '0.1' добавьте' 0.01'. Первый подпункт должен быть «X.01» вместо «X.1», соответственно обновлять, если имеется более 99 подпунктов ... Форматируйте свои ячейки соответственно. Если это решает вашу проблему, пожалуйста, примите ответ и помогите нам сохранить сайт в чистоте. спасибо ... – EEM

+0

см. отредактированный пост ... – EEM

Смежные вопросы