Вопрос № 132428: Здравствуйте Эксперты. Решил вот себе немного труд в Excel облегчить.
Суть вот в чем, есть три столбца, в первый вносится вес во второй адрес, а в третий ставится цена в зависимости от веса в первом столбце. Вбил формулу =ЕСЛИ(G5=G6;"";...Вопрос № 132504: Private Sub Command1_Click()
Call osnova
End Sub
Sub osnova()
'основные вычисления
If Text1.Text = " " Then Exit Sub
Label1 = "Думаю..."
Text3.Text = " "
znak = " "
ch...
Вопрос № 132.428
Здравствуйте Эксперты. Решил вот себе немного труд в Excel облегчить.
Суть вот в чем, есть три столбца, в первый вносится вес во второй адрес, а в третий ставится цена в зависимости от веса в первом столбце. Вбил формулу =ЕСЛИ(G5=G6;"";ЕСЛИ(E5<=15;5;ЕСЛИ(E5<=30;7;ЕСЛИ(E5<=50;9;ЕСЛИ(E5>50;11;"0"))))), вроде работает,
только надо чтобы если во втором столбце адрес повторялся, то в первом вес складывался и цена в третий столбец выводилась по общему весу, а не по последней строчке с адресом.
Отвечает: megaloman
Здравствуйте, Meridian2045! Ваша формула примет вид (для ячейки H5) - в Приложении
Размножайте ее на оставшиеся ячейки столбца H
Естественно, столбец E пересчитать на месте нельзя, иначе будет зацикливание. Если надо сосчитать итоговый вес, например, в столбце J, то формула для J5 имеет вид
Ответ отправил: megaloman (статус: Студент)
Ответ отправлен: 16.04.2008, 20:28 Оценка за ответ: 1 Комментарий оценки: Вы обсолютно не поняли суть вопроса. Таблица не заканчивается 18 строчкой, этих строчек может быть до 2000. С огромным кол-ом адресов. В моей формуле видно что идет проверка адресов и если в нескольких строках подряд один и тот же адрес, то проверка идет пока не появляется другой адрес. Если появился другой адрес, то ставится цена, которая зависит от веса. И именно этот вес(с повторяющимся
адресом) и надо сложить.
Вопрос № 132.504
Private Sub Command1_Click()
Call osnova
End Sub
Sub osnova()
'основные вычисления
If Text1.Text = " " Then Exit Sub
Label1 = "Думаю..."
Text3.Text = " "
znak = " "
chislo1 = Text1.Text
chislo2 = ""
If Mid(chislo1, 1, 1) = "-" Then chislo1 = Mid(chislo1, 2): znak = "-"
Call proverka_simvolov(chislo1, spisok) 'проверка допустимых символов If priznak = 1 Then Label1 = "Недопустимый символ в числе!" : Exit Sub
'проверка двойных точек:
If InStr(InStr(chislo1, ".") + 1, chislo1, ".") <> 0 Then Label1 = "Более одной десятичной точки в числе!" : Exit Sub
If InStr(InStr(chislo1, ",") + 1, chislo1, ",") <> 0 Then Label1 = "Более одной десятичной точки в числе!": Exit Sub
'если и точка и запятая:
If InStr(chislo1, ".") <> 0 And InStr(chislo1, ",") <> 0 Then Label1 = "Вы уж определитесь - чем Вы обозначаете точку - точкой или запятой" : Exit Sub
'разделение числа на целую (chislo_1) и дробную (chislo_2) части:
popolam = InStr(chislo1, ".") + InStr(chislo1, ",")
Select Case popolam
Case 0
chislo_1 = chislo1
chislo_2 = "0"
Case 1
chislo_1 = "0"
chislo_2 = Mid(chislo1, 2)
Case Is > 1
chislo_1 = Microsoft.VisualBasic.Left(chislo1, popolam - 1)
chislo_2 = Mid(chislo1, popolam + 1)
End Select
sys1 = Combo1.Text
sys2 = Combo2.Text
Call proverka_cifr(chislo_1, sys1)
If priznak = 1 Then Label1 = "При данной системе числа в этом числе не может быть таких цифр!": Exit Sub
Call proverka_cifr(chislo_2, sys1)
If priznak = 1 Then Label1 = "При данной системе числа в этом числе не может быть таких цифр!": Exit Sub
основной блок вычислений
On Error GoTo errorlabel
'перевод из любой системы в десятичную целой части числа
chis1 = 0
For x = 1 To Len(chislo_1)
chis1 = chis1 + CDec((InStr(spisok, Mid(chislo_1, CInt(x), 1)) - 1) * (sys1 ^ (Len(chislo_1) - x)))
Next
'перевод из любой системы в десятичную дробной части числа
chis2 = 0
For x = 1 To Len(chislo_2)
chis2 = chis2 + CDec((InStr(spisok, Mid(chislo_2, CInt(x), 1)) - 1) * (sys1 ^ (-x)))
Next
'перевод из десятичной системы в любую целой части числа
Dim ostatok As Integer
chislo_1 = ""
Do
ostatok = chis1 - Int(chis1 / CDec(sys2)) * CDec(sys2)
chis1 = Int(chis1 / CDec(sys2))
chislo_1 = Mid(spisok, CInt(ostatok) + 1, 1) + chislo_1
Loop While chis1 - sys2 >= 0
If chis1 <> 0 Then chislo_1 = Mid(spisok, CInt(chis1) + 1, 1) + chislo_1
'перевод из десятичной в любую дробной части числа
Dim celoe As Double
chislo_2 = ""
For x = 0 To Combo3.Text - 1
celoe = Int(chis2 * sys2)
chis2 = chis2 * CDec(sys2) - Int(chis2 * CDec(sys2))
chislo_2 = chislo_2 + Mid(spisok, CInt(celoe) + 1, 1)
Next x
If chislo_2 = "0" Then chislo_2 = ""
chislo2 = znak & chislo_1 & "." & chislo_2
Text3.Text = chislo2
Label1 = "Готово!"
If sys1 = sys2 Then Label1 = "Можно было и так догадаться! :)"
Exit Sub
errorlabel:
Label1 = "Переполнение: число слишком большое!"
End Sub
Sub proverka_cifr(ByVal a As String, ByVal sys1 As Double)
priznak = 0
Dim x As Integer
For x = 1 To Len(a)
If InStr(spisok, Mid(a, x, 1)) - 1 >= sys1 Then priznak = 1: Exit For
Next x
End Sub
Sub proverka_simvolov(ByVal a As String, ByVal spisok As String)
priznak = 0
Dim x As Integer
For x = 1 To Len(a)
If CInt(InStr(spisok, Mid(a, x, 1))) = 0 Then priznak = 1: Exit For
Next x
End Sub
Sub init()
'инициализация данных
spisok = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.,"
End Sub