Прошу помощи с VB в Excell
нужно, чтобы ячейка изменяла свое значение (формат числа - "дата, месяц, год") в зависимости от изменения др ячейки (формат - "количество часов"). HELP!
Помогите плз, как можно сделать следующее:
нужно, чтобы ячейка изменяла свое значение (формат числа - "дата, месяц, год") в зависимости от изменения др ячейки (формат - "количество часов"). HELP!
Это не сложно. :)
Надо просто вспомнить, что Excel -- это объектная система... и Рабочая таблица -- это тоже объект.
1. Создай новую книгу.
2. Открой VBA редактор и среди объектов ты увидишь таблицы из этой книги...
3. Щелкни по названию любой из таблиц.
Откроется окно с названием типа:
"YourWorkbookName.xls - SheetName (Code)
4. Скопируй в это окно примерчик
'<-- Code Begin
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RangeCells As Range 'Range of cells we shall check for changes
Dim varNumber As Variant 'Value of a cell here
' The variable RangeCells contains the cells that will cause
' an action when they are changed.
Set RangeCells = Range("A1:AB10000")
' it may be any other range up to all the sheet
If Not Application.Intersect(RangeCells, Range(Target.Address)) _
Is Nothing Then
varNumber = Range(Target.Address) ' Initialize variable.
' here we begin format change
Select Case varNumber ' Evaluate Number.
Case 1 To 5 ' Number between 1 and 5, inclusive... Use any other criteria
' The following is the only Case clause that evaluates to True.
Range(Target.Address).Cells.NumberFormat = "MM/DD/YYYY"
Case 6, 7, 8 ' Number between 6 and 8.
Range(Target.Address).Cells.NumberFormat = "DD/MM/YY h:mm;@"
Case 9 To 99000 ' Number between 6 and 8.
Range(Target.Address).Cells.NumberFormat = "DD/MM/YY"
Case Else ' Other values.
'you change Format to predefined one...
Range(Target.Address).Cells.NumberFormat = "#,##0.00;[Red]-#,##0.00"
End Select
' here we end format change
End If
End Sub
'<--- Code End
Вместо Select Case можно использовать If Elseif,
но Case работает побыстрее.
Да, если у тебя русская версия Excel, то все равно, формат будет типа "DD/MM", а не "ДД/ММ", это строго. Кроме того, помни, что название процедуры должно быть строго "Worksheet_Change".
С бестами и регардами,
Алекс
Помогите плз, как можно сделать следующее:
нужно, чтобы ячейка изменяла свое значение (формат числа - "дата, месяц, год") в зависимости от изменения др ячейки (формат - "количество часов"). HELP!
Хмм... Смотри сюда...
1. Дата бывает serialized date "h:mm:ss" и decimal number "0.00"
то есть, 24 часа "h:mm:ss" -- это 1 в децимал формате "0.00"
decimal = serialized * 24
и наоборот
serialized = decimal / 24
2. Если у тебя в клетке часы больше, чем 24, то формат должен быть "[h]:mm:ss"
3. Если к дню надо прибавить 1(или больше), если "[h]:mm:ss" число больше, чем 24 часа, то
=DATE(YEAR(DATEVALUE(YourDate)),MONTH(DATEVALUE(YourDate)),DAY(DATEVALUE(YourDate))+INT(YourTimeDecimal)