Страницы: 1 2 След.
RSS
Автоматическая нумерация строк, устойчивая к сортировке
 
Всем привет.  
Нужны идеи о том, как в excel создать identity столбец. То есть столбец, автоматически заполняемый последовательными номерами записей.  
Решения типа "=R[-1]+1" и "=СТРОКА()-1" не подходят из-за того, что при сортировке данных номера, создаваемые этими формулами, остаются как были и перестают соответствовать своим записям.
Спасибо!
 
{quote}{login=Jao}{date=31.05.2010 11:26}{thema=Автоматическая нумерация строк, устойчивая к сортировке}{post}Всем привет.  
Нужны идеи о том, как в excel создать identity столбец. То есть столбец, автоматически заполняемый последовательными номерами записей.  
Решения типа "=R[-1]+1" и "=СТРОКА()-1" не подходят из-за того, что при сортировке данных номера, создаваемые этими формулами, остаются как были и перестают соответствовать своим записям.
Спасибо!{/post}{/quote}  
 а как данные заполняться будут через форму или в лист хотя в любом случае надо макросом да и ваш пример в каком столбце ид
Спасибо
 
Private Sub Worksheet_Change(ByVal Target As Range)  
If Not Intersect(Target, [B:B]) Is Nothing _
      Then  
      Dim ilastrow As Long  
   With Sheets("Лист1")  
       ilastrow = .Cells(Rows.Count, 2).End(xlUp).Row  
       .Cells(ilastrow, 1) = Val(.Cells(ilastrow - 1, 1)) + 1  
       End With  
      End If  
End Sub  
в Лист1, id первый столбец, событие во втором
Спасибо
 
{quote}{login=Jao}{date=31.05.2010 11:26}{thema=Автоматическая нумерация строк, устойчивая к сортировке}{post}  
Нужны идеи о том, как в excel создать identity столбец.{/post}{/quote}  
Иногда возможна привязка к данным. Покажите кусочек.
 
бд начинается с первой строки.  
нет файла нет точного решения
Спасибо
 
замените 7 строку кода  
.Cells(ilastrow, 1) = Application.Max(Range("A:A")) + 1  
забыл про сортировку
Спасибо
 
Всем привет!  
R Dmitry  
, простите меня за непрошеное вторжение. Но , если можно ответить.  
Что нужно добавить в этот макрос, чтобы плюс к тому что есть, нумерпция строк не нарушалась при удалении строк?  
Спасибо!
 
{quote}{login=R Dmitry}{date=01.06.2010 12:36}{thema=1}{post}бд начинается с первой строки.  
нет файла нет точного решения{/post}{/quote}  
Да дело-то не в конкретном файле. Часто встречается задачи, когда приходится использовать айдишники для имитации select запросов. Типа вот такая формула:  
"=VLOOKUP(MAX((condition1)*(condition2)*id),range,column,true)". Она позволяет произвести поиск одной записи в таблице по определенным критериям и получить ее id, затем получить содержимое другого столбца той же таблицы по этому id.    
Подобный подход я использую во многих книгах excel 2007 совместно с таблицами.  
Но! Приходится для таких таблиц выключать автофильтр, ибо при сортировке связь между записью и айдишником теряется.
 
почему теряется? если это не формула, а константа, то никак она потеряться не может, сортировка переставляет целые строки таблицы, если вы не зададите другое поведение..
Живи и дай жить..
 
{quote}{login=R Dmitry}{date=01.06.2010 12:33}{thema=Re: Re: Автоматическая нумерация строк, устойчивая к сортировке}{post}Private Sub Worksheet_Change(ByVal Target As Range)  
If Not Intersect(Target, [B:B]) Is Nothing _
      Then  
      Dim ilastrow As Long  
   With Sheets("Лист1")  
       ilastrow = .Cells(Rows.Count, 2).End(xlUp).Row  
       .Cells(ilastrow, 1) = Val(.Cells(ilastrow - 1, 1)) + 1  
       End With  
      End If  
End Sub  
в Лист1, id первый столбец, событие во втором{/post}{/quote}  
 
Макрос - это, конечно, хорошо. Делал макрос, работавщий на уровне всей книги и обслуживавший в ней все таблицы, в которых встречается столбец с определенным именем ("#"). НО!  
 
