Проблемы с созданием уникального идентификатора на листе Excel - PullRequest
0 голосов
/ 07 августа 2020

У меня есть рабочий лист, созданный для ввода данных пользователей, в котором я создал уникальный SurveyCode (состоит из номера строки + имени файла): введите описание изображения здесь

Вот формула, которую я использовал для генерации SurveyCode:

      =CONCATENATE(ROW(Sheet1!A1),TRIM(LEFT(SUBSTITUTE(MID(CELL("filename",Sheet1!A1),
        FIND("[",CELL("filename",Sheet1!A1))+1,255),".xl",REPT(" ",255)),255)))

Я беру Row () из отдельного Sheet1, потому что если пользователь решит удалить одну из записей в лист, то одна из моих формул SurveyCode не работает, и вместо этого я увижу # REF! ошибку 4ClientSatisfactionSurvey , например

и мои измененные формула будет выглядеть так:

      =CONCATENATE(ROW(#REF!),TRIM(LEFT(SUBSTITUTE(MID(CELL("filename",Sheet1!A6),
         FIND("[",CELL("filename",Sheet1!A6))+1,255),".xl",REPT(" ",255)),255)))

с ROW (#REF!) вместо ROW (A4)

Итак, я решил храните Row () на отдельном листе. Даже когда пользователь решит удалить запись, в этом случае мой SurveyCode все равно будет сохранен.

Но у меня все еще есть другая проблема - если - после удаления записи потенциальный пользователь создаст новую запись - она ​​не будет уникальный, но будет повторять один из предыдущих номеров строк из моего листа 1.

Например - если клиент удалит запись 4ClientSatisfactionSurvey с рабочего листа, а затем добавит новую запись - новую SurveyCode будет = 7ClientSatisfactionSurvey , а не 8ClientSatisfactionSurvey

Я думаю, моя проблема в первой части моей формулы - я не уверен, как правильно сгенерировать уникальный " номер "часть моего SurveyCode.

Пожалуйста, помогите ...

1 Ответ

1 голос
/ 07 августа 2020

Вы хотите использовать динамический диапазон c.

Предположим, ваши данные находятся на Листе 1, столбец A

Щелкните «Диспетчер имен» (вкладка «Формулы» на ленте). Новый "

Имя: myRange Область: Workbook Относится к: =OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!A:A),1)

Это создает диапазон, который автоматически изменяет размеры при добавлении новых данных или удалении строк.

Вы ссылаетесь на ячейки с помощью INDEX(), поэтому на отдельном листе =INDEX(myRange,1) - это первая ячейка =INDEX(myRange,ROW()) - это любая ячейка в соответствующей строке

ВНИМАНИЕ : следите за значениями индекса и используйте условные операторы для перехвата ошибок вне диапазона

ПРЕДУПРЕЖДЕНИЕ : COUNTA() подсчитывает только непустые ячейки, если есть пустые строки, вы должны настроить формулу для их подсчета

ПРИМЕЧАНИЕ : вы можете зафиксировать диапазон до постоянного количества строк, указав вспомогательную ячейку

Пример : если 20 введено в Sheet2!A1 и myRange относится к =OFFSET(Sheet1!$A$1,0,0,Sheet2!$A$1,1), тогда myRange всегда будет строками 1-20 независимо от вставленных или удаленных строк

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...