констатация того факта (со многими доп. проверками), что Экс не отслеживает корректно ссылки для именованных ячеек при сортировке, поразила меня до глубины души. я готов допустить, что это никакой не баг, а, напротив, удобная штука, и её можно как-то по уму использовать, но, находясь в чувствах расстроенных, не могу придумать - как.
одно мне ясно - мне ТАК не надо (может быть, я даже не один такой на белом свете?). мне надо, чтобы и до сортировки, и после имя ссылалось на одну и ту же ячейку.
кроме того, я вспомнил стародавние проблемы с "поехавшими" формулами, "просто" ссылающимися на ячейки в сортируемом диапазоне...
и в голове моей щёлкнуло: выходит, что Экс сортирует НЕ ЯЧЕЙКИ. он сортирует ЗНАЧЕНИЯ. но при этом форматы не "едут" - значит, это он отслеживает. а формулы - не считает нужным, видимо. опять же, повторюсь, может быть, это и хорошо. но...
короче. я тут сваял на скорую руку небольшой примерчик "настоящей" сортировки. при котором имена продолжают ссылаться туда, куда их сослали и простые формулы не "едут".
есс-но, пример получился примитивный до ужаса - сортирует только один столбец, проверял я его на числах, хотя вроде бы и для текстов должен сгодиться. кроме того, метод сортировки... гм... ну первый пришедший в голову. кажется, он называется "пузырьковым".
уважаемые форумчане, ПОЖАЛУЙСТА, посмотрите примерчик. проверьте - не "загнался" ли я. и, самое главное, подскажите, если кто встречал подобное - есть ли нормальный вариант такой сортировки - по нескольким ключам, разные типы данных, строки/столбцы и т.д.?
а то штука такая нужна, а писать полностью - лень, да и, если честно, боюсь, что мозгов пока не хватит.
вот.
пс. да, я понимаю, что, даже при оптимизированном алгоритме сортировки и отключении обновления экрана + отключении автоматического пересчета формул и т.д. работать это будет медленно. но - иногда стоит принести в жертву скорость. имхо.
{quote}{login=The_Prist}{date=03.04.2011 09:47}{thema=}{post} А при сортировке Excel, естественно, перемещает лишь значения, хоть мы и привыкли говорить - ячейки. {/post}{/quote}
не совсем так. следите за форматами - они тоже перемещаются. причем "не просто так", Экс тщательно следит за ними. цвета, шрифты и т.п. "сортируются" вместе с ячейками, а если, к примеру, сортируемый диапазон имеет только внешние полужирные границы, то они так и останутся для диапазона, а не "поедут" вслед за "ячейками".
кстати. нашел у Уокенбаха баг, связанный с сортировкой. к настоящей теме он имеет мало отношения, но сам по себе показался интересным, хоть я и согласен с ним - в реальной жизни нарваться на такой баг вероятность невелика :)
{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 - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
так и представляю :) Дмитрий, ну давайте рассмотрим аналогию - библиотечную картотеку. была беспорядочной, отсортировали "как надо". и до, и после сортировки мне нужна карточка на конкретную книгу. давайте пометим ее красным фломастером. сортируем - и получаем пометку фломастером на другой карточке? всё, что имеется общего у этой, ненужной мне, карточке с той, которая нужна - это то, что они находятся на том же самом месте в картотеке! вы бы стали пользоваться такой картотекой?
а тот факт, что 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 - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
{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 я делаю нечто большее. меняются все формулы в книге и имена. нифига себе "нюансы"!
это как я переехал на новую квартиру, а продолжаю ходить в старую - адрес-то прежний. ну а что? нормально!!!
{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 - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг