Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Выделить ячейки на указанную сумму
 
Добрый день. Помогите решить задачу средствами VBA.
Существует стоблец значений, нужно выделить (цветом заливки) любое количество ячеек, на сумму указанную пользователем.
Подбор слагаемых до нужной суммы с любым первым совпавшив количеством
 
Добрый день!
Помогите создать макрос который будет считать массу брутто. Принцип такой: макрос должен запрашивать у пользователя количество единиц на которое нужно добавить массу, и потом на это количество добавлять по 7 кг на единицу. Но добавлять нужно только на позиции у которых "КОД УКТ" = 9401710000.

Пример прикрепил, в нем я уже добавил по 7 кг на 155 единиц в позициях с кодом укт = 9401710000.

На первый взгляд мне показалось довольно просто написать такую программу, но потом понял что есть исключения, и при последовательном добавлении массы на каждую позицию, может оказаться в конце что последняя позиция имеет больше единиц чем нужное количество. Поэтому надо как-то из этого диапазона единиц (в рамках нужного кода) отобрать те позиции которые в сумме дадут строго заданое значение. И уже тогда только в них добавить по 7 кг на шт.
Метод сортировки в зависимости от содержания строки
 
Добрый день!
Будьте добры, помогите создать метод, который будет принимать строку, и в зависимосоти от ее содержания возвращать соответствующий символ.
На практике, у меня есть список моделей, каждой из них нужно назначить "тип модели".
Определения "типа модели" происходит по ряду таких критериев:
1. Если строка (название модели) вмещает одну из строк которые я предвадительно записал в массив строк 1, тогда тип "a".
2. Если строка (название модели) заканчивается на одну из строк которые я предвадительно записал в массив строк 2, тогда типа "b".
3. Если строка (название модели) начинается на одну из строк которые я предвадительно записал в массив строк 3, тогда типа "z".
4. Если строка (название модели) полностью равна одной из строк которые я предвадительно записал в массив строк 4, тогда типа "q".
5. Если строка (название модели) начинается на одну из строк которые я предвадительно записал в массив строк 5, и при этом заканчивается на одну из строк которые я предвадительно записал в массив строк 6, тогда типа "u".
6. Если строка (название модели) вмещает одну из строк которые я предвадительно записал в массив строк 7, но не содержит при этом ни одной из строк которые я предвадительно записал в массив строк 8, тогда типа "k".
7. Если не выполнено ни одно из условий, тогда записать тип "s".

Только критерии надо брать из массива в коде, а не из таблицы на листе (ее для наглядности сделал).

Файл прикрепил, вот код:
Код
Sub определить_типы()

Dim mass1(), mass2(), mass3(), mass4(), mass5(), mass6(), mass7(), mass8() As Variant

' вмещает
mass1 = Array("AR", "F70", "N11F", "LR", "LLB")
' заканчивается
mass2 = Array("L60", "H00", "F60L", "N72", "K3")
' начинается
mass3 = Array("11", "13", "31", "33")
' равно
mass4 = Array("40400", "1884LST", "1785K")
' начинается на элемент из mass5 и заканчивается на элемент из mass6
mass5 = Array("31", "37", "51", "71", "76")
mass6 = Array("S00", "M00", "L00")
' если элемент из содержит mass7, но не содержит элемент из mass8
mass7 = Array("NF")
mass8 = Array("CO")

lr = Cells(1, 1).End(xlDown).Row
    For i = 2 To lr
        Cells(i, 2).Value = получить_тип_модели(Cells(i, 1).Value)
    Next i
End Sub

Private Sub получить_тип_модели(model_name As String)

' тут опредиление типа

End Sub
Изменить высоту ячеек определенного диапазона, в зависимости от содержания последней страницы печати
 
Здравствуйте, уже 2ой день мучаюсь написать макрос, который бы увеличивал высоту ячеек определенного диапазона, если последняя строка этого диапазона, не находится на одной странице печати что и последняя строка активного листа.
Вначале я задаю параметры печати, потом вычислял последнюю строку нужного мне диапазана, последнюю строку всего листа, и страницы на котоых эти строки находятся, потом сравнивал эти номера страниц. Если эти строки нахядятся на одном листе печати, то ничего не делать, все хорошо. А если на разных, следовательно нужно увеличивать на 1 единицу высоту ячеек заданого диапазона до тех пор, пока в результате, на последней странице печати, будет как минимум последняя строка определенного диапазона.

Прилагаю наглядные скрины и код.
У меня зацикливается выполнение кода, не понимаю что делать. Вот код, я новичек в написании макросов, и плохо понимаю алгоритмы, но вот что у меня получилось:
Код
Sub формат_печати_последней_страницы()