Когда макрос записывает значение ячейки, undo history обнуляется. Что неприемлемо для пользователя. Представьте, пользователь вводит данные, используя TAB, и каждый раз, когда создается новая строка и срабатывает макрос, отмена последних действий становится невозможна. :(  
 
Еще пробовал написать макрофункцию, которая использует CustomProperties листа, добавляя в них новое свойство (аналогично базам данных). При каждом обращении к ней эта функция увеличивает значение такого свойства на 1 и возвращает его. Работает. НО!  
 
При добавлении новой строки excel пересчитывает все формулы столбца с этой функцией и получается, что айдишники каждый раз раздаются заново. :(((
 
{quote}{login=слэн}{date=01.06.2010 10:02}{thema=}{post}почему теряется? если это не формула, а константа, то никак она потеряться не может, сортировка переставляет целые строки таблицы, если вы не зададите другое поведение..{/post}{/quote}  
 
Константа раздается макросом, о проблеме макроса читайте мой предыдущий ответ.
 
Уважаемые господа!  
Я ищу решение не для конкретной задачи, а обощенное. Такое, которое потом можно перенести в надстройку и оно будет работать везде.  
Поэтому код, котором зашиты имена листов, адреса диапазонов и другие привязки (исключая те, которые станут несложным правилом, например название identity столбца таблицы должно быть id) не подходит.  
Спасибо!
 
{quote}{login=Jao}{date=01.06.2010 10:25}{thema=Дополнение}{post}Уважаемые господа!  
Я ищу решение не для конкретной задачи, а обощенное. Такое, которое потом можно перенести в надстройку и оно будет работать везде.  
Поэтому код, котором зашиты имена листов, адреса диапазонов и другие привязки (исключая те, которые станут несложным правилом, например название identity столбца таблицы должно быть id) не подходит.  
Спасибо!{/post}{/quote}  
я сомневаюсь что получиться сделать надстройку универсальной, понимаете диапазон должен быть либо конкретно в определенном столбце либо именным, а если  на разных страницах и в одном файле то имя не может быть одинаковым,остается привязаться к столбцу, лист можно указать активный а не определенный, но всегда ли необходимо актировать макрос по одному или тому же событию в определенном диапазоне?  
Я никогда не использую проставление ID как в данном примере наилучшим решением присвоением идентификационного номера я считаю заполнения данных через формы.  
Какие - б золотые ручки не были у пользователя это ручки которые "никогда ни чего не трогали все само удалилось"  
поэтому открытый доступ к данным должен быть ограничен.  
это мое мнение
Спасибо
 
При добавлении новой строки excel пересчитывает все формулы столбца с этой функцией и получается, что айдишники каждый раз раздаются заново------  
 
 
я не знаю что у вас за бд при которой меняются ид при добавлении строки.  
И вообще если вы используете excel как бд, то лучше данные просматривать через сводную, там те же фильтры, те же данные, но бд нерушима.
Спасибо
 
Если после сортировки значения столбца меняются - это уже не ID. Это просто порядковый номер.
 
{quote}{login=Jao}{date=01.06.2010 09:55}{thema=Re: 1}{post}  
Да дело-то не в конкретном файле. Часто встречается задачи, когда приходится использовать айдишники для имитации select запросов. Типа вот такая формула:  
"=VLOOKUP(MAX((condition1)*(condition2)*id),range,column,true)". Она позволяет произвести поиск одной записи в таблице по определенным критериям и получить ее id, затем получить содержимое другого столбца той же таблицы по этому id.    
Подобный подход я использую во многих книгах excel 2007 совместно с таблицами.  
Но! Приходится для таких таблиц выключать автофильтр, ибо при сортировке связь между записью и айдишником теряется.{/post}{/quote}  
 
Вот пример для таблиц 2007. добавляйте данные в Столбец2 под таблицей
 
{quote}{login=Михаил}{date=01.06.2010 08:49}{thema=Re: Re: 1}{post}{quote}{login=Jao}{date=01.06.2010 09:55}{thema=Re: 1}{post}  
Да дело-то не в конкретном файле. Часто встречается задачи, когда приходится использовать айдишники для имитации select запросов. Типа вот такая формула:  
"=VLOOKUP(MAX((condition1)*(condition2)*id),range,column,true)". Она позволяет произвести поиск одной записи в таблице по определенным критериям и получить ее id, затем получить содержимое другого столбца той же таблицы по этому id.    
Подобный подход я использую во многих книгах excel 2007 совместно с таблицами.  
Но! Приходится для таких таблиц выключать автофильтр, ибо при сортировке связь между записью и айдишником теряется.{/post}{/quote}  
 
Вот пример для таблиц 2007. добавляйте данные в Столбец2 под таблицей{/post}{/quote}  
супер!
Спасибо
 
Кто подскажет как реализована функция протягивания столбцов и строк с автоматической нумерацией в примере от Михаила. Не могу понять как задан массив, в диспетчере имен ничего такого нет, может не там смотрю? Спасибо!
 
Использованы свойства автоподстановки формул в таблицах 2007/2010 (или списках 2003).
 
в списках 2003  это тоже, кстати, есть
 
Спасибо, теперь разобрался!
 
А строка()чё разве не прёт?
 
Из всех вариантов автонумерации, МАКС()+1 - самый оптимальный. Все остальные в случае удаления строк дают сбои.
 
Обратно не понял..  
Как строка может сбой давать?..
 
{quote}{login=Serge 007}{date=07.06.2010 07:05}{thema=}{post}Обратно не понял..  
Как строка может сбой давать?..{/post}{/quote}Попробуйте удалить любую строку (корме последней) и потом добавить запись.
 
{quote}{login=}{date=07.06.2010 09:48}{thema=Re: }{post}Попробуйте удалить любую строку (корме последней) и потом добавить запись.{/post}{/quote}Попробовал. Всё отлично работает. Включая и последнюю строку тоже.
 
Имхо, хоть и говорится в топике про базу данных, но удаллять строки из базы?? На какой икс?  
ЗЫ 2 Serge 007  
Вероятно автор имеет ввиду что нумерация должна продолжаться по типу МАКС()+1 без учета наличия некоторых номеров. А СТРОКА() - перенумерует все записи в таблице. только такое вижу объяснение.  
Игорь67
 
Игорь, согласен. Но, даже если и удалять строки, и если это действительно БД, и разговор про ID, то теряется весь смысл. См. моё сообщение от 01.06.2010, 20:43
 

Могу ошибаться, но нашёл вопрос чем то схожим с моим, который задавал некоторое время назад. Мне помогли KL и ZVI, загляните сюда, может подойдёт: <BR>http://www.planetaexcel.ru/forum.php?thread_id=15461

 
{quote}{login=}{date=07.06.2010 04:13}{thema=}{post}ЗЫ 2 Serge 007  
Вероятно автор имеет ввиду что нумерация должна продолжаться по типу МАКС()+1 без учета наличия некоторых номеров. А СТРОКА() - перенумерует все записи в таблице. только такое вижу объяснение.  
Игорь67{/post}{/quote}...Если после сортировки значения столбца меняются - это уже не ID. Это просто порядковый номер...  
 
Не это надо?
Страницы: 1 2 След.
Читают тему
Наверх