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

Вход

Регистрация

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

 

= Мир MS Excel/Копировать значения из буфера - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копировать значения из буфера (Макросы/Sub)
Копировать значения из буфера
rever27 Дата: Вторник, 09.06.2015, 01:08 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Тут скорее 2 вопроса:

1) Нужно значение 1 скопировать и вставить в определенный диапазон.
Я для этого его вписываю в пустую ячейку, а потом копирую
[vba]
Код
    Range("ER5") = 1
     Range("ER5").Copy
[/vba]
Есть ли способ поизящнее?

2)После того, как я копирую это значение, либо задаю переменную X, которая равна 1, мой макрос заканчивается(End Sub). И начинается новый, в который нужно вставить это значение (не спрашивайте почему, для экономии места, это просто пример).
Вопрос: Как перенести результаты значений переменных из первого макроса во второй(в котором первый макрос и прописан), если после окончания макроса буфер отчищается.
 
Ответить
СообщениеТут скорее 2 вопроса:

1) Нужно значение 1 скопировать и вставить в определенный диапазон.
Я для этого его вписываю в пустую ячейку, а потом копирую
[vba]
Код
    Range("ER5") = 1
     Range("ER5").Copy
[/vba]
Есть ли способ поизящнее?

2)После того, как я копирую это значение, либо задаю переменную X, которая равна 1, мой макрос заканчивается(End Sub). И начинается новый, в который нужно вставить это значение (не спрашивайте почему, для экономии места, это просто пример).
Вопрос: Как перенести результаты значений переменных из первого макроса во второй(в котором первый макрос и прописан), если после окончания макроса буфер отчищается.

Автор - rever27
Дата добавления - 09.06.2015 в 01:08
_Boroda_ Дата: Вторник, 09.06.2015, 01:34 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А просто вот так не пойдет?
[vba]
Код
Range("A1:D3")=1
[/vba]
А по второму вопросу - это уже новая тема должна быть.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА просто вот так не пойдет?
[vba]
Код
Range("A1:D3")=1
[/vba]
А по второму вопросу - это уже новая тема должна быть.

Автор - _Boroda_
Дата добавления - 09.06.2015 в 01:34
rever27 Дата: Вторник, 09.06.2015, 12:14 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
_Boroda_, нет, не подойдет. Вот весь макрос:
[vba]
Код
Sub b_Text_to_Number()
       
      Range("ER5") = 1
      Range("ER5").Copy

      Cells(ActiveCell.Row, 17).Select
        
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply
        
End Sub
[/vba]

Суть в том, что при добавлении таблиц в ексель он не всегда переводит значения в число, оставляя его текстом.
По этому поводу нашел в сети информацию только таким способом: Данный диапазон умножать Вставкой на 1, тем самым заменяются значения ячейки на число.
(Руками неудобно)

Новую тему сейчас создам
[moder]Вы лучше файл приложите


Сообщение отредактировал _Boroda_ - Вторник, 09.06.2015, 12:19
 
Ответить
Сообщение_Boroda_, нет, не подойдет. Вот весь макрос:
[vba]
Код
Sub b_Text_to_Number()
       
      Range("ER5") = 1
      Range("ER5").Copy

      Cells(ActiveCell.Row, 17).Select
        
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply
        
End Sub
[/vba]

Суть в том, что при добавлении таблиц в ексель он не всегда переводит значения в число, оставляя его текстом.
По этому поводу нашел в сети информацию только таким способом: Данный диапазон умножать Вставкой на 1, тем самым заменяются значения ячейки на число.
(Руками неудобно)

Новую тему сейчас создам
[moder]Вы лучше файл приложите

Автор - rever27
Дата добавления - 09.06.2015 в 12:14
Manyasha Дата: Вторник, 09.06.2015, 12:19 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
rever27, для диапазона, в котором нужно текст в число преобразовать напишите так:[vba]
Код
Range("A1:A3").Value = Range("A1:A3").Value
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеrever27, для диапазона, в котором нужно текст в число преобразовать напишите так:[vba]
Код
Range("A1:A3").Value = Range("A1:A3").Value
[/vba]

