Автор: 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)
![Перейти к цитате](style_images/0day[1]/message_quote_arrow.svg)
Хоть бы задание описал, а то такое...
нужна помощь в макросе, чтобы оно считало от определенной даты отнимаем 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 цвет шрифта сделать белым
), так как этот вариант набросан на коленке за 5 минут.
Автор: k1nd3rr Sep 12 2016, 13:31
(Kurator @ Sep 12 2016, 13:50)
![Перейти к цитате](style_images/0day[1]/message_quote_arrow.svg)
Вообще, формулой такое не решить, так как низзя цикл написать (насколько я знаю...).
А с VBA я не сильно дружу. Поэтому набросал другое решение, оно простое, но не слишком элегантное. В приложенном файле:
А16 - стартовая дата;
С1 - Стартовая дата - 180 дней.
А1 - А14 - Даты поездок.
В16 - сумма дат, которые попадают в диапазон.
В1 - В14 - Индикатор попадает ли поездка в заданный диапазон.
http://ifolder.com.ua/drtv5la3djt4.html
Если такое решение подходит, то его можно сделать более элегантным (например в ячейках В1 - В14 цвет шрифта сделать белым
![biggrin.gif](style_emoticons/0day_emo/biggrin.gif)
), так как этот вариант набросан на коленке за 5 минут.
у тебя тут слишком все банально) нужен цикл...нужны знания VB
Автор: Kurator Sep 12 2016, 13:39
(k1nd3rr @ Sep 12 2016, 14:31)
![Перейти к цитате](style_images/0day[1]/message_quote_arrow.svg)
у тебя тут слишком все банально) нужен цикл...нужны знания VB
В стартовом сообщении фигурировало "или с формулой", вот я ее и накидал... А вспоминать, как там оно в VB - лень. Может вечером гляну...
Автор: k1nd3rr Sep 12 2016, 13:41
(Kurator @ Sep 12 2016, 14:39)
![Перейти к цитате](style_images/0day[1]/message_quote_arrow.svg)
В стартовом сообщении фигурировало "или с формулой", вот я ее и накидал... А вспоминать, как там оно в VB - лень. Может вечером гляну...
![d.gif](style_emoticons/0day_emo/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
Пока просто ровный код:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Public Sub ggg()
Dim TheDate As Date ' Declare variables.
Dim Date180 As Date
Dim ValueDate As Date
Dim Sum As Integer
Dim Msg As String
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 = CInt(Msg) + CInt(ValueDate)
Worksheets("Лист1").Range("D2").Value = Date180
Worksheets("Лист1").Range("D4").Value = Sum
End If
Msg = "Days from today: " & Date180 'Comment with (') symbol in case you don't need the Message Box to be shown
MsgBox Msg 'Comment with (') symbol in case you don't need the Message Box to be shown
End Sub
Автор: Carnifex Sep 13 2016, 13:48
Так. У меня код прошел без ошибок. Кстати, в ВБЕ Экселевском есть отладка если точку останова поставить и запустить код на выполнение. Щас че-то оформимс...
Автор: Carnifex Sep 13 2016, 14:28
Вот код:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Option Explicit
Public Sub GetTripsCount()
Dim dRequiredDateStart As Date ' Declare variables.
Dim dRequiredDateEnd As Date
Dim d180Days As Date
Dim tripsCount As Integer
Dim sMessage As String
Dim pSheet As Worksheet
Dim iterrator As Integer
iterrator = 2
tripsCount = 0
Set pSheet = Worksheets("Sheet1")
dRequiredDateEnd = Range("E2")
dRequiredDateStart = dRequiredDateEnd - 180
Do While Cells(iterrator, 1).Value <> ""
If dRequiredDateStart <= Cells(iterrator, 1).Value And dRequiredDateEnd >= Cells(iterrator, 2).Value Then
tripsCount = tripsCount + 1
End If
iterrator = iterrator + 1
Loop
Worksheets("Sheet1").Range("F2").Value = dRequiredDateStart
Worksheets("Sheet1").Range("F3").Value = tripsCount
Msg = "Time Interval Start Date: " & CStr(dRequiredDateStart) & " Trips Count: " & CStr(tripsCount) 'Comment with (') symbol in case you don't need the Message Box to be shown
MsgBox Msg 'Comment with (') symbol in case you don't need the Message Box to be shown
End Sub
Первая колонка твоего документа была принята за начало поездки, вторая - за конец. Дату, вплоть до которой нужно посчитать количество поездок вбиваешь в ячейку E2. Если не нужно всплывающее окошко - дай знать или убери сам.
Там захардкожено пару мест - мне леньки было писать фильтр значений. Если че - можно немного причесать это дело.
Автор: k1nd3rr Sep 13 2016, 17:00
(Carnifex @ Sep 13 2016, 15:28)
![Перейти к цитате](style_images/0day[1]/message_quote_arrow.svg)
Вот код:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Option Explicit
Public Sub GetTripsCount()
Dim dRequiredDateStart As Date ' Declare variables.
Dim dRequiredDateEnd As Date
Dim d180Days As Date
Dim tripsCount As Integer
Dim sMessage As String
Dim pSheet As Worksheet
Dim iterrator As Integer
iterrator = 2
tripsCount = 0
Set pSheet = Worksheets("Sheet1")
dRequiredDateEnd = Range("E2")
dRequiredDateStart = dRequiredDateEnd - 180
Do While Cells(iterrator, 1).Value <> ""
If dRequiredDateStart <= Cells(iterrator, 1).Value And dRequiredDateEnd >= Cells(iterrator, 2).Value Then
tripsCount = tripsCount + 1
End If
iterrator = iterrator + 1
Loop
Worksheets("Sheet1").Range("F2").Value = dRequiredDateStart
Worksheets("Sheet1").Range("F3").Value = tripsCount
Msg = "Time Interval Start Date: " & CStr(dRequiredDateStart) & " Trips Count: " & CStr(tripsCount) 'Comment with (') symbol in case you don't need the Message Box to be shown
MsgBox Msg 'Comment with (') symbol in case you don't need the Message Box to be shown
End Sub
Первая колонка твоего документа была принята за начало поездки, вторая - за конец. Дату, вплоть до которой нужно посчитать количество поездок вбиваешь в ячейку 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
вот полностью рабочий код) уже разобрался, СПАСИБО!