Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос по изменению формулы / 6 сообщений из 6, страница 1 из 1
31.10.2009, 09:46
    #36283536
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос по изменению формулы
Добрый день!
Помогите написать макрос, который бы изменял формулу, оборачивая в формулу СМЕЩ

Т.е. есть формула
=$E$7/$C$6
ее нужно преобразовать в формулу
=СМЕЩ($E$7;0;СТОЛБЕЦ()*3-9)/СМЕЩ($C$6;0;СТОЛБЕЦ()*3-9)

Условие: если в первоначальной формуле ссылки не абсолютные их нужно, соответственно, сделать абсолютными.
Макрос должен работать в выделенном диапазоне.

Честно, совсем нету времени даже начинать писать. И мыслей как писать тоже нету.
Устроился на новую работу (можете поздравить), зашиваюсь, и на sql не часто стал бывать и писать. Народ эксель использует как ворд. ужаснах. все ссылки в тупую ручками тыкают. надо бороться c этим явлением
Стараюсь писать грамотно!
...
Рейтинг: 0 / 0
31.10.2009, 09:49
    #36283540
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос по изменению формулы
ссылки могут быть и на листы этой же книги, но не другой книги, т.к. теряется смысл формулы СМЕЩ()
='лист'!$E$8
...
Рейтинг: 0 / 0
31.10.2009, 10:01
    #36283545
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос по изменению формулы
а, забыл.
еще нужно в обратную стророну изменять :-)
...
Рейтинг: 0 / 0
02.11.2009, 08:47
    #36285088
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос по изменению формулы
Добрый день и мои поздравления.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Public Sub trpr()
On Error GoTo err1
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    
    Dim SH As Worksheet
    Set SH = ThisWorkbook.Worksheets("Лист1")

    Dim c As Long, r As Long, f As String
    
    For r =  6  To  60 
        For c =  4  To  6 
            If SH.Cells(r, c).HasFormula Then
                If SH.Cells(r, c).FormulaR1C1 = "=R7C5/R6C3" Then
                   SH.Cells(r, c).FormulaR1C1 = "=OFFSET(R7C5,0,COLUMN()*3-9)/OFFSET(R6C3,0,COLUMN()*3-9)"
                End If
            End If
        Next
    Next
    
err1:
    If Err.Number <>  0  Then
        MsgBox Err.Description
    End If
    Set SH = Nothing
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
End Sub
может быть ещё кто-нибудь покажет свой вариант, я честно говоря не всё понял.
С уважением Игорь
...
Рейтинг: 0 / 0
02.11.2009, 12:48
    #36285689
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос по изменению формулы
klen_, спасибо!
Но немного не то.
Я как обычно не понятно сформулировал условия.

Нужно взять формулу.
она может состоять из несокольких ссылок и операторов.
например,
=D8+Лист2!$E$13*Лист2!D$57/1000+(Лист2!$I$59+1,5)
в следующей ячейке
=C13/$C$26

Смысл в том, чтобы разобрать формулу на ссылки и операторы,
ссылки сделать абсолютными и включить их в формулу СМЕЩ() с определенным смещение по столбцам или строкам. Псоледовательность операторов оставить прежнюю.
т.е. из первой формулы сделать следующую:

=СМЕЩ($D$8;0;0)+СМЕЩ(Лист2!$E$13;0;0)*СМЕЩ(Лист2!$D$57;0;0)/1000+(СМЕЩ(Лист2!$I$59;0;0)+1,5) ,
а из втророй:
=СМЕЩ($C$13;0;0)/СМЕЩ($C$26;0;0)

А работал макрос в выделенном диапазоне перебирая вот таким образом:
Код: plaintext
1.
2.
3.
    Set mycell = Selection
    For Each mycell In mycell.Cells
         преобразование_формул_в_смещ
    Next
Вручную я конечно уже поперебивал, но не ясно, будет ли эта задача повторяться, во первых, а во втрорых - интересно.
...
Рейтинг: 0 / 0
02.11.2009, 16:27
    #36286392
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос по изменению формулы
Для того, что бы все ссылке сразу перевести в абсолютные, используйте функцию Application.ConvertFormula
А что-бы разобрать по частям можно в цикле использовать InStr и Mid.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос по изменению формулы / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]