Автор - Manyasha
Дата добавления - 09.06.2015 в 12:19
_Boroda_ Дата: Вторник, 09.06.2015, 12:25 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
он не всегда переводит значения в число, оставляя его текстом

Приведите пример такого безобразия
Сравните Ваш код и последнюю строку
[vba]
Код
Sub b_Text_to_Number()
      Range("a5") = 1
      Range("a5").Copy
      Cells(ActiveCell.Row, 17).PasteSpecial Paste:=xlPasteValues
      Application.CutCopyMode = False
        
      Cells(ActiveCell.Row, 18) = 1
End Sub
[/vba]
Работают оба, но последняя строка как-то покороче, не?
Кстати, уж если так хочется сначала вставлять единицу, потом ее копировать, то
[vba]
Код
    Range("a5") = 1
     Range("a5").Copy Cells(ActiveCell.Row, 17)
[/vba]
И не нужно потом снимать копирование (бегущие черточки вокруг А5)
[vba]
Код
Application.CutCopyMode = False
[/vba]


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

Приведите пример такого безобразия
Сравните Ваш код и последнюю строку
[vba]
Код
Sub b_Text_to_Number()
      Range("a5") = 1
      Range("a5").Copy
      Cells(ActiveCell.Row, 17).PasteSpecial Paste:=xlPasteValues
      Application.CutCopyMode = False
        
      Cells(ActiveCell.Row, 18) = 1
End Sub
[/vba]
Работают оба, но последняя строка как-то покороче, не?
Кстати, уж если так хочется сначала вставлять единицу, потом ее копировать, то
[vba]
Код
    Range("a5") = 1
     Range("a5").Copy Cells(ActiveCell.Row, 17)
[/vba]
И не нужно потом снимать копирование (бегущие черточки вокруг А5)
[vba]
Код
Application.CutCopyMode = False
[/vba]

Автор - _Boroda_
Дата добавления - 09.06.2015 в 12:25
rever27 Дата: Вторник, 09.06.2015, 12:37 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha, ваш метод не работает (
_Boroda_, не совсем понял, что вы хотели сказать? Как избавиться от лишнего Select?

Вот пример мой
К сообщению приложен файл: 7964649.xlsm (14.8 Kb)
 
Ответить
СообщениеManyasha, ваш метод не работает (
_Boroda_, не совсем понял, что вы хотели сказать? Как избавиться от лишнего Select?

Вот пример мой

Автор - rever27
Дата добавления - 09.06.2015 в 12:37
rever27 Дата: Вторник, 09.06.2015, 12:48 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
_Boroda_, Спасибо за функцию копирования, не знал ))

Словами: У меня есть внешние данные, таблица.
Я вставляю их в Ексель. И часто (не всегда) бывает, что ексель видит эти числа как текст. Поэтому приходить правой кнопкой через Формат Ячейки задавать диапазону Числовое значение
Это неудобно. Поэтому я нашел способ с помощью умножения этого диапазона на 1, тем самым он автоматически становиться равним value.
Но хотелось бы не засорять лист этими Единицами, и либо ее держать в памяти, без прописи, потом удаления, либо найти более изящный метод сделать диапазон числовым
 
Ответить
Сообщение_Boroda_, Спасибо за функцию копирования, не знал ))

Словами: У меня есть внешние данные, таблица.
Я вставляю их в Ексель. И часто (не всегда) бывает, что ексель видит эти числа как текст. Поэтому приходить правой кнопкой через Формат Ячейки задавать диапазону Числовое значение
Это неудобно. Поэтому я нашел способ с помощью умножения этого диапазона на 1, тем самым он автоматически становиться равним value.
Но хотелось бы не засорять лист этими Единицами, и либо ее держать в памяти, без прописи, потом удаления, либо найти более изящный метод сделать диапазон числовым

Автор - rever27
Дата добавления - 09.06.2015 в 12:48
Manyasha Дата: Вторник, 09.06.2015, 12:55 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Пробуйте:[vba]
Код
Sub format_()
     Range("B2:B5").NumberFormat = "0"
     Range("B2:B5").Value = Range("B2:B5").Value
End Sub
[/vba]
Можно вместо Range написать Selection, чтобы макрос обрабатывал выделенный диапазон.
К сообщению приложен файл: 7964649_1.xlsm (16.1 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеПробуйте:[vba]
Код
Sub format_()
     Range("B2:B5").NumberFormat = "0"
     Range("B2:B5").Value = Range("B2:B5").Value
End Sub
[/vba]
Можно вместо Range написать Selection, чтобы макрос обрабатывал выделенный диапазон.

Автор - Manyasha
Дата добавления - 09.06.2015 в 12:55
_Boroda_ Дата: Вторник, 09.06.2015, 12:55 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ну так бы сразу и сказали
Запускаете вот это и не нужно ничего никуда копировать. Только диапазон свой поставьте. Можно с запасом
[vba]
Код
Range("b2:c555").FormulaLocal = Range("b2:c555").FormulaLocal
[/vba]

И вот здесь почитайте
http://www.excelworld.ru/forum/3-5329-54217-16-1373268845
Там как раз говорится, что сложение с 0 (что, фактически, то же самое, что и умножению на 1) работает не всегда.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНу так бы сразу и сказали
Запускаете вот это и не нужно ничего никуда копировать. Только диапазон свой поставьте. Можно с запасом
[vba]
Код
Range("b2:c555").FormulaLocal = Range("b2:c555").FormulaLocal
[/vba]

И вот здесь почитайте
http://www.excelworld.ru/forum/3-5329-54217-16-1373268845
Там как раз говорится, что сложение с 0 (что, фактически, то же самое, что и умножению на 1) работает не всегда.

Автор - _Boroda_
Дата добавления - 09.06.2015 в 12:55
rever27 Дата: Вторник, 09.06.2015, 13:14 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha, это вариант хорош, если нужно округление. Мне нужно оставить значения после запятых, как есть.
_Boroda_,
Ничего не понимаю, отказывается работать в книге и все тут
К сообщению приложен файл: 3417866.xlsm (15.1 Kb)
 
Ответить
СообщениеManyasha, это вариант хорош, если нужно округление. Мне нужно оставить значения после запятых, как есть.
_Boroda_,
Ничего не понимаю, отказывается работать в книге и все тут

Автор - rever27
Дата добавления - 09.06.2015 в 13:14
Manyasha Дата: Вторник, 09.06.2015, 13:33 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
rever27, пробуйте еще раз. В файле 2 варианта: от меня и от Александра ( _Boroda_), оба повесила на клавиши.
Перед запуском выделите нужный диапазон.
К сообщению приложен файл: 112233.xlsm (15.4 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеrever27, пробуйте еще раз. В файле 2 варианта: от меня и от Александра ( _Boroda_), оба повесила на клавиши.
Перед запуском выделите нужный диапазон.

Автор - Manyasha
Дата добавления - 09.06.2015 в 13:33
_Boroda_ Дата: Вторник, 09.06.2015, 13:51 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Марин, только лучше реплэйсить не так
[vba]
Код
Selection.Replace ".", ","
[/vba]
а так
[vba]
Код
Selection.Replace ".", "."
[/vba]
Тогда должно работать независимо от установок
Ну или
[vba]
Код
Selection.Replace ".", Application.DecimalSeparator
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМарин, только лучше реплэйсить не так
[vba]
Код
Selection.Replace ".", ","
[/vba]
а так
[vba]
Код
Selection.Replace ".", "."
[/vba]
Тогда должно работать независимо от установок
Ну или
[vba]
Код
Selection.Replace ".", Application.DecimalSeparator
[/vba]

Автор - _Boroda_
Дата добавления - 09.06.2015 в 13:51
rever27 Дата: Вторник, 09.06.2015, 14:38 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Наверное, я не умею изъясняться )
[vba]
Код
    Selection.Replace ".", "."
     Selection.NumberFormat = "0.00"
     Selection.FormulaLocal = Selection.FormulaLocal
[/vba]

это вариант поставит 2 нуля после моих цифр.
У меня же диапазон состоит и из целого числа, и дробного, и процентов.

[vba]
Код
Range("b2:c555").FormulaLocal = Range("b2:c555").FormulaLocal
[/vba]
Этот пример не работает на последнем, приложенном мною образце.

%)
 
Ответить
СообщениеНаверное, я не умею изъясняться )
[vba]
Код
    Selection.Replace ".", "."
     Selection.NumberFormat = "0.00"
     Selection.FormulaLocal = Selection.FormulaLocal
[/vba]

это вариант поставит 2 нуля после моих цифр.
У меня же диапазон состоит и из целого числа, и дробного, и процентов.

[vba]
Код
Range("b2:c555").FormulaLocal = Range("b2:c555").FormulaLocal
[/vba]
Этот пример не работает на последнем, приложенном мною образце.

%)

Автор - rever27
Дата добавления - 09.06.2015 в 14:38
_Boroda_ Дата: Вторник, 09.06.2015, 14:46 | Сообщение № 14
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А Вы диапазоны поменяли?
Вот так у меня работает
[vba]
Код
Sub tt()
     Range("P12:Q18").Replace ".", Application.DecimalSeparator
     Range("P12:Q18").FormulaLocal = Range("P12:Q18").FormulaLocal
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА Вы диапазоны поменяли?
Вот так у меня работает
[vba]
Код
Sub tt()
     Range("P12:Q18").Replace ".", Application.DecimalSeparator
     Range("P12:Q18").FormulaLocal = Range("P12:Q18").FormulaLocal
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 09.06.2015 в 14:46
rever27 Дата: Вторник, 09.06.2015, 15:00 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Никогда не думаю, что мы будем весь день сидеть над такой проблемкой )))))

Вот выложил мой образец с вашей последней формулой. и он не работает.
Диапазон меняющийся
К сообщению приложен файл: 2445573.xlsm (64.0 Kb)
 
Ответить
СообщениеНикогда не думаю, что мы будем весь день сидеть над такой проблемкой )))))

Вот выложил мой образец с вашей последней формулой. и он не работает.
Диапазон меняющийся

Автор - rever27
Дата добавления - 09.06.2015 в 15:00
rever27 Дата: Вторник, 09.06.2015, 16:14 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Нет никакого издевательства. Есть проблема, решение которой я хочу получить у более обычных пользователей.

[vba]
Код
Sub tt()
CurrentStart = ActiveCell.Row
TheEnd = Cells(ActiveCell.Row, 17).End(xlDown).Row

Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).Replace ".", Application.DecimalSeparator
Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).FormulaLocal = Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).FormulaLocal
End Sub
[/vba]

В приложенном мною примере я выложил этот код, с моими Актив Сэллами.
Он не работает, вот я и хочу понять - в чем проблема

Не работает и Ваш вариант со статическим диапазоном для моего примера
[vba]
Код
Sub tt2()
     Range("P40:W50").Replace ".", Application.DecimalSeparator
     Range("P40:W50").FormulaLocal = Range("P40:W50").FormulaLocal
End Sub
[/vba]


Сообщение отредактировал rever27 - Вторник, 09.06.2015, 16:16
 
Ответить
СообщениеНет никакого издевательства. Есть проблема, решение которой я хочу получить у более обычных пользователей.

[vba]
Код
Sub tt()
CurrentStart = ActiveCell.Row
TheEnd = Cells(ActiveCell.Row, 17).End(xlDown).Row

Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).Replace ".", Application.DecimalSeparator
Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).FormulaLocal = Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).FormulaLocal
End Sub
[/vba]

В приложенном мною примере я выложил этот код, с моими Актив Сэллами.
Он не работает, вот я и хочу понять - в чем проблема

Не работает и Ваш вариант со статическим диапазоном для моего примера
[vba]
Код
Sub tt2()
     Range("P40:W50").Replace ".", Application.DecimalSeparator
     Range("P40:W50").FormulaLocal = Range("P40:W50").FormulaLocal
End Sub
[/vba]

