Страницы: 1
RSS
"настоящая" сортировка в Excel'е
 
доброго времени суток всем  
 
я сделал очередное "открытие". нет, гугл с яндексом не отменили, но мои поиски успехом не увенчались.  
ноги открытия выросли вот отсюда: http://www.planetaexcel.ru/forum.php/links.php?thread_id=26297  
 
констатация того факта (со многими доп. проверками), что Экс не отслеживает корректно ссылки для именованных ячеек при сортировке, поразила меня до глубины души. я готов допустить, что это никакой не баг, а, напротив, удобная штука, и её можно как-то по уму использовать, но, находясь в чувствах расстроенных, не могу придумать - как.  
 
одно мне ясно - мне ТАК не надо (может быть, я даже не один такой на белом свете?).    
мне надо, чтобы и до сортировки, и после имя ссылалось на одну и ту же ячейку.  
 
кроме того, я вспомнил стародавние проблемы с "поехавшими" формулами, "просто" ссылающимися на ячейки в сортируемом диапазоне...  
 
и в голове моей щёлкнуло: выходит, что Экс сортирует НЕ ЯЧЕЙКИ. он сортирует ЗНАЧЕНИЯ. но при этом форматы не "едут" - значит, это он отслеживает. а формулы - не считает нужным, видимо. опять же, повторюсь, может быть, это и хорошо. но...  
 
короче.  
я тут сваял на скорую руку небольшой примерчик "настоящей" сортировки. при котором имена продолжают ссылаться туда, куда их сослали и простые формулы не "едут".  
 
есс-но, пример получился примитивный до ужаса - сортирует только один столбец, проверял я его на числах, хотя вроде бы и для текстов должен сгодиться. кроме того, метод сортировки... гм... ну первый пришедший в голову. кажется, он называется "пузырьковым".  
 
уважаемые форумчане, ПОЖАЛУЙСТА, посмотрите примерчик. проверьте - не "загнался" ли я. и, самое главное, подскажите, если кто встречал подобное - есть ли нормальный вариант такой сортировки - по нескольким ключам, разные типы данных, строки/столбцы и т.д.?  
 
а то штука такая нужна, а писать полностью - лень, да и, если честно, боюсь, что мозгов пока не хватит.  
 
вот.  
 
пс. да, я понимаю, что, даже при оптимизированном алгоритме сортировки и отключении обновления экрана + отключении автоматического пересчета формул и т.д. работать это будет медленно. но - иногда стоит принести в жертву скорость. имхо.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Доброе утро! Я думаю, что происходит с именами при ( екселевской) сортировке полезно узнать от ZVI и KL.
 
Спасибо, The_Prist, за понятное разъяснение.
 
{quote}{login=The_Prist}{date=03.04.2011 09:47}{thema=}{post}  
А при сортировке Excel, естественно, перемещает лишь значения, хоть мы и привыкли говорить - ячейки. {/post}{/quote}  
 
не совсем так. следите за форматами - они тоже перемещаются. причем "не просто так", Экс тщательно следит за ними. цвета, шрифты и т.п. "сортируются" вместе с ячейками, а если, к примеру, сортируемый диапазон имеет только внешние полужирные границы, то они так и останутся для диапазона, а не "поедут" вслед за "ячейками".  
 
кстати. нашел у Уокенбаха баг, связанный с сортировкой. к настоящей теме он имеет мало отношения, но сам по себе показался интересным, хоть я и согласен с ним - в реальной жизни нарваться на такой баг вероятность невелика :)  
 
http://spreadsheetpage.com/index.php/oddity/sorting_oddity_bug/
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=The_Prist}{date=03.04.2011 09:47}{thema=}{post}Ячейки нельзя подвинуть...{/post}{/quote}  
почему нельзя? щелкнуть по ячейке, вырезать, перейти на новую позицию, добавить со сдвигом вниз.  
в приложенном примере я так и делал.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Потому что лист Excel представляет собой единое неизменяемое пространство.  
По этой же причине нельзя изменить кол-во строк или столбцов, т.е. удалить или добавить.
 
