Страницы: 1 2 След.
RSS
Макрос: скопировать таблицу на новый лист, и умножить значения таблицы на число.
 
Есть задача. Данные в таблице нужно скопировать на новый лист(таблицу целиком) и умножить числовые значение на число. Нужен хотя бы простенький пример,с остальным я думаю разбирусь. Попытался сам переделать макрос "редизайнер таблиц" из приемов, но добавив умножение на число получил ошибку type mismatch. Нужна ваша помощь.
 
Ауу,люди добрые. Неужели никто не поможет просты примером? Заранее благодарен.
 
Sub Макрос1()  
Sheets("Лист1").Copy After:=Sheets(1)  
With Sheets(2)  
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, 1) _  
= ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, 1) * 2  
Beep  
End With  
End Sub
 
"ActiveSheet." убрать немедля.
 
{quote}{login=k61}{date=22.08.2011 08:10}{thema=re: re: ауу.}{post}"ActiveSheet." убрать немедля.{/post}{/quote}  
 
Спасибо большое. Есть еще один нюанс. Как придать макросу универсальность. Если конкретнее: Я выделяю таблицу(с любым кол-вом строк,кол-во столбцов фиксировано), запускаю макрос и происходят действия,которые вы описали кодом выше. Надеюсь понятно объяснил:)
 
Нет, не понятно. Пример дайте в соответствии с правилами Форума.  
Например, не понятно в какое место нового листа копировать.
 
{quote}{login=k61}{date=22.08.2011 09:09}{thema=re: Надеюсь понятно объяснил:)}{post}Нет, не понятно. Пример дайте в соответствии с правилами Форума.  
Например, не понятно в какое место нового листа копировать.{/post}{/quote}  
 
Пример прикреплю чуть позже(пишу с мобильного устройства). Выделенную таблицу нужно просто скопировать на новый лист и значения умножить на число. Таблица всегда начинается от А1 и уходит вниз. Скопировать на новый лист соответственно нужно точно также)
 
Фальшстарт.  
Макрос от 22.08.2011 08:08 - не работает.
 
Sub Макрос2()  
Selection.Copy  
Sheets.Add  
ActiveSheet.Paste  
For Each яч In Cells.SpecialCells(xlCellTypeConstants, 1)  
Range(яч.Address) = яч * 2  
Next  
End Sub
 
{quote}{login=k61}{date=22.08.2011 10:23}{thema=упс!}{post}Фальшстарт.  
Макрос от 22.08.2011 08:08 - не работает.{/post}{/quote}  
 
Это не страшно. Я готов подождать:)
 
{quote}{login=}{date=22.08.2011 10:46}{thema=Re: упс!}{post}{quote}{login=k61}{date=22.08.2011 10:23}{thema=упс!}{post}Фальшстарт.  
Макрос от 22.08.2011 08:08 - не работает.{/post}{/quote}  
 
Это не страшно. Я готов подождать:){/post}{/quote}  
 
Прикрепляю пример.
 
Ну точно УПС!  
Для чего было отправлять пример через 9 часов после получения решения?  
Не хватило времени попробовать?
 
{quote}{login=RAN}{date=22.08.2011 08:25}{thema=Romanich}{post}Ну точно УПС!  
Для чего было отправлять пример через 9 часов после получения решения?  
Не хватило времени попробовать?{/post}{/quote}  
 
Для того чтобы мне подсказали как сделать макрос более универсальным.Допустим, я выделяю таблицу с любым кол-вом строк. Она копируется на новый лист, цифровые значения умножаются на число. Раньше добавить пример не мог, только что добрался до компьютера:)
 
Selection.Copy  
Sheets.Add  
ActiveSheet.Paste  
Таблица с любым количеством выделенных строк (и столбцов до кучи), копируется на вновь созданный лист.  
For Each яч In Cells.SpecialCells(xlCellTypeConstants, 1)  
Range(яч.Address) = яч * 2  
Next  
Все числовые значения умножаются на 2.  
Что универсалить???
 
Не надобности ради, а интереса для. Как сделать, чтобы макрос спросил на сколько умножить?  
Спасибо.
 
On Error Resume Next  
a = InputBox("На сколько умножить?", "Умножение", 2)  
For Each яч In Cells.SpecialCells(xlCellTypeConstants, 1)  
Range(яч.Address) = яч * a  
Next
 
яч.Value = яч.Value * a
Я сам - дурнее всякого примера! ...
 
Но лучше(быстрей) так:  
Public Sub ssse()  
   On Error Resume Next  
   a = InputBox("На сколько умножить?", "Умножение", 2)  
   For Each яч In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, 1).Areas  
       яч.Value = Evaluate(яч.Address & " * " & a)  
   Next  
End Sub
Я сам - дурнее всякого примера! ...
 
{quote}{login=RAN}{date=22.08.2011 10:26}{thema=}{post}Selection.Copy  
Sheets.Add  
ActiveSheet.Paste  
Таблица с любым количеством выделенных строк (и столбцов до кучи), копируется на вновь созданный лист.  
For Each яч In Cells.SpecialCells(xlCellTypeConstants, 1)  
Range(яч.Address) = яч * 2  
Next  
Все числовые значения умножаются на 2.  
Что универсалить???{/post}{/quote}  
 
На самом деле задачи намного сложнее. Просто я скромный:) Когда-то давно(лет 100 назад) занимался программированием, поэтому главное принцип был нужен(надеюсь остальное осилю)  
1. С копированием вроде разобрался, правда форматирование не сохраняется.Как все таки его сохранить?  
2. На числа умножать научился.  
3. Теперь стоит задача научиться не просто умножать, а вставлять в скопированную таблицу формулу вместо значения, которая ссылается частично на значение из первого листа.  
В итоге должно получится, что в cкопированной таблице значения столбца D из первой таблицы умножаются на число,столбца E из первой таблицы делятся на число, и тд.    
4. Далее из второго листа родится третий лист, которые возьмет значения из второго(опять же через формулу), но это уже по аналогии.
 
Я привел простой пример. Столбцов намного больше, как и строк(3000-5000).Зачем делать одну и ту же работу каждый день часами, если трудозатраты можно свести к минимуму.
 
Еще быстрей:  
Sub www()  
   Dim r As Range, c As Range  
   Set r = ActiveSheet.UsedRange.SpecialCells(2, 1): Set c = ActiveSheet.Cells.SpecialCells(11).Offset(1)  
   c.Value = InputBox("На сколько умножить?", "Умножение", 2): c.Copy  
   r.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply: c.Clear  
   Application.CutCopyMode = False  
End Sub
Я сам - дурнее всякого примера! ...
 
Ещё можно взять диапазон в массив, и перебрать с умножением его, потом выгрузить на новый лист.  
Причём можно сразу умножить разные столбцы на разные числа, попутно ещё их анализируя.  
Единственное - формулы так не живут, они заменятся на значения.  
Можно брать в массив/ы только столбцы с константами.  
В общем, всё зависит от конкретной задачи.
 
Если уж макрос - формулы зачем? :-)
 
{quote}{login=Юрий М}{date=22.08.2011 11:53}{thema=}{post}Если уж макрос - формулы зачем? :-){/post}{/quote}  
 
Мне нужна обязательно связь с первым листом. При изменении значения в первом листе по формуле во втором пересчитается значение. Только вот формула не вставляется никак(
 
{quote}{login=Romanich}{date=23.08.2011 12:02}{thema=Re: }{post}{quote}{login=Юрий М}{date=22.08.2011 11:53}{thema=}{post}Если уж макрос - формулы зачем? :-){/post}{/quote}Мне нужна обязательно связь с первым листом. При изменении значения в первом листе по формуле во втором пересчитается значение. {/post}{/quote}И что? Считайте в коде, а в ячейку итоговое значение.
 
{quote}{login=Юрий М}{date=23.08.2011 12:14}{thema=Re: Re: }{post}{quote}{login=Romanich}{date=23.08.2011 12:02}{thema=Re: }{post}{quote}{login=Юрий М}{date=22.08.2011 11:53}{thema=}{post}Если уж макрос - формулы зачем? :-){/post}{/quote}Мне нужна обязательно связь с первым листом. При изменении значения в первом листе по формуле во втором пересчитается значение. {/post}{/quote}И что? Считайте в коде, а в ячейку итоговое значение.{/post}{/quote}  
 
Вы немного не понимаете. Сгенерированные листы потом будут использоваться другими людьми.Макросами еще раз они пользоваться не будут.У них будет готовый вариант, полностью завязанный на формулах.При изменении значений все пересчитывается само собой по формуле.  
Схема подсчета через код мне понятна, но при изменении значений первого листа например, мне придется удаляться второй и третий лист и применять макрос заново, а это не очень удобно в моей ситуации.
 
>> Только вот формула не вставляется никак  
Понятно. Запишите вставку формулы макрорекордером - потом проанализируйте код.
 
{quote}{login=Юрий М}{date=23.08.2011 12:30}{thema=Re: Re: }{post}>> Только вот формула не вставляется никак  
Понятно. Запишите вставку формулы макрорекордером - потом проанализируйте код.{/post}{/quote}  
 
Спасибо.Попробую. Есть еще один не решенный вопрос. Как скопировать выделенную таблицу с сохраненным форматированием(шрифт, ширина,высота ячеек и т.д.)?:)
 
{quote}{login=Romanich}{date=23.08.2011 12:02}{thema=Re: }{post} Только вот формула не вставляется никак({/post}{/quote}  
А дустом ее, дустом!  
В смысле макрорекордером...-:)
 
>> Есть еще один не решенный вопрос. Как скопировать выделенную таблицу с сохраненным форматированием(шрифт, ширина,высота ячеек и т.д.)?  
 
Проще всего - скопировать целиком лист, а потом убрать "ненужное".
Страницы: 1 2 След.
Читают тему
Наверх