Консультация № 195740
28.05.2019, 13:22
0.00 руб.
28.05.2019, 14:21
0 6 2
Всем Здравствуйте! Прошу помощи, необходимо составить программу в [b]VBA Excel c помощью макросов.[/b] Задание такое: Составить список товаров, стоимость которых больше заданной. То есть будет таблица с такими столбцами "Название товара" и "Стоимость". По нажатию кнопки нужно чтобы появлялось окно с вводом
цены, и программа на другом листе должна создать такую же таблицу , только с теми товарами с ценовой категорией меньше заданной. Заранее спасибо!

Обсуждение

давно
Советник
400484
472
29.05.2019, 10:21
общий
это ответ
Здравствуйте, Sashasss3
Вот пример кода:
Код:

Private Sub CommandButton1_Click()
Dim cell As Range
Dim value As Double
numCell = 2
Set rgData = Range("B2:B11")
s = Replace(TextBox1.value, ".", ",")
value = CDbl(s)

Set myList = Worksheets.Add(After:=Worksheets(Worksheets.Count))
myList.Cells(1, 1) = Sheets("Лист1").Cells(1, 1)
myList.Cells(1, 2) = Sheets("Лист1").Cells(1, 2)

For Each cell In rgData
If cell.value > value Then
myList.Cells(numCell, 1) = Sheets("Лист1").Cells(cell.Row, cell.Column - 1)
myList.Cells(numCell, 2) = Sheets("Лист1").Cells(cell.Row, cell.Column)
numCell = numCell + 1
End If
Next
UserForm1.Hide
End Sub

Во вложение пример.
Прикрепленные файлы:
0a70a779fbb53825eaed0605f9e9505a35c491fb.zip
давно
Модератор
137394
1850
29.05.2019, 20:13
общий
это ответ
Здравствуйте, Sashasss3!
Мой вариант решения: таблица ya19052920.xlsm (38.8 кб)
Макрос:
Код:
Sub RRR()

Shapka = "B2:C3" ' Область шапки
RFil = "C3" ' Ячейка с фильтром по цене
RName = "B3" ' Ячейка с шапкой с названиями (товар обязательно должен иметь название)
Info = "C1" ' Ячейка куда запишется значение фильтра в выходной форме

NewList = "Отобрано" ' Имя листа, если выборка делается на один и тот же лист

R1 = Mid(Shapka, 1, InStr(1, Shapka, CStr(Range(Shapka).Row) + ":") - 1) + "1"

ACol = Replace(Shapka, CStr(Range(Shapka).Row) + ":", ":")
FRow = Range(Shapka).Cells(Range(Shapka).Count).Row
ACol = Replace(ACol, CStr(FRow), "")

iFil = 1 + Range(RFil).Column - Range(Shapka).Column ' Номер столбца в шапке для фильтра

iReestr = ActiveSheet.Index

CGod = InputBox("Введите цену товара", "Отбор товара не более указанной цены")

If CGod = "" Then Exit Sub
If Not IsNumeric(CGod) Then
MsgBox "Введенное значение цены" + vbCrLf + vbCrLf + """" + CGod + """" + vbCrLf + vbCrLf + "не число"
Exit Sub
End If

God = CCur(CGod)
If God < 0 Then
MsgBox "Введенное значение цены" + vbCrLf + vbCrLf + """" + CGod + """" + vbCrLf + vbCrLf + "не корректно"
Exit Sub
End If

'NewList = CGod ' Закомментировать, чтобы выборка делалась на один лист
' Иначе выборка для каждой цены будет на отдельном листе со значением цены
Application.DisplayAlerts = False
On Error Resume Next
Sheets(NewList).Delete
On Error GoTo 0
Application.DisplayAlerts = True
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = NewList

iNew = ActiveSheet.Index

Sheets(iReestr).Select
Columns(ACol).Copy

Sheets(iNew).Select
Range(R1).Select
Range(R1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Sheets(iReestr).Select
AFiltr = Replace(ACol, ":", CStr(Range(Shapka).Row + 1) + ":") + CStr(Range(RName).End(xlDown).Row)

ActiveSheet.Range(AFiltr).AutoFilter Field:=iFil, Criteria1:="<=" + Replace(CGod, ",", "."), Operator:=xlAnd

Columns(ACol).Copy
Sheets(iNew).Select
Range(R1).Select
ActiveSheet.Paste
Sheets(iReestr).Select
Selection.AutoFilter
Range(R1).Select
Sheets(iNew).Select
Range(Info) = "<=" + CGod
Range(Info).Select

End Sub

Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
29.05.2019, 20:21
общий
Адресаты:
Похоже на Когнити́вный диссона́нс
Цитата: Sashasss3
Составить список товаров, стоимость которых больше заданной.
Цитата: Sashasss3
программа на другом листе должна создать такую же таблицу , только с теми товарами с ценовой категорией меньше заданной
У меня в коде <=. Уточняйте условие.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
403001
2
29.05.2019, 22:16
общий
Адресаты:
А где в данном коде поменять на то чтобы он показывал товары не меньшей стоимости , а наоборот больше заданной?
давно
Модератор
137394
1850
29.05.2019, 23:02
общий
29.05.2019, 23:07
Адресаты:
не проверял, завтра доберусь до компьютера.
В двух местах поменять "<=" на ">" или, если надо, ">=", в зависимости от того, что реально нужно.
Еще лучше, это условие прописать в начале в строковой переменной, что позволит в одном месте при желании изменять условия отбора и не искать эти условия в коде.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
30.05.2019, 09:27
общий
30.05.2019, 09:34
Адресаты:
Вот вариант таблицы: ya190530.xlsm (39.8 кб) Условие сравнения задаётся среди настроечных параметров. Изменения кода самые минимальные.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа