Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 760
от 22.04.2008, 03:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 289, Экспертов: 40
В номере:Вопросов: 2, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 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"))))), вроде работает,
только надо чтобы если во втором столбце адрес повторялся, то в первом вес складывался и цена в третий столбец выводилась по общему весу, а не по последней строчке с адресом.
Отправлен: 16.04.2008, 16:39
Вопрос задал: Meridian2045 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 24)

Отвечает: megaloman
Здравствуйте, Meridian2045!
Ваша формула примет вид (для ячейки H5) - в Приложении

Размножайте ее на оставшиеся ячейки столбца H

Естественно, столбец E пересчитать на месте нельзя, иначе будет зацикливание.
Если надо сосчитать итоговый вес, например, в столбце J,
то формула для J5 имеет вид

=ЕСЛИ(G5=G6;"";СУММЕСЛИ($G$5:$G$18;G5;$E$5:$E$18))

Размножайте ее на оставшиеся ячейки столбца J

Очень длинная строка
-----
∙ Отредактировал: Shapoklak (Академик)
∙ Дата редактирования: 16.04.2008, 20:38

Приложение:

---------
Нет времени на медленные танцы

Ответ отправил: 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

Приложение:

Отправлен: 16.04.2008, 20:49
Вопрос задал: Lordaleksej (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Черников Игорь Владимирович
Здравствуйте, Lordaleksej!
Вот Ваш исправленный код.
Удачи!

Приложение:

---------
От каждого по способностям, каждому по труду

Ответ отправил: Черников Игорь Владимирович (статус: Студент)
Ответ отправлен: 19.04.2008, 16:12
Оценка за ответ: 5


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.91 pre 5.0 RC1 от 13.04.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное