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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2013, 09:31   #1
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию копирование формул

Здравствуйте!
Подскажите, пожалуйста как скопировать формулу
У меня в столбце по строкам идет формула,
=Лист1!G17
=Лист1!G18
=Лист1!G20
и т.д
т.е. ссылки на разные строки и очень много строк
мне надо копировать формулы, чтобы менялся столбец
=Лист1!H17
=Лист1!H18
=Лист1!H20
копировать на разные листы при этом задавать столбец, а строки оставались те же
Хотелось бы макросом, так как очень много.

Последний раз редактировалось evdss; 18.12.2013 в 09:50.
evdss вне форума Ответить с цитированием
Старый 18.12.2013, 10:04   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Хотелось бы макросом, так как очень много.
Для начала просто включите макрорекордер, сделайте что Вам нужно, посмотрите код.
Потом можно будет подредактировать получившийся макрос.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 18.12.2013, 10:14   #3
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

если рекодером, то просто вставляется Sub Макрос3()
'
' Макрос3 Макрос
' Range("D3:D103").Select
Selection.Copy
Sheets("tjg03").Select
Range("D3").Select
ActiveSheet.Paste
End Sub
т.е формула не меняется, которую я копирую, а надо поменять формулу в этих ячейках, т.е. задавать столбец в формуле
evdss вне форума Ответить с цитированием
Старый 18.12.2013, 10:28   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Как вариант - взять формулы в массив, в массиве их изменить, выгрузить массив в другой лист.

Код:
Sub tt()
    Dim a(), i&
    a = Sheets(1).[a1:a10].Formula
    For i = 1 To UBound(a)
        a(i, 1) = Replace(a(i, 1), "!G", "!H")
    Next
    Sheets(2).[a1].Resize(UBound(a), 1) = a
End Sub
Да, с формулами массива так сделать не получится.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 18.12.2013 в 10:34.
Hugo121 вне форума Ответить с цитированием
Старый 18.12.2013, 10:35   #5
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

в этом месте не понимает a = Sheets(1).[a1:a10].Formula

Последний раз редактировалось evdss; 18.12.2013 в 10:45.
evdss вне форума Ответить с цитированием
Старый 18.12.2013, 10:56   #6
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Как вариант - взять формулы в массив, в массиве их изменить, выгрузить массив в другой лист.
Интересный подход, +++ Hugo121

если правильно понял, немного подкорректировал пример Hugo121:

Код:
Sub tt()
    Dim a(), i&
    a = [d1:d10].Formula
    For i = 1 To UBound(a)
        a(i, 1) = Replace(a(i, 1), "G", "H")
    Next
    [d1].Resize(UBound(a), 1) = a
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 18.12.2013, 11:02   #7
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

спасибо большое, вы просто меня спасли
evdss вне форума Ответить с цитированием
Старый 18.12.2013, 11:05   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я "!" оставил специально, чтоб например не заменилось что-то другое в формулах, например в CEILING().
Но конечно нужно смотреть по месту.

Почему "не понимает a = Sheets(1).[a1:a10].Formula " - не знаю... Стиль ссылок не влияет, проверил...

P.S. Т.е. уже понимает?
А вообще это можно было сделать обычной заменой в диапазоне по Ctrl+H
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.12.2013, 11:23   #9
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Hugo121 абсолютно прав, самый простой способ в вашей ситуации, это обычная замена, стандартными средствами эксель

Вот еще один пример макроса:

Код:
Sub Замена()
Dim ХотимПоменятьНаБуквуСтолбца As String, ТекущаяБукваСтолбца As String, ДиапазонЗамены As Range
Set ДиапазонЗамены = Application.InputBox("Выделите диапазон для замены", Type:=8)
ХотимПоменятьНаБуквуСтолбца = Application.InputBox("Введите букву столбца для замены", Type:=2)
If ХотимПоменятьНаБуквуСтолбца = "" Then Exit Sub
ТекущаяБукваСтолбца = Right(Left(ActiveCell.Formula, 2), 1)
ДиапазонЗамены.Replace What:=ТекущаяБукваСтолбца, Replacement:=ХотимПоменятьНаБуквуСтолбца
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 18.12.2013, 11:30   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Единственное что если делать такое Ctrl+H макросом, то заранее нужно знать, что на что изменится при копировании формул в конкретный диапазон, и по факту пересчёт формул произойдёт два раза (до замены, и после).
Если делать через массив - то меняем исходные известные формулы, пересчёт будет только после выгрузки уже изменённого массива.
В общем, через массив проще, контроль больше, можно сделать варианты замены по условию.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование куска формул на последнюю страницу deatmach Microsoft Office Excel 2 09.02.2013 20:43
Макрос - Копирование значений, а не формул. frslav Microsoft Office Excel 2 17.04.2012 20:04
Копирование формул Nesnakomez Microsoft Office Excel 3 02.04.2010 13:17
Копирование формул PIKA4Y Microsoft Office Excel 3 21.12.2009 16:05