Dim numAllPages As Long
Dim lastRowDiap As Long
Dim lastRowSheet As Long
Dim numlastRowDiapPage As Long
Dim numlastRowSheetPage As Long

' задать параметры печати
With Worksheets(1).PageSetup
 .LeftMargin = Application.InchesToPoints(0)
 .RightMargin = Application.InchesToPoints(0)
 .TopMargin = Application.InchesToPoints(0)
 .BottomMargin = Application.InchesToPoints(0)
 .HeaderMargin = Application.InchesToPoints(1.3)
 .FooterMargin = Application.InchesToPoints(1.3)
End With

With Worksheets(1).PageSetup
 .Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = 1000
End With

' узнать количество страниц печати
ActiveWindow.View = xlPageBreakPreview
numAllPages = Worksheets(1).HPageBreaks.Count + 1


' записать номер страницы где находится последняя строка всего листа
numlastRowSheetPage = numAllPages

' узнать номер последней строки из определенного диапазона
lastRowDiap = Cells(10, 1).End(xlDown).Row

' узнать номер последней строки из всего листа
last = Cells(10, 6).End(xlDown).Row
lastRowSheet = Cells(last, 6).End(xlDown).Row

' узнать номер страницы где находится последняя строка нашего диапазона
Cells(lastRowDiap, 1).Activate
For i = 1 To ActiveSheet.HPageBreaks.Count
    If ActiveCell.Row < ActiveSheet.HPageBreaks(i).Location.Row - 1 Then Exit For
Next
numlastRowDiapPage = i

' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
' условие если последние строки на разных страницах
Do Until numlastRowDiapPage = numlastRowSheetPage
lr = Cells(11, 1).End(xlDown).Row
rowHei = Range(Cells(11, 1), Cells(lr, 1)).RowHeight
rowHei = rowHei + 1

' узнать количество страниц печати
ActiveWindow.View = xlPageBreakPreview
numAllPages = Worksheets(1).HPageBreaks.Count + 1
ActiveWindow.View = xlNormalView

' записать номер страницы где находится последняя строка всего листа
numlastRowSheetPage = numAllPages

' узнать номер последней строки из определенного диапазона
lastRowDiap = Cells(10, 1).End(xlDown).Row

' узнать номер последней строки из всего листа
last = Cells(10, 6).End(xlDown).Row
lastRowSheet = Cells(last, 6).End(xlDown).Row

' узнать номер страницы где находится последняя строка нашего диапазона
Cells(lastRowDiap, 1).Activate
For i = 1 To ActiveSheet.HPageBreaks.Count
    If ActiveCell.Row < ActiveSheet.HPageBreaks(i).Location.Row - 1 Then Exit For
Next
numlastRowDiapPage = i
Loop
' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ActiveWindow.View = xlNormalView
MsgBox ("Количество всех страниц: " & numAllPages & "; " & "Последняя строка в диапазоне: " & lastRowDiap & "; " & "Последняя строка на листе: " & lastRowSheet & "; " & "Номер страницы строки диапазона: " & numlastRowDiapPage & "; " & "Номер страницы последней строки: " & numlastRowSheetPage & "; ")

End Sub

Изменено: Юрий Адамец - 29.10.2020 13:48:10
Создание одной таблицы из двух разных (присвоить изделиям этикетки)
 
Здравствуйте, помогите создать макрос для создания определенной таблицы, из имеющихся двух таблиц. Словами трудно объяснить, покажу рисунком, и прикреплю файл пример задачи с решением. Количество строк в листах "Отчет" и "Нормы" всегда разное, а количество столбцов не меняется. Но еще, чтоб значение в строку "Синтепон UA" из листа "Нормы" в будущую таблицу копировались из листа "Отчет" колонки "H".
Как разделить таблицу Excel на файлы с расширением *csv по критерию первого столбца
 
Здравствуйте, посоветуйте пожалуйста, как мне разделить таблицу эклесь (файл прикрепил) на файлы с расширением *csv, по критерию первого столбца.
В результате должно получится, столько файлов в формате *csv, сколько уникальных значений в первом столбце.

Для примера:
1 файл: название inv 0977, внутри все строки, в которых в первом столбце есть значение inv 0977.
2 файл: название inv 0978, внутри все строки, в которых в первом столбце есть значение inv 0978.
3 файл: название inv 0979, внутри все строки, в которых в первом столбце есть значение inv 0979.
и так далее.

И чтоб еще в созданных файлах сразу по умолчанию, создавались нужные названия столбцов, и эти части таблицы помещались под нужные столбцы. А один из этих столбцов был заполнено заданных значением (неизменяемым, константой).

файл который надо разделить и 3 файла как должно быть на выходе прикрепил.
Страницы: 1
Наверх