Автор - rever27
Дата добавления - 09.06.2015 в 16:14
Manyasha Дата: Вторник, 09.06.2015, 17:08 | Сообщение № 17
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
rever27, вариант с FormulaLocal не будет работать, если формат ячеек текстовый. Либо меняйте вручную, либо в макросе.
Если Вам не нравится числовой (из-за разного количества цифр после запятой), поставьте общий:
[vba]
Код
    With Range("P40:W50")
         .Replace ".", Application.DecimalSeparator
         .NumberFormat = "General"
         .FormulaLocal = Range("P40:W50").FormulaLocal
     End With
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеrever27, вариант с FormulaLocal не будет работать, если формат ячеек текстовый. Либо меняйте вручную, либо в макросе.
Если Вам не нравится числовой (из-за разного количества цифр после запятой), поставьте общий:
[vba]
Код
    With Range("P40:W50")
         .Replace ".", Application.DecimalSeparator
         .NumberFormat = "General"
         .FormulaLocal = Range("P40:W50").FormulaLocal
     End With
[/vba]

Автор - Manyasha
Дата добавления - 09.06.2015 в 17:08
rever27 Дата: Вторник, 09.06.2015, 17:40 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha, _Boroda_, Спасибо большое за помощь! Мыслей оскорбить модераторов не было.
Как я понимаю, мой изначальный вариант был универсальный.

Решил для каждой колонки в выделенном диапазоне задать свое форматирование ячейки.
Получилось:

[vba]
Код
Sub b_Text_to_N2umber()

CurrentStart = ActiveCell.Row
TheEnd = IIf(Cells(ActiveCell.Row, 17).Offset(1) = "", ActiveCell.Row, Cells(ActiveCell.Row, 17).End(xlDown).Row)

Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).Replace ".", Application.DecimalSeparator

Range(Cells(CurrentStart, 16), Cells(TheEnd, 16)).NumberFormat = "0"
Range(Cells(CurrentStart, 17), Cells(TheEnd, 17)).NumberFormat = "0.00"
Range(Cells(CurrentStart, 18), Cells(TheEnd, 18)).NumberFormat = "0"
Range(Cells(CurrentStart, 19), Cells(TheEnd, 19)).NumberFormat = "0.00"
Range(Cells(CurrentStart, 20), Cells(TheEnd, 20)).NumberFormat = "0.0"
Range(Cells(CurrentStart, 21), Cells(TheEnd, 21)).NumberFormat = "0.00"
Range(Cells(CurrentStart, 22), Cells(TheEnd, 22)).NumberFormat = "0.0%"
Range(Cells(CurrentStart, 23), Cells(TheEnd, 23)).NumberFormat = "0.00"

End Sub
[/vba]

либо же можно сократить до:

[vba]
Код
Sub b_Text_to_N2umber()

CurrentStart = ActiveCell.Row
TheEnd = IIf(Cells(ActiveCell.Row, 17).Offset(1) = "", ActiveCell.Row, Cells(ActiveCell.Row, 17).End(xlDown).Row)

Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).Replace ".", Application.DecimalSeparator

With Range(Cells(CurrentStart, 16), Cells(TheEnd, 16))
                 .NumberFormat = "0"
     .Offset(, 1).NumberFormat = "0.00"
     .Offset(, 2).NumberFormat = "0"
     .Offset(, 3).NumberFormat = "0.00"
     .Offset(, 4).NumberFormat = "0.0"
     .Offset(, 5).NumberFormat = "0.00"
     .Offset(, 6).NumberFormat = "0.0%"
     .Offset(, 7).NumberFormat = "0.00"
End With

End Sub
[/vba]

Подскажите, возможно ли еще как то сократить данный макрос?
И я тут не учел .FormulaLocal
Нужен ли он вообще тут и зачем?
 
Ответить
СообщениеManyasha, _Boroda_, Спасибо большое за помощь! Мыслей оскорбить модераторов не было.
Как я понимаю, мой изначальный вариант был универсальный.

Решил для каждой колонки в выделенном диапазоне задать свое форматирование ячейки.
Получилось:

[vba]
Код
Sub b_Text_to_N2umber()

