работа с дати !!!

7 отговора 0 прегледа
#1

работа с дати !!!

Здр !
От доста време ме мъчи един проблем, а той е :
В лист1, в колона А:А съм поставил датите от 01.01.2009 до 31.12.2009. А в колона В:В стойности , сиреч срещу всяка дата има определена стойност които стойности са в диапазона от 0 до 1 . Тоест в лист1 в клетка А1 е датата 01.01.2009 а в клетка В1 числото 1 или 0 .
Въпроса ми е .....
В лист 2 в клетка А1 си записвам някаква произволна дата примерно 20.08.2009 а до нея в клетка В1 записвам също така произволно число примерно 10 .
Как да стане така , че след като сме задали числото 10 ,програмата да се обърне към лист1 и от зададената дата 10.08.2009 година да започне да сумира стойностите в колона В:В по-голями от 0 до тогава докато сумата от едениците стане 10 , след което в лист2 в клетка С1 бъде изписана датата , която стой срещу десетата еденица.
Ето ви нагледен пример :
в лист1....................................в лист2
...........А................... В.........................А....................В................С.......................
1...01.01.2009...........0...................01.01.2009.........2..........03.01.2009.................
2...02.01.2009...........1..................................................................................
3...03.01.2009...........1.......................................................................................
В лист2 в клетка А1 съм записал датата 01.01.2009 а срещу нея в клетка В1 числото 2 . Тогава програмата се е обърнала към лист1 потърсила е съвпадение на избраната произволно дата в лист2 в клетка А1 а именно 01.01.2009 същата съвпада с датата от лист1 в клетка А1, тогава се обръща към колона В :В клетката срещу датата 01.01.209 а именно В1 и започва да брой едениците толкова пъти ,колкото е зададената стойност в лист2 ,в клетка В1 която е 2 . Тоест в клетка С1 на лист2 трябва да бъде изписана автоматично датата 03.01.2009г. Надявам се да съм бил обстоятелствен и ичерпателен...
Благодаря на всеки отзовал се !!!

Редактирано от drosg на

Отговор
в отговор на drosg #2

Re: работа с дати !!!

Ето един вариант

Option Explicit
Function ChoiceMyDate(MyCell As Range, MyNumber As Integer) As Date
Dim I, J, MySum As Integer
Sheet1.Select
MySum = 0
With Sheet1
For I = 1 To 60000
If .Range("A" & I).Value = MyCell.Value Then
J = I - 1
While MySum < MyNumber
J = J + 1
MySum = MySum + .Range("B" & J).Value
Wend
ChoiceMyDate = .Range("A" & J).Value

Exit Function
End If
Next

End With
End Function


Отговор
в отговор на TRN #3

Re: работа с дати !!!

Здр. TRN !
Много благодаря, че се отзоваваш на всеки , който има нужда !!!
Но понеже нямам опит много с VBA, би ли ми обяснил какво точно прави този код .....
Защото аз го пробвах , ама нищо не се получава !!!
Благодаря !

Отговор
в отговор на drosg #4

Re: работа с дати !!!

Трябва да отвориш Visual Basic Editor
Tools; Macro...; Visual Basic Editor
от ляво в списъка кликаш с десен бутон Insert; Module , след което в списъка ще се появо Module1 кликаш два пъти вурху него и в полето вдясно копираш кода, който вече ще се вижда като формула в Excel
Отиваш в Microsoft Excel и избираш клетка C1 на Sheet2. Insert Function и от Select Category избираш User Defined, където ще видиш написаната вече функция ChoiceMyDate - избираш я - първи параметър A1(датата която си въвел), втори параметър B1- стойността, която трябва да достигне.

Отговор
в отговор на TRN #5

Re: работа с дати !!!

Много ти благодаря TRN !!!
Стана перфектно!!!

Отговор
в отговор на drosg #6

Re: работа с дати !!!

Здр. TRN !
Бих искал да попитам ,разбира се ако не е нахално от моя страна , как това с датите би станало с текстбоксове ? Какво имам предвид:
Имам три текстбокса : textbox1, textbox2, textbox3 и един бутон.
В textbox1 въвеждам дата, в textbox2 въвеждам число и когато натисна бутона да се появи датата ,която търся
Благодаря !

Отговор
в отговор на drosg #7

Re: работа с дати !!!

Не считам за нормално да се обръщаш директно към когото и да било. Някой може да предложи по-добър вариант.
Това е новата функция

Function ChoiceNewMyDate(MyCell As Variant, MyNumber As Variant) As Variant
Dim I, J, MySum As Integer
Sheet1.Select
MySum = 0
With Sheet1
For I = 1 To 60000
If .Range("A" & I).Value = MyCell Then
J = I - 1
While MySum < MyNumber
J = J + 1
MySum = MySum + .Range("B" & J).Value
Wend
ChoiceNewMyDate = .Range("A" & J).Value

Exit Function
End If
Next

End With
End Function


А това кода за клик на бутона

Private Sub CommandButton1_Click()
Dim MyDate As Date
Dim TekuSheet As Worksheet
Set TekuSheet = ActiveSheet
If TextBox1 = vbNullString Then Exit Sub
If IsDate(TextBox1) Then
MyDate = CDate(TextBox1.Text)
Else
MsgBox "TetxBox1 Non valid date"
Exit Sub
End If
If TextBox2 = vbNullString Then TextBox2.Text = "0"
If Not IsNumeric(TextBox2) Then
MsgBox "TetxBox2 Not Numeric value"
Exit Sub
End If

TextBox3 = Format(ChoiceNewMyDate(MyDate, TextBox2.Text), "dd.mm.yyyy")
TekuSheet.Select
End Sub


Отговор
в отговор на TRN #8

Re: работа с дати !!!

Здр.
За кой ли път ти благодаря за помоща ти ...към мен .
Кода работи перфектно , но когато го внедря в друг не става работата.Защо е така ? Имаш ли някаква идея ?
Ако искаш да ти изпратя целият проект за да му хвърлиш едно око.

Отговор