{quote}{login=Serge 007}{date=03.04.2011 10:52}{thema=}{post}Потому что лист Excel представляет собой единое неизменяемое пространство.  
По этой же причине нельзя изменить кол-во строк или столбцов, т.е. удалить или добавить.{/post}{/quote}  
 
Сергей, а я и не собираюсь менять пространство. мне тоже не нужны "дырки" в листе. я просто хочу поменять местами две конкретные ячейки. так, чтобы ссылки на них остались корректными (простые ссылки, а не диапазоны, конечно). чем это плохо?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=03.04.2011 11:09}{thema=Re: }{post}...чем это плохо?{/post}{/quote}А я разве говорил что это плохо? Я говорил что это невозможно (поменять местами сами ячейки). Я Думаю Дима дал исчерпывающий ответ.
 
{quote}{login=The_Prist}{date=03.04.2011 10:55}{thema=Re: Re: }{post}{quote}{login=ikki}{date=03.04.2011 10:47}{thema=Re: }{post}Давайте мыслить шире - как Вы представляете себе таблицу Excel? Представьте её как двухмерную проекцию. Вы можете вынуть из неё один квадратик, затем другой и поменять их местами, чтобы стуртура не нарушилась? Нет. Ячейка - это хранилище. Хранилище для данных(формат, формула, значение и т.д.). Я думал будет понятно, что я имею ввиду не только значения, но и другие атрибуты ячеек. Да, ячейку можно передвинуть, как мы привыкли об этом говорить. Но подумайте сами - реально ли Вы двигаете именно ячейку или данные в ней?    
При каких-то операциях Excel позволяет переместить ВСЕ данные хранилища, а при каких-то нет. В одно из исключений и входит сортировка. Скорее всего это как раз связано именно со структурой и принципе хранения данных в ячейках.{/post}{/quote}  
 
так и представляю :)  
Дмитрий, ну давайте рассмотрим аналогию - библиотечную картотеку. была беспорядочной, отсортировали "как надо". и до, и после сортировки мне нужна карточка на конкретную книгу. давайте пометим ее красным фломастером. сортируем - и получаем пометку фломастером на другой карточке? всё, что имеется общего у этой, ненужной мне, карточке с той, которая нужна - это то, что они находятся на том же самом месте в картотеке! вы бы стали пользоваться такой картотекой?  
 
а тот факт, что Excel именно так и поступает с нашими данными при сортировке - это НЕ ВСЕГДА хорошо. имхо. возможно, иногда надо именно так. а иногда - так, как хочется мне.    
проблема в том, что вариантов нет, да и не очевидно это всё. я бы даже сказал, что это нелогично. это как вы вернетесь в очередь, из которой уходили, и встанете не за тем человеком, за которым занимали, а на то "место", с которого ушли - были седьмым, и вернулись седьмым. а очередь уже ушла :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
упс...  
глюки с цитированием :(  
 
ответ The_Prist'у:  
 
так и представляю :)  
Дмитрий, ну давайте рассмотрим аналогию - библиотечную картотеку. была беспорядочной, отсортировали "как надо". и до, и после сортировки мне нужна карточка на конкретную книгу. давайте пометим ее красным фломастером. сортируем - и получаем пометку фломастером на другой карточке? всё, что имеется общего у этой, ненужной мне, карточке с той, которая нужна - это то, что они находятся на том же самом месте в картотеке! вы бы стали пользоваться такой картотекой?  
 
а тот факт, что Excel именно так и поступает с нашими данными при сортировке - это НЕ ВСЕГДА хорошо. имхо. возможно, иногда надо именно так. а иногда - так, как хочется мне.    
проблема в том, что вариантов нет, да и не очевидно это всё. я бы даже сказал, что это нелогично. это как вы вернетесь в очередь, из которой уходили, и встанете не за тем человеком, за которым занимали, а на то "место", с которого ушли - были седьмым, и вернулись седьмым. а очередь уже ушла :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=Serge 007}{date=03.04.2011 11:12}{thema=Re: Re: }{post}{quote}{login=ikki}{date=03.04.2011 11:09}{thema=Re: }{post}...чем это плохо?{/post}{/quote}А я разве говорил что это плохо? Я говорил что это невозможно (поменять местами сами ячейки). Я Думаю Дима дал исчерпывающий ответ.{/post}{/quote}  
 
