Страницы: 1
RSS
Как составить график в Excel?, Создание графика в Excel
 
Добрый день. Не могли бы помочь советом? Мне в Excel нужно составить график поставки продукции, состоящий из трех этапов - аванс, поставка, оплата остатка. Сроки между этапами могут разниться от полугода до года, наименований много. Сроки могут меняться, вручную это всё делать нереально. Одним словом, нужна гибкая таблица.
На этапе "Аванс" я вношу сумму, пусть будет 500 рублей в январе. На этапе "Поставка" мне надо внести сумму поставленной продукции, 1 000 рублей например. Вот здесь и начинается сложность - я должен сделать так, чтобы в зависимости от срока поставки активировался тот или иной месяц. Например, аванс был в январе, срок поставки - три месяца, значит, надо ждать в апреле. Но срок изменился до 4 месяцев, мне нужно изменить апрель на май. Я хочу, чтобы это всё происходило автоматически.
Какая-то теория в голове крутится, а вот как реализовать на практике - не знаю. Приложил файл, он простой.
Можно ли сделать так, чтобы при значении в графе "Срок поставки" числа 3 активировался месяц апрель? А тут мне говорят, что поставят через два месяца, я ставлю в графе  число 2 - и у меня меняется апрель на март.  
 
Здравствуйте.
Мне не понятно, что значит активировался? Закрасился, или туда что то прописалось, или что?
Может быть так надо, ак в файле, через УФ?
Код
=(ПОИСКПОЗ(9^9;$A3:$O3;1)+$P3)=СТОЛБЕЦ()
Изменено: gling - 11.03.2025 10:26:55
 
люблю_картошку, а что вы дальше будете делать, в части заполнения таблицы. gling, вам подсветил нужный месяц, а дальше, если вы туда внесете суммы, что вы ожидаете увидеть в таблице?
 
Цитата
написал:
а что вы дальше будете делать, в части заполнения таблицы.  gling , вам подсветил нужный месяц, а дальше, если вы туда внесете суммы, что вы ожидаете увидеть в таблице?
Мне нужна таблица, состоящая из трех разделов - аванс, поставка, оплата остатка. Каждый раздел состоит из 12 месяцев. Наименований очень много, около двухсот. Она должна работать следующим образом:
1. В разделе Аванс в графе "Январь" я ставлю сумму, а в соседней графе срок поставки - 6 месяцев.
2. В разделе поставка в графе "Июль" должна появиться сумма поставки, ну то есть стоимость.
3. В разделе оплата остатка в графе "Август" (то есть 1 месяц) появляется разница между авансом и поставкой, которую необходимо доплатить.
4. Таблица должна быть гибкой, то есть при изменении сроков поставки (они меняются часто) автоматически меняется месяц поставки, а следом - месяц оплаты остатка.
Я кое что сделал, но конструкция получилась очень громоздкой, её надо будет долго масштабировать на 200 наименований, к тому же оплата остатка не считается, костыль, в общем. Не подходит.  
 
Код
Sub UpdateDeliveryAndPayment()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Лист1")
        Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim i As Long
    For i = 2 To lastRow
        ' Наименование
        Dim name As String
        name = ws.Cells(i, 2).Value
        
        ' Сумма аванса
        Dim advanceAmount As Double
        advanceAmount = 0
        For j = 4 To 15
            If ws.Cells(i, j).Value <> "" Then
                advanceAmount = ws.Cells(i, j).Value
                Exit For
            End If
        Next j
        
        ' Срок поставки
        Dim deliveryTerm As Integer
        deliveryTerm = ws.Cells(i, 16).Value
        
        ' Рассчитываем месяц поставки
        Dim deliveryMonth As Integer
        For j = 4 To 15
            If ws.Cells(i, j).Value = advanceAmount Then
                deliveryMonth = j + deliveryTerm
                If deliveryMonth > 15 Then
                    deliveryMonth = deliveryMonth - 12
                End If
                Exit For
            End If
        Next j
        
        ' Обновление поставки
        ws.Cells(i, deliveryMonth + 3).Value = advanceAmount
        
        ' Рассчитываем месяц оплаты остатка
        Dim paymentMonth As Integer
        paymentMonth = deliveryMonth + 1
        If paymentMonth > 15 Then
            paymentMonth = paymentMonth - 12
        End If
        
        ' Обновление оплаты остатка
        ' Предположим, что оплата остатка равна авансу (на самом деле это должно быть разница между авансом и поставкой)
        ws.Cells(i, paymentMonth + 3 + 12).Value = advanceAmount
    Next i
End Sub
Пускайте макрос через VBA и адаптируйте под вашу таблицу, указав правильные столбцы и строки.

Также, маленький бонус:
  • Для каждого месяца (например, Январь, Февраль, ...) используйте формулу, которая проверяет, соответствует ли текущий месяц месяцу поставки. Например, для января:

    Код
    =IF(MONTH(DATE(YEAR(TODAY());MONTH(B2)+C2;DAY(B2)))=1;B2;"")

  • Для каждого месяца используйте формулу, которая проверяет, соответствует ли текущий месяц месяцу оплаты остатка. Так же, для января:

    Код
    =IF(MONTH(DATE(YEAR(TODAY());MONTH(DATE(YEAR(TODAY());MONTH(B2)+C2;DAY(B2)))+1;DAY(B2)))=1;B2;"")

One tap - one kill
 
Bug Hunter, надо попробовать ваши наработки, благодарю. но вообще я применил простую формулу "если" и всё пошло так, как надо. Теперь задача усложняется - теперь поставку надо будет автоматически раскидать на несколько партий разных объёмов. вот тут уж не знаю, насколько поможет excel и вообще, может, другие инструменты надо использовать. буду думать.
Страницы: 1
Читают тему
Наверх