Эксперты, помогите, пожалуйста!!! Уже день бьюсь напрасно. Дано: дата счета-фактуры (стб. O), код условия оплаты (стб. X)
код условия оплаты расшифрован на листе "Коды усл. оплаты", в стб. E записана формула, но без =
Надо: рассчитать утвержденную дату оплаты (стб. X на листе FY20), т.е. по коду условия оплаты (стб. X) применить формулу к дате счета-фактуры (стб. O).
Елена Боровская,ну, раз вы уже с макросами на "Ты", вот вот вам макрос. Удалил из вашего файла лист "Поставщики", чтобы файл умещался в 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
Я с ними на ВЫ, честно говоря. Мне помогли в первом случае. Пока у меня света не было - уже мою, казалось, нерешимую задачу решили. Вот небольшая модель задачи:
Лист FY20
Стб. O
Стб. X
Стб. Y
Дата сч/ф
Код оплаты
Дата оплаты
14.09.2020
ф15
?
11.09.2020
кв5
?
11.09.2020
ф30
?
10.09.2020
250
?
Лист Коды усл. оплаты
Код оплаты
ф15
Постоплата через 15 дней
='FY20'!$O3+15
кв5
Оплата на 5 день 3-го месяца
='ДАТА(ГОД('FY20'!$O3);МЕСЯЦ('FY20'!$O3)+3;5)
ф30
Постоплата через 30 дней
='FY20'!$O3+30
250
50% предоплата, 50% на 5 день 2 мес. после окончания месяца, в котором получен товар\услуга (подписаны накладная\акт)
='ДАТА(ГОД('FY20'!$O3);МЕСЯЦ('FY20'!$O3)+2;5)
Скажите, пожалуйста, а формулой не решишь такого рода задачу? Я сейчас макросом обязательно попробую! Спасибо огромнейшее!!!
Елена Боровская написал: Скажите, пожалуйста, а формулой не решишь такого рода задачу?
Как решить это формулами я не знаю. Тут у нас сидят формулисты, может помогут.
По макросу: Конечно, можно, вам надо в коде поменять букву X на Y в одной строке .Cells(i, "Х").FormulaLocal = "=" & Replace(Replace(FormulaOplaty, "O3", "O" & i), "'FY20'!", "") на .Cells(i, "Y").FormulaLocal = "=" & Replace(Replace(FormulaOplaty, "O3", "O" & i), "'FY20'!", "")
Ваши формулы без знака "=" на листе "Коды усл. оплаты" ссылаются на 3-ю строку. Но вряд ли Вам это надо. А так - да, можно решить и формулами. 1. Исправил формулы на листе с формулами. 2. Создал 2 имени в Диспетчере имен. 3. Применил в Диспетчере имен макрофункцию =ВЫЧИСЛИТЬ()
PS Удалил скрытые листы, чтобы уменьшить размер файла до приемлемого на форуме.