Страницы: 1
RSS
Подстановка формулы с другого листа, Расчет даты оплаты
 
Эксперты, помогите, пожалуйста!!! Уже день бьюсь напрасно. :cry:  :cry:  :cry:
Дано:
дата счета-фактуры (стб. O),
код условия оплаты (стб. X)

код условия оплаты расшифрован на листе "Коды усл. оплаты",
в стб. E записана формула, но без =

Надо:
рассчитать утвержденную дату оплаты (стб. X на листе FY20), т.е. по коду условия оплаты (стб. X) применить формулу к дате счета-фактуры (стб. O).

Файл не могу прикрепить, так как весит больше 100 Кб, но я скинула на гугл диск и вот ссылка: https://drive.google.com/file/d/1IDuTFHSgiSmYW1Y5HuuwN9nSegqi1nlC/view?usp=sharing
 
Цитата
Елена Боровская написал: Файл не могу прикрепить, так как весит больше 100 Кб,
Составьте небольшой пример, не нужен рабочий файл
 
Елена Боровская,ну, раз вы уже с макросами на "Ты", вот вот вам макрос.
Удалил из вашего файла лист "Поставщики", чтобы файл умещался в 100кб
Код
Sub Заменить_коды_оплаты_на_формулы()
    Dim LastRow As Long, KodOplaty As String, FormulaOplaty As String, i As Long, Rng As Range

    With Worksheets("FY20")
        LastRow = .Cells(.Rows.Count, "X").End(xlUp).Row
        If LastRow <= 3 Then Exit Sub
        For i = 3 To LastRow
            If Not IsEmpty(.Cells(i, "X")) Then
                KodOplaty = .Cells(i, "X") 'код оплаты на листе FY20 в столбце Х
                With Worksheets("Коды усл. оплаты")
                    Set Rng = .Columns(1).Find(KodOplaty, , xlFormulas, xlWhole)
                    If Not Rng Is Nothing Then FormulaOplaty = .Cells(Rng.Row, "E") 'формула для оплаты с листа Коды усл. оплаты
                End With
                If FormulaOplaty <> "" Then
                    If Left(FormulaOplaty, 2) = "FY" Then FormulaOplaty = "'" & FormulaOplaty
                    .Cells(i, "X").FormulaLocal = "=" & Replace(Replace(FormulaOplaty, "O3", "O" & i), "'FY20'!", "")
                End If
            End If
            FormulaOplaty = Empty
            Set Rng = Nothing
        Next i
    End With
    MsgBox "Условия оплаты заменены с кодов на формулы!", vbInformation, "Конец"
End Sub
Изменено: New - 22.09.2020 19:59:38
 
Я с ними на ВЫ, честно говоря. Мне помогли в первом случае.
Пока у меня света не было - уже мою, казалось, нерешимую задачу решили.
Вот небольшая модель задачи:
Лист FY20
Стб. OСтб. XСтб. Y
Дата сч/фКод оплатыДата оплаты
14.09.2020ф15?
11.09.2020кв5?
11.09.2020ф30?
10.09.2020250?
Лист Коды усл. оплаты
Код оплаты
ф15Постоплата через 15 дней='FY20'!$O3+15
кв5Оплата на 5 день 3-го   месяца ='ДАТА(ГОД('FY20'!$O3);МЕСЯЦ('FY20'!$O3)+3;5)
ф30Постоплата через 30   дней='FY20'!$O3+30
25050%   предоплата,
    50% на 5 день 2 мес. после окончания месяца, в котором получен товар\услуга   (подписаны накладная\акт)
='ДАТА(ГОД('FY20'!$O3);МЕСЯЦ('FY20'!$O3)+2;5)
Скажите, пожалуйста, а формулой не решишь такого рода задачу?
Я сейчас макросом обязательно попробую! Спасибо огромнейшее!!!
 
Скажите, пожалуйста, а можно перенести в соседний столбец Y, а коды в столбце X оставить без изменения (ф30, кв5 и т.д.)?
 
Цитата
Елена Боровская написал:
Скажите, пожалуйста, а формулой не решишь такого рода задачу?
Как решить это формулами я не знаю. Тут у нас сидят формулисты, может помогут.

По макросу:
Конечно, можно, вам надо в коде поменять букву X на Y в одной строке
.Cells(i, "Х").FormulaLocal = "=" & Replace(Replace(FormulaOplaty, "O3", "O" & i), "'FY20'!", "")
на
.Cells(i, "Y").FormulaLocal = "=" & Replace(Replace(FormulaOplaty, "O3", "O" & i), "'FY20'!", "")

Код открывается по сочетанию клавиш Alt+F11
Изменено: New - 22.09.2020 22:03:51
 
Код
=ЕСЛИ(ЛЕВСИМВ(X1;1)="ф";O1+ПРАВСИМВ(X1;2);ДАТА(ГОД(O1);МЕСЯЦ(O1)+2+(X1="кв5");5))
Изменено: Ігор Гончаренко - 22.09.2020 23:52:49
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ваши формулы без знака "=" на листе "Коды усл. оплаты" ссылаются на 3-ю строку. Но вряд ли Вам это надо. А так - да, можно решить и формулами.
1. Исправил формулы на листе с формулами.
2. Создал 2 имени в Диспетчере имен.
3. Применил в Диспетчере имен макрофункцию =ВЫЧИСЛИТЬ()

PS
Удалил скрытые листы, чтобы уменьшить размер файла до приемлемого на форуме.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Всем большое спасибо за ответы!!!
Страницы: 1
Наверх