CurrentStart = ActiveCell.Row
TheEnd = IIf(Cells(ActiveCell.Row, 17).Offset(1) = "", ActiveCell.Row, Cells(ActiveCell.Row, 17).End(xlDown).Row)

Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).Replace ".", Application.DecimalSeparator

Range(Cells(CurrentStart, 16), Cells(TheEnd, 16)).NumberFormat = "0"
Range(Cells(CurrentStart, 17), Cells(TheEnd, 17)).NumberFormat = "0.00"
Range(Cells(CurrentStart, 18), Cells(TheEnd, 18)).NumberFormat = "0"
Range(Cells(CurrentStart, 19), Cells(TheEnd, 19)).NumberFormat = "0.00"
Range(Cells(CurrentStart, 20), Cells(TheEnd, 20)).NumberFormat = "0.0"
Range(Cells(CurrentStart, 21), Cells(TheEnd, 21)).NumberFormat = "0.00"
Range(Cells(CurrentStart, 22), Cells(TheEnd, 22)).NumberFormat = "0.0%"
Range(Cells(CurrentStart, 23), Cells(TheEnd, 23)).NumberFormat = "0.00"

End Sub
[/vba]

либо же можно сократить до:

[vba]
Код
Sub b_Text_to_N2umber()

CurrentStart = ActiveCell.Row
TheEnd = IIf(Cells(ActiveCell.Row, 17).Offset(1) = "", ActiveCell.Row, Cells(ActiveCell.Row, 17).End(xlDown).Row)

Range(Cells(CurrentStart, 16), Cells(TheEnd, 23)).Replace ".", Application.DecimalSeparator

With Range(Cells(CurrentStart, 16), Cells(TheEnd, 16))
                 .NumberFormat = "0"
     .Offset(, 1).NumberFormat = "0.00"
     .Offset(, 2).NumberFormat = "0"
     .Offset(, 3).NumberFormat = "0.00"
     .Offset(, 4).NumberFormat = "0.0"
     .Offset(, 5).NumberFormat = "0.00"
     .Offset(, 6).NumberFormat = "0.0%"
     .Offset(, 7).NumberFormat = "0.00"
End With

End Sub
[/vba]

Подскажите, возможно ли еще как то сократить данный макрос?
И я тут не учел .FormulaLocal
Нужен ли он вообще тут и зачем?

Автор - rever27
Дата добавления - 09.06.2015 в 17:40
AndreTM Дата: Среда, 10.06.2015, 10:56 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
А я бы наоборот, макрос бы написал побольше, но другой...
А давайте будем плясать от того, что поменяем входные данные. Ведь бьетесь с тем, что наделал Excel при автоматической копипасте неизвестно чего неизвестно куда... А ведь можно либо проконтролировать процесс импорта, написав собственную процедуру открытия файла - чтения/преобразования - записи на лист; либо предварительно исходные данные выгрузить в такой формат, чтобы он не допускал разночтения при открытии Excel'ем.
Вообще, если хотите быть уверены в достоверности прочитанных данных - контролируйте все этапы процесса, не надо надеяться на автоматику преобразования Excel, ненашенскую логику она использует :)
Это я все к тому, что не надо сначала плодить проблемы, а потом их мужественно решать ))


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА я бы наоборот, макрос бы написал побольше, но другой...
А давайте будем плясать от того, что поменяем входные данные. Ведь бьетесь с тем, что наделал Excel при автоматической копипасте неизвестно чего неизвестно куда... А ведь можно либо проконтролировать процесс импорта, написав собственную процедуру открытия файла - чтения/преобразования - записи на лист; либо предварительно исходные данные выгрузить в такой формат, чтобы он не допускал разночтения при открытии Excel'ем.
Вообще, если хотите быть уверены в достоверности прочитанных данных - контролируйте все этапы процесса, не надо надеяться на автоматику преобразования Excel, ненашенскую логику она использует :)
Это я все к тому, что не надо сначала плодить проблемы, а потом их мужественно решать ))

Автор - AndreTM
Дата добавления - 10.06.2015 в 10:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копировать значения из буфера (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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