Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2012, 20:46   #11
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Каюсь Леш, не попробовал. Прочитал справку:"When the data is delimited, this argument is an array of two-element arrays, with each two-element array specifying the conversion options for a particular column." и интересно стало загнать в массив массивов:-) Ну, результат получил.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 09.01.2012, 20:48   #12
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Можно использовать не массив массивов, а обычный двумерный массив:
Код:
Sub Макрос1()
Dim x(0 To 9, 0 To 1), i
For i = 0 To 9
    x(i, 0) = i: x(i, 1) = 1
Next
Selection.TextToColumns Destination:=Selection, DataType:=xlFixedWidth, _
    FieldInfo:=x, TrailingMinusNumbers:=True
End Sub
Использование временных структур (в данном случае массив) иногда целесообразны, но я старюсь обходиться по возможности без них. Это дополнительная нагрузка на комп, а так же, что важнее, место для потенциальной ошибки. А ошибок и так хватает. :)
При подобном подходе потребуется дополнительный цикл, если нужно разнести данные в разные не смежные ячейки (например на разные листы и даже книги). Тогда как в моем примере можно обойтись одним циклом, и нет ограничение на длину слова.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.01.2012, 21:02   #13
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

tae1980, а кто спорит? Выложите свой вариант. Замерьте скорости обработки например 10000 строк(256 символов ограничение на длину строки в Эксе 2003, в других не знаю). Я готов поапплодировать. Это без иронии.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 09.01.2012, 21:16   #14
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
tae1980, а кто спорит? Выложите свой вариант. Замерьте скорости обработки например 10000 строк(256 символов ограничение на длину строки в Эксе 2003, в других не знаю).
А смысл? Результат будет мало отличим. Это больше вопрос школ и стиля программирования. Я уже писал, что стиль у меня "несколько отличный" от победившего сейчас. Так получилось потому, что я учился самостоятельно по советским книгам. Я даже скажу, что горжусь своей небольшой библиотекой, собрать подобной сейчас просто не возможно.
Цитата:
Сообщение от kuklp Посмотреть сообщение
Я готов поапплодировать. Это без иронии.
Эээ... Уже выложил примерный код. Смотри выше.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.01.2012, 21:25   #15
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
А смысл? Результат будет мало отличим.
Я сомневаюсь. Вы собираетесь циклом перебирать диапазон, а в этом цикле еще циклом обрабатывать строку и заполнять ячейки по одной. Покажите. Мой код обработал 20000 строк длиной 208(взял свое сообщение из прошлого поста) симв. за 2,984375 сек.

Код:
Private Sub www()
    Dim a(255), tmp(0, 1), i&, t!
    t = Timer
    For i = 0 To 255
        tmp(0, 0) = i: tmp(0, 1) = 1: a(i) = tmp
    Next
    Selection.TextToColumns Selection, 2, FieldInfo:=a
Debug.Print Timer - t
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 09.01.2012 в 21:32.
kuklp вне форума Ответить с цитированием
Старый 09.01.2012, 21:43   #16
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Я сомневаюсь. Вы собираетесь циклом перебирать диапазон, а в этом цикле еще циклом обрабатывать строку и заполнять ячейки по одной. Покажите. Мой код обработал 20000 строк длиной 208(взял свое сообщение из прошлого поста) симв. за 2,984375 сек.
Не возражаю. Может быть и так. Но предпочитаю знать, что я делаю, и не доверяю всякого разного авто заполнения.
Повторюсь, что если усложнить задачу и разносить данные в разные листы и книги, а так же если потребуется реализовать дополнительную обработку для ряда данных (не для всех), а самое главное доработать в последствии, можно только мой вариант (я уже попадал в подобные ловушки, когда приходилось полностью переписывать процедуры при незначительных изменениях исходной задачи). В нем полная свобода для программиста, именно за счет "ручного" разбора. Да, соглашусь, что это можно в ряде случае рассматривать как недостаток. Но это говорит лишь о том, что конечную реализацию следует выбирать из ходя из конкретной задачи.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.01.2012, 21:52   #17
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Ну, с Вами все ясно. Совет: прежде чем поучать признанных специалистов(я не о себе, о Казанском) попробуйте приобрести хотя бы базовые знания о предмете.
П.С. К чему-то мне вспомнился Ципихович Эндрю...
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 09.01.2012, 22:11   #18
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Ну, с Вами все ясно. Совет: прежде чем поучать признанных специалистов(я не о себе, о Казанском) попробуйте приобрести хотя бы базовые знания о предмете.
П.С. К чему-то мне вспомнился Ципихович Эндрю...
1. Ни кого не поучал, говорил исключительно ИМХО.
2. Ни когда не называл себя профессиональным программистом, как раз наоборот (при чем ни единожды).
3. Касаемо разбора текстовых строк, могу что-то утверждать (это почти единственная подобная тема). Так как занимаюсь этим уже 14 лет, на 6 языках программирования, на двух компьютерных платформах, в 4 операционных системах. Я уже писал, что считаю "текстовый файл лучшей базой данных". За что был несколько "осужден" обществом.
4. Извини, но я не считаю нужным доказывать свои слова, так как они идут как ИМХО. Если ты считаешь мое мнение ошибочным, пропусти мимо ушей и делай как считаешь правильным.
5. В любом случае благодарен за общение.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.01.2012, 22:23   #19
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Спасибо, но что-то не так, разбивает по два столбика через 1, а в десятый вбивает все отсальные цифры
Похоже что-то тут не так. У меня Ваш код работает не так как написано Вами, у Вас не так работает мой ( не говорю, что он оптимален, но работает. Я ВСЕГДА проверяю то, что пишу)
Похоже, пора выложить пример Вашего файла, а то вон уже сколько вариантов предложено и жалко будет, если все это зря только по той простой причине, что не совсем корректно было поставлено условие.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 09.01.2012 в 22:27.
VictorM вне форума Ответить с цитированием
Старый 09.01.2012, 23:45   #20
AllenJ
Пользователь
 
Регистрация: 18.01.2011
Сообщений: 45
По умолчанию

Хм... странно, только сейчас заметил, что макрос неправильно работает с цифрами до десяти без нуля впереди. То есть если 01 - макрос его перенесет в отдельную ячейку и цифра станет просто 1. Но если изначально стоит цифра 1, то он ее приклеет к следующей цифре и будет 12. А ваш макрос видимо наоборот, теряется при виде 0 впереди.
Вот пример прикреплен, изначальный макрос все отлично разбивает, только до 5ой цифры включительно.
И дело в том, что я работаю с цифрами именно вида 01, и мне наруку то, что 0 теряется при использовании макроса (тут просто автоформат экселя срабатывает).
Вложения
Тип файла: rar 1.rar (1.8 Кб, 13 просмотров)

Последний раз редактировалось AllenJ; 09.01.2012 в 23:50.
AllenJ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разбить числовой ряд на отдельные ячейки jhenya-d Microsoft Office Excel 17 10.11.2011 13:43
макрос для разбивки текста на ячейки Ksiaze Microsoft Office Excel 2 24.05.2011 00:49
Макрос разбивки текста rubbi Microsoft Office Word 1 08.11.2010 23:40
Разбить дату на отдельные ячейки ДД ММ ГГ Александр25 Microsoft Office Excel 5 04.03.2010 19:07
как разбить текстовую ячейку на отдельные ячейки? zetrix Microsoft Office Excel 0 31.10.2006 07:46