очень даже возможно. процедуру я уже описал выше. пример - в файле. код открыт :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=03.04.2011 11:21}{thema=Re: Re: Re: }{post}  
очень даже возможно. процедуру я уже описал выше. пример - в файле. код открыт :){/post}{/quote}  
Выложите файл в котором порядок столбцов будет такой: ABDCE, а порядок строк такой: 12435.
 
{quote}{login=The_Prist}{date=03.04.2011 11:40}{thema=Re: Re: Re: Re: }{post}{quote}Вы же используете команду Excel - Cut. С чего Вы взяли, что данная команда вырезает прямо ячейку? Она просто помещает ВСЕ данные в буфер и затем удаляет из ячейки данные. Вот и все. А сама ячейка остается на месте.{/post}{/quote}  
 
ну конечно остается!!! куда же ей деваться? :)  
 
но формулы не "едут"! и имена тоже!  
как был именованный диапазон "еее", ссылающийся на желтую ячейку со значением 4, так и остается.    
а в экселевской сортировке как был именованный диапазон "ккк", который ссылался на ячейку F5, так и остается. хотя после сортировки в этой ячейке совершенно другие данные.  
вот и вся разница.  
 
насчет остального...  
есть такая поговорка: "хоть горшком назови, только в печь не ставь".  
мне, как простому юзеру, глубоко пофиг, как это у экса всё внутри устроено и тикает. главное - чтобы результат был нужный. :))
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=Serge 007}{date=03.04.2011 11:39}{thema=Re: Re: Re: Re: }{post}  
Выложите файл в котором порядок столбцов будет такой: ABDCE, а порядок строк такой: 12435.{/post}{/quote}  
 
Сергей, либо вы не хотите меня понять, либо я настолько косноязычен.  
речь шла о другом.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=The_Prist}{date=03.04.2011 11:40}{thema=Re: Re: Re: Re: }{post}Вы же используете команду Excel - Cut. С чего Вы взяли, что данная команда вырезает прямо ячейку? Она просто помещает ВСЕ данные в буфер и затем удаляет из ячейки данные. Вот и все. А сама ячейка остается на месте.{/post}{/quote}  
 
ну конечно остается!!! куда же ей деваться? :)  
 
но - формулы не "едут"! и имена тоже!  
как был именованный диапазон "еее", ссылающийся на желтую ячейку со значением 4, так и остается.    
а в экселевской сортировке как был именованный диапазон "ккк", который ссылался на ячейку F5, так и остается. хотя после сортировки в этой ячейке совершенно другие данные.  
вот и вся разница.  
 
насчет остального...  
есть такая поговорка: "хоть горшком назови, только в печь не ставь".  
мне, как простому юзеру, глубоко пофиг, как это у экса всё внутри устроено и тикает. главное - чтобы результат был нужный. :))
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=The_Prist}{date=03.04.2011 12:06}{thema=Re: Re: Re: Re: Re: Re: }{post}  
А ведь я, кажется, предельно доступно описал, что имел ввиду под "двигать" ячейки. Именно сами ячейки, а не данные в них. А Вы мне пытаетесь доказать, что Вы их двигаете.{/post}{/quote}  
 
The_Prist, прошу прощения, видимо, я выразился неточно.  
это ВЫГЛЯДИТ точно так же, как будто я их двигаю - сохраняются данные, форматирование, а имена и ссылки в любых других ячейках на "двигаемую" автоматически корректируются экселем.  
то есть это не просто работа с буфером, это еще и отслеживание связей на листе и в книге и их корректировка.  
 
при движении только форматов и данных - формулы и ссылки не обновляются.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=03.04.2011 11:48}{thema=Re: Re: Re: Re: Re: }  
Сергей, либо вы не хотите меня понять, либо я настолько косноязычен.  
речь шла о другом.{/post}{/quote}Два человека поняли Ваш вопрос так: "Как переместить ячейки?"  
Ответ обоих: "Никак, это невозможно".  
Если Ваш вопрос всё-таки: "Как переместить ДАННЫЕ из одной ячейки в другую?", то тогда вопрос изначально Вы задали некорректно...
 
{quote}{login=Serge 007}{date=03.04.2011 12:14}{thema=Re: Re: Re: Re: Re: Re: }{post}{quote}{login=ikki}{date=03.04.2011 11:48}{thema=Re: Re: Re: Re: Re: }  
Сергей, либо вы не хотите меня понять, либо я настолько косноязычен.  
речь шла о другом.{/post}{/quote}Два человека поняли Ваш вопрос так: "Как переместить ячейки?"  
Ответ обоих: "Никак, это невозможно".  
Если Ваш вопрос всё-таки: "Как переместить ДАННЫЕ из одной ячейки в другую?", то тогда вопрос изначально Вы задали некорректно...{/post}{/quote}  
 
нет, вопрос другой.    
но, н1аверное, всё равно плохо сформулировал.  
прошу прощения.  
может быть, из моего поста от 12:13 это станет немного яснее.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
млин! что-то глючит у меня браузер :(  
Сергей, ответ Вам:  
 
нет, вопрос другой.    
но, наверное, всё равно плохо сформулировал.  
прошу прощения.  
может быть, из моего поста от 12:13 это станет немного яснее.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=03.04.2011 12:18}{thema=}{post}млин! что-то глючит у меня браузер :(  
{/post}{/quote}Это не браузер, а движок форума.  
Не цитируйте более одной цитаты.
 
{quote}{login=The_Prist}{date=03.04.2011 12:19}{thema=Re: Re: Re: Re: Re: Re: Re: Re: }{post}{quote}{login=ikki}{date=03.04.2011 12:13}{thema=Re: Re: Re: Re: Re: Re: Re: }{post}то есть это не просто работа с буфером, это еще и отслеживание связей на листе и в книге и их корректировка.{/post}{/quote}Это уже на придирки смахивает. Я не думал, что для пояснения мысли о непередвигаемости ячеек должен Вам расписывать принципы действия команды Cut при всех нюансах. Мне подумалось, что простой аналогии хватит для того, чтобы донести, что Вы все же не ячейки двигаете, а лишь меняете данные в них. Ошибся.{/post}{/quote}  
 
да ну какие же это "придирки"???  
совсем даже не "лишь меняете данные". при Cut-Paste я делаю нечто большее.  
меняются все формулы в книге и имена.  
нифига себе "нюансы"!  
 
это как я переехал на новую квартиру, а продолжаю ходить в старую - адрес-то прежний. ну а что? нормально!!!
 
"при Cut-Paste я делаю нечто большее."  
"это как я переехал на новую квартиру, а продолжаю ходить в старую - адрес-то прежний."  
 
Пришли в старую, а там ни мебели, ни белого холодильника, ни чёрного телевизора... - всё переехало на новую. А помещение есть. :-)
 
{quote}{login=Юрий М}{date=03.04.2011 12:42}{thema=}{post}"при Cut-Paste я делаю нечто большее."  
"это как я переехал на новую квартиру, а продолжаю ходить в старую - адрес-то прежний."  
 
Пришли в старую, а там ни мебели, ни белого холодильника, ни чёрного телевизора... - всё переехало на новую. А помещение есть. :-){/post}{/quote}  
 
именно так. вдобавок - еще и семья чужая :)  
но Эксель, видимо, считает это нормальным.
 
{quote}{login=The_Prist}{date=03.04.2011 01:13}{thema=Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: }{post}Я отвечал на вопрос Маугли...{/post}{/quote}  
извините, я этого действительно не заметил.  
прошу прощения, что занял столько вашего времени.  
я свои слова не отрицаю.  
действительно, "ВСЁ" (с).
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Страницы: 1
Читают тему
Наверх