Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как отключить преобразование цифры с пробелом в цифру? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как отключить преобразование цифры с пробелом в цифру? (Макросы/Sub)
Как отключить преобразование цифры с пробелом в цифру?
pabchek Дата: Среда, 19.10.2016, 17:36 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 145 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте все!
Есть частный случай: индексы при выгрузке из 1С состоят из 2-х знаков, один из которых пробел, другой цифра - например, "1 ". При различных обработках макросом (копирование, resize и т.д.) эти индексы автоматически преобразуются в цифру и теряют пробел. Однако, опять же для частных задач, нужно, чтобы этот пробел сохранялся. В макросах пока делаю первые шаги. Подскажите, плз, как это можно сделать?
К сообщению приложен файл: 3558626.xlsb(13Kb)


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеЗдравствуйте все!
Есть частный случай: индексы при выгрузке из 1С состоят из 2-х знаков, один из которых пробел, другой цифра - например, "1 ". При различных обработках макросом (копирование, resize и т.д.) эти индексы автоматически преобразуются в цифру и теряют пробел. Однако, опять же для частных задач, нужно, чтобы этот пробел сохранялся. В макросах пока делаю первые шаги. Подскажите, плз, как это можно сделать?

Автор - pabchek
Дата добавления - 19.10.2016 в 17:36
_Boroda_ Дата: Среда, 19.10.2016, 17:46 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9347
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Виктор, ты запускаешь макрос преобразования текста в число и жалуешься на то, что почему-то текст преобразуется в числа.
Приведи реальный пример того случая, когда тебе нужен именно текст с пробелом.
Не заметил, что в одном Cells 3, в другом 1

просто копируем обычным копи-пастом (ну или укороченным, как в примере ниже)
[vba]
Код
Sub rrr()
    Cells(1, 1).Resize(9).Copy Cells(1, 3)'.Resize(9)
End Sub
[/vba]

Добавлено
Пост правил раз 5


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВиктор, ты запускаешь макрос преобразования текста в число и жалуешься на то, что почему-то текст преобразуется в числа.
Приведи реальный пример того случая, когда тебе нужен именно текст с пробелом.
Не заметил, что в одном Cells 3, в другом 1

просто копируем обычным копи-пастом (ну или укороченным, как в примере ниже)
[vba]
Код
Sub rrr()
    Cells(1, 1).Resize(9).Copy Cells(1, 3)'.Resize(9)
End Sub
[/vba]

Добавлено
Пост правил раз 5

Автор - _Boroda_
Дата добавления - 19.10.2016 в 17:46
Manyasha Дата: Среда, 19.10.2016, 17:53 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 1586
Репутация: 661 ±
Замечаний: 0% ±

Excel 2007, 2010
Или еще можно формат текстовый установить перед копированием:
[vba]
Код
    Cells(1, 3).Resize(9, 1).NumberFormat = "@"
    Cells(1, 3).Resize(9, 1).Value = Cells(1, 1).Resize(9, 1).Value
[/vba]


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеИли еще можно формат текстовый установить перед копированием:
[vba]
Код
    Cells(1, 3).Resize(9, 1).NumberFormat = "@"
    Cells(1, 3).Resize(9, 1).Value = Cells(1, 1).Resize(9, 1).Value
[/vba]

Автор - Manyasha
Дата добавления - 19.10.2016 в 17:53
Udik Дата: Среда, 19.10.2016, 17:56 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1202
Репутация: 152 ±
Замечаний: 0% ±

Excel 2013
Можно формат ячеек сменить на текстовый
[vba]
Код

Sub пробел_()
Dim rng1 As Range

Set rng1 = Cells(1, 1).Resize(9, 1)
rng1.NumberFormat = "@"

    Cells(1, 3).Resize(9, 1).Value = rng1.Value
End Sub

[/vba]
или каждую ячейку отдельно обрабатывать.
К сообщению приложен файл: 0t.xlsb(15Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Среда, 19.10.2016, 17:59
 
Ответить
СообщениеМожно формат ячеек сменить на текстовый
[vba]
Код

Sub пробел_()
Dim rng1 As Range

Set rng1 = Cells(1, 1).Resize(9, 1)
rng1.NumberFormat = "@"

    Cells(1, 3).Resize(9, 1).Value = rng1.Value
End Sub

[/vba]
или каждую ячейку отдельно обрабатывать.

Автор - Udik
Дата добавления - 19.10.2016 в 17:56
pabchek Дата: Среда, 19.10.2016, 18:09 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 145 ±
Замечаний: 0% ±

Excel 2007
Да, про форматирование думал. От копирования уходил. Оба действия не делал, поскольку обрабатывается больше 600 тыс. строк. Ресайз вроде как самая шустрая операция. Но буду тестировать на скорость. Спасибо всем за ответы!


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеДа, про форматирование думал. От копирования уходил. Оба действия не делал, поскольку обрабатывается больше 600 тыс. строк. Ресайз вроде как самая шустрая операция. Но буду тестировать на скорость. Спасибо всем за ответы!

Автор - pabchek
Дата добавления - 19.10.2016 в 18:09
_Boroda_ Дата: Среда, 19.10.2016, 19:21 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 9347
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
обрабатывается больше 600 тыс. строк. Ресайз вроде как самая шустрая операция.

Ресайз у тебя по-любому будет. И он ваще на перенос не влияет. А на больших объемах вроде лучше копирование, чем приравнивание.
Если уж тестируешь, то вот так еще посмотри
[vba]
Код
    Cells(1, 1).Resize(9, 1).Copy
    Cells(1, 3).Resize(9, 1).PasteSpecial (xlPasteValues)
    Application.CutCopyMode = 0'снимает копирование
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
обрабатывается больше 600 тыс. строк. Ресайз вроде как самая шустрая операция.

Ресайз у тебя по-любому будет. И он ваще на перенос не влияет. А на больших объемах вроде лучше копирование, чем приравнивание.
Если уж тестируешь, то вот так еще посмотри
[vba]
Код
    Cells(1, 1).Resize(9, 1).Copy
    Cells(1, 3).Resize(9, 1).PasteSpecial (xlPasteValues)
    Application.CutCopyMode = 0'снимает копирование
[/vba]

Автор - _Boroda_
Дата добавления - 19.10.2016 в 19:21
pabchek Дата: Четверг, 20.10.2016, 09:43 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 145 ±
Замечаний: 0% ±

Excel 2007
Если уж тестируешь, то вот так еще посмотри

И таки да, получается быстрее и моя проблема решается. Респект!
(Плюсануть пока время не вышло) :(


"Учиться, учиться и еще раз учиться!"
WM: R399923528092


Сообщение отредактировал pabchek - Четверг, 20.10.2016, 09:45
 
Ответить
Сообщение
Если уж тестируешь, то вот так еще посмотри

И таки да, получается быстрее и моя проблема решается. Респект!
(Плюсануть пока время не вышло) :(

Автор - pabchek
Дата добавления - 20.10.2016 в 09:43
pabchek Дата: Четверг, 20.10.2016, 10:27 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 145 ±
Замечаний: 0% ±

Excel 2007
Как по вашему мнению, если известно, что исходный диапазон содержит только значения без формул, лучше ли будет использовать Destination?
[vba]
Код
Cells(1, 1).Resize(9, 1).Copy Destination:=Cells(1, 3)
[/vba]
Эта операция вроде не помещает данные в буфер. И на практике, похоже, быстрее. Может есть подводные камни, которые я не учитываю?


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеКак по вашему мнению, если известно, что исходный диапазон содержит только значения без формул, лучше ли будет использовать Destination?
[vba]
Код
Cells(1, 1).Resize(9, 1).Copy Destination:=Cells(1, 3)
[/vba]
Эта операция вроде не помещает данные в буфер. И на практике, похоже, быстрее. Может есть подводные камни, которые я не учитываю?

Автор - pabchek
Дата добавления - 20.10.2016 в 10:27
SLAVICK Дата: Пятница, 21.10.2016, 08:54 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 1834
Репутация: 613 ±
Замечаний: 0% ±

2007,2010,2013,2016
Может есть подводные камни, которые я не учитываю?

это то же что и
Cells(1, 1).Resize(9).Copy Cells(1, 3)

я всегда пользуюсь
[vba]
Код
.PasteSpecial (xlPasteValues)
[/vba] так на порядок быстрее - проверял неоднократно.
можно код Александра немного упростить:
[vba]
Код
    Cells(1, 1).Resize(9, 1).Copy
    Cells(1, 3).PasteSpecial (xlPasteValues)
[/vba]
т.е. не использовать второй раз Resize. Excel - сам поймет на сколько расширить диапазон. так и проще и ошибок меньше будет.

Кстати:
не касается темы копирования(переноса), но связано с быстродействием.
есть у Excel один баг. Если высота строк - стандартная (15) - то при вставке текста с переносом (например при выгрузке массива) - изменяется высота строк(выполняется автоподбор высоты) - это ооочень сильно тормозит выгрузку из массива, стоит перед этим изменить высоту строк, и выгрузка выполняется в разы быстрее. :D .


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Может есть подводные камни, которые я не учитываю?

это то же что и
Cells(1, 1).Resize(9).Copy Cells(1, 3)

я всегда пользуюсь
[vba]
Код
.PasteSpecial (xlPasteValues)
[/vba] так на порядок быстрее - проверял неоднократно.
можно код Александра немного упростить:
[vba]
Код
    Cells(1, 1).Resize(9, 1).Copy
    Cells(1, 3).PasteSpecial (xlPasteValues)
[/vba]
т.е. не использовать второй раз Resize. Excel - сам поймет на сколько расширить диапазон. так и проще и ошибок меньше будет.

Кстати:
не касается темы копирования(переноса), но связано с быстродействием.
есть у Excel один баг. Если высота строк - стандартная (15) - то при вставке текста с переносом (например при выгрузке массива) - изменяется высота строк(выполняется автоподбор высоты) - это ооочень сильно тормозит выгрузку из массива, стоит перед этим изменить высоту строк, и выгрузка выполняется в разы быстрее. :D .

Автор - SLAVICK
Дата добавления - 21.10.2016 в 08:54
pabchek Дата: Вторник, 01.11.2016, 10:16 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 145 ±
Замечаний: 0% ±

Excel 2007
это то же что и

код Александра немного упростить

Как то не увидел сразу этого сообщения и уже не возвращался, а тут полез память освежить и нате...
Отличные советы - взял на вооружение.
Особенно
изменить высоту строк

Уже оттестировал - эффект капитальный.
Респектище!


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
Сообщение
это то же что и

код Александра немного упростить

Как то не увидел сразу этого сообщения и уже не возвращался, а тут полез память освежить и нате...
Отличные советы - взял на вооружение.
Особенно
изменить высоту строк

Уже оттестировал - эффект капитальный.
Респектище!

Автор - pabchek
Дата добавления - 01.11.2016 в 10:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как отключить преобразование цифры с пробелом в цифру? (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!