Здравствуйте! Подобного на форуме не нашла(( Excel 2007. Макросы практически никогда не писала, один и то давно. Есть два листа в книге. На одном перечень норм(наименование работы и норма), на другом (Смета)из выпадающего списка выбираем наименование работы, норма соответственно сама отображается. Но есть такие работы, у которых нужно рассчитать норму другую. Например, таблица внизу. Если выбрать замену шлейфа, и поставить количество не 1,а два и более, то норма должна быть другой, чем для одного шлейфа. И таких наименований работ много. Как вообще всё это можно грамотно сделать.
Замена шлейфа отпайки на ВЛ до 1 кВ
шлейф
0,9
Замена шлейфа отпайки на ВЛ до 10 кВ
шлейф
0,45
При замене более одного шлейфа на опоре на каждый последующий шлейф добавлять
Пользователь должен ввести цифру (единицу измерения: метр,шлейф или иную), и в соответствии с выбранным значением из выпадающего списка(при условии,что есть другая норма для данного значения при единице измерения выше 1), нужно рассчитать эту норму и отобразить в ячейке. например, если шлейф = 1, то норма 0,9 если шлейф=2, то норма уже 0,9+0,25, если шлейф=3, то норма 0,9+0,25+0,25. на каждый шлейф свыше 1, добавляется 0,25 к стандартной норме.
Пользователь должен ввести цифру (единицу измерения: метр,шлейф или иную), и в соответствии с выбранным значением из выпадающего списка
В модуль листа СМЕТА ОСТ
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns("A")) Is Nothing Then
Application.EnableEvents = False
Dim FoundCell As Range
Dim Norma As Double
With Worksheets("Работы")
Set FoundCell = .Columns(1).Find(Target, , xlValues, xlWhole)
If Not FoundCell Is Nothing Then
Norma = FoundCell.Offset(, 2)
If Target.Offset(, 2) = 1 Then
Target.Offset(, 3) = Norma
Else
Target.Offset(, 3) = Norma + 0.25 * (Target.Offset(, 2) - 1)
End If
End If
End With
End If
Application.EnableEvents = True
End Sub
Вводите в столбец С количество, затем из выпадающего списка выбираете работу
Это я понимаю. Выбираю из списка первую строку, ставиться норма 0,9, и так далее. Но, при вводе количества больше 1, к норме добавляется 0,25. То есть, со списка выбрала первую строку и количество 1, тогда просто норма 0,9. Выбираю первую строку и количество 2, то уже к 0,9+0,25. На каждое последующее количество добавляется 0,25
Kuzmich,Пользователь выбирает сначала работу,потом вводит количество. И если добавить работы с другими нормами, то под каждые нормы (не 0,25 выше 1), нужно отдельно всё описывать
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns("A:C")) Is Nothing Then
Application.EnableEvents = False
Dim FoundCell As Range
Dim Norma As Double
With Worksheets("Работы")
Set FoundCell = .Columns(1).Find(Cells(Target.Row, 1), , xlValues, xlWhole)
If Not FoundCell Is Nothing Then
Norma = FoundCell.Offset(, 2)
If Cells(Target.Row, 3) = 1 Then
Cells(Target.Row, 4) = Norma
Else
Cells(Target.Row, 4) = Norma + 0.25 * (Cells(Target.Row, 3) - 1)
End If
End If
End With
End If
Application.EnableEvents = True
End Sub
Ulik, так может все таки вам потратить время и создать список работ и рядом коэф. который им соответствует и все..т.е. если: пер-мка - 0,3 шлейф - 0,25 и потом все просто можно сделать
Ulik, ну просто насоклько мне известно в макрос тоже это все нужно прописывать.. а так создал табличку из 2х столбцов наименование работ и коэф. и все.
a.i.mershik,да, это понятно, но ввод делают сами пользователи в Смету и неизвестно,сколько они работ добавят. И если на отдельном листе будут работы и коэффициенты, то как на итоговом листе разместить формулу,которая зависит от количества и с разными нормами
a.i.mershik,у меня есть таблица работ и нормы, но рассчитать я могу только имея количество, которое вводят пользователи на другом листе. Они же вводят работу и количество работ я тоже не знаю