Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

forum.0day.community _ Программирование _ Microsoft Excel

Автор: k1nd3rr Sep 11 2016, 15:04

Ребята нужно помощь в Excel( я не особо силен в этой сфере) , или с формулой или макросом, кто готов помощь напишите в личку, буду очень благодарен!

Автор: Dr.Sydorenko Sep 11 2016, 16:19

Хоть бы задание описал, а то такое...

Автор: k1nd3rr Sep 11 2016, 16:30

(Dr.Sydorenko @ Sep 11 2016, 17:19) Перейти к цитате

Хоть бы задание описал, а то такое...

нужна помощь в макросе, чтобы оно считало от определенной даты отнимаем 180 дней и оно показало к-во поездок которые попали в этот промежуток!

Автор: k1nd3rr Sep 12 2016, 12:19

Sub ggg()
Dim TheDate As Date ' Declare variables.
Dim Date180 As Date
Dim ValueDate
Dim Sum As Integer
Dim Msg
Dim sheetWithKvit As Worksheet
Set sheetWithKvit = Worksheets("Лист1")
TheDate = Range("b9")
Date180 = TheDate - 180
If Date180 >= Range("a2") And Date180 <= Range("b2") Then
ValueDate = -DateDiff("d", Range("b2"), Date180)
Range("D3").FormulaLocal = "=СУММ(C3:C9)"
Msg = Range("D3")
Sum = Msg + ValueDate
Worksheets("Лист1").Range("D2").Value = Date180
Worksheets("Лист1").Range("D4").Value = Sum
End If
' Msg = "Days from today: " & Date180
' MsgBox Msg
End Sub

http://www.ex.ua/272316129447 - ссылка на файл

где что нужно добавить? нечего не получается, помогите!!!

Автор: Kurator Sep 12 2016, 12:50

Вообще, формулой такое не решить, так как низзя цикл написать (насколько я знаю...).
А с VBA я не сильно дружу. Поэтому набросал другое решение, оно простое, но не слишком элегантное. В приложенном файле:
А16 - стартовая дата;
С1 - Стартовая дата - 180 дней.
А1 - А14 - Даты поездок.
В16 - сумма дат, которые попадают в диапазон.
В1 - В14 - Индикатор попадает ли поездка в заданный диапазон.
http://ifolder.com.ua/drtv5la3djt4.html

Если такое решение подходит, то его можно сделать более элегантным (например в ячейках В1 - В14 цвет шрифта сделать белым biggrin.gif ), так как этот вариант набросан на коленке за 5 минут.

Автор: k1nd3rr Sep 12 2016, 13:31

(Kurator @ Sep 12 2016, 13:50) Перейти к цитате

Вообще, формулой такое не решить, так как низзя цикл написать (насколько я знаю...).
А с VBA я не сильно дружу. Поэтому набросал другое решение, оно простое, но не слишком элегантное. В приложенном файле:
А16 - стартовая дата;
С1 - Стартовая дата - 180 дней.
А1 - А14 - Даты поездок.
В16 - сумма дат, которые попадают в диапазон.
В1 - В14 - Индикатор попадает ли поездка в заданный диапазон.
http://ifolder.com.ua/drtv5la3djt4.html

Если такое решение подходит, то его можно сделать более элегантным (например в ячейках В1 - В14 цвет шрифта сделать белым biggrin.gif ), так как этот вариант набросан на коленке за 5 минут.

у тебя тут слишком все банально) нужен цикл...нужны знания VB

Автор: Kurator Sep 12 2016, 13:39

(k1nd3rr @ Sep 12 2016, 14:31) Перейти к цитате

у тебя тут слишком все банально) нужен цикл...нужны знания VB


В стартовом сообщении фигурировало "или с формулой", вот я ее и накидал... А вспоминать, как там оно в VB - лень. Может вечером гляну... d.gif

Автор: k1nd3rr Sep 12 2016, 13:41

(Kurator @ Sep 12 2016, 14:39) Перейти к цитате

В стартовом сообщении фигурировало "или с формулой", вот я ее и накидал... А вспоминать, как там оно в VB - лень. Может вечером гляну... d.gif

на тот момент я думал возможно формула мне поможет))) ошибался))))

Автор: mega K. Sep 12 2016, 17:11

=SUMIFS(C2:C9,A2:A9,"<="&D2,B2:B9,">="&D2)

Автор: Carnifex Sep 13 2016, 13:15

где что нужно добавить? нечего не получается, помогите!!!

Что значит "не получается", блин? Ошибка какая? Начнем с того что у Вас закоментарен вывод Мессэдж бокса - он Вам нужен или как? Dim Msg не имеет типа а должен быть String. И вообще, включите Option Explicit чуть выше по коду. Это у Вас экзешник или расширение для Экселя?

Автор: Carnifex Sep 13 2016, 13:27

Пока просто ровный код:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Автор: Carnifex Sep 13 2016, 13:48

Так. У меня код прошел без ошибок. Кстати, в ВБЕ Экселевском есть отладка если точку останова поставить и запустить код на выполнение. Щас че-то оформимс...

Автор: Carnifex Sep 13 2016, 14:28

Вот код:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


Первая колонка твоего документа была принята за начало поездки, вторая - за конец. Дату, вплоть до которой нужно посчитать количество поездок вбиваешь в ячейку E2. Если не нужно всплывающее окошко - дай знать или убери сам.
Там захардкожено пару мест - мне леньки было писать фильтр значений. Если че - можно немного причесать это дело.

Автор: k1nd3rr Sep 13 2016, 17:00

(Carnifex @ Sep 13 2016, 15:28) Перейти к цитате

Вот код:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


Первая колонка твоего документа была принята за начало поездки, вторая - за конец. Дату, вплоть до которой нужно посчитать количество поездок вбиваешь в ячейку E2. Если не нужно всплывающее окошко - дай знать или убери сам.
Там захардкожено пару мест - мне леньки было писать фильтр значений. Если че - можно немного причесать это дело.

Sub ggg()
Dim TheDate As Date
Dim Date180 As Date
Dim ValueDate
Dim Sum As Integer
Dim i As Integer, w As Integer, a As Integer
Dim Msg
Dim sheetWithKvit As Worksheet

ILustRow = Cells(Rows.Count, "B").End(xlUp).Row

TheDate = Cells(ILustRow, "B")
Date180 = TheDate - 180
i = 1
w = ILustRow
Do While w > 2
w = w - 1

If Date180 >= Cells(w, "A") And Date180 <= Cells(w, "B") Then

ValueDate = -DateDiff("d", Cells(w, "B"), Date180)
a = Application.Sum(Range(Cells(w + 1, "C"), Cells(ILustRow, "C")))
'Msg = Range("D3")
Sum = a + ValueDate
Exit Do
Else

Do While w > 2

If Date180 < Cells(w, "A") Then
a = Application.Sum(Range(Cells(w, "C"), Cells(ILustRow, "C")))
Sum = a

End If
Exit Do
Loop

End If
Loop
Cells(ILustRow, "D").Value = Date180
Cells(ILustRow, "E").Value = Sum

End Sub
вот полностью рабочий код) уже разобрался, СПАСИБО!

Автор: Carnifex Sep 13 2016, 17:31

Ok) Пиши если че)

Invision Power Board
© Invision Power Services