Новости:

Из правил форума: Тема должна отражать суть вопроса, топики типа "help please" будут удаляться!

Главное меню

Помогите с расчетами

Автор Мигель, 16.08.2011, 09:33

« назад - далее »

Мигель

nilem Спасибо большое! То что надо!

GWolf я просто не понял, что Гарнаев это автор книги, уже скачал, и теперь постараюсь вникнуть в эти For ... Next - ы

nilem

С повышенной степенью автоматизации. Ничего выделять не надо.

Мигель

Вообще чудеса! :D Спасибо! Осталось разобраться с сортировкой деталей, ну это я попробую сам сделать.

Мигель

Всем доброго времен суток, это опять я!

Пытаюсь сделать сортировку данных. Составил для этого алгоритм

1. Делаем активной первую строку
2. Перебираем строки до первого заголовка
3. Запоминаем то, что написано в заголовке
4. Выделяем заголовок и строки после заголовка до появленя пустой строки или до появления следующего заголовка.
5. Вырезаем выделенное
6. Вставляем вырезанное в последнюю строку Листа2 (этого же файла)
7. Перебираем строки дальше до нахождения запомненного заголовка в п.2
8. при нахождении следующего заголовка удаляем его.
9. Вырезаем всё что ниже заголовка до появления пустой строки или нового заголовка
10. Зацикливание с п.6 по п.8
11. Дойдя до конца документа возвращаемся в п.1

Это я так делал вручную, этот же алгоритм пойдет для програмного кода?

Теперь пробую это перевести в язык понятный VBA


Public Sub Sort ()

Workbooks("Всё вместе(пробаМакроса)").Worksheets("Лист1").Range("A1").Select 'Сделать активной ячейку А1

Dim strЗаголовок As String, lr&, wb As Workbook, lb As Workbook
strЗаголовок = objCell.text 'заголовок это объект ячейка имеющая свойство текст
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With

      Set wb = Workbooks.Worksheets("Лист2") 'wb-лист накопитель Лист2
Set lb = Workbooks.Worksheets("Лист1")   'lb-лист источник Лист1
Set blok = .UsedRange 'определение границы занятой данными области
nREnd = blok.Row + blok.Rows.Count - 2 'не понимаю значение этой строки
Set blok = Nothing 'не понимаю значение этой строки
lr = wb.Cells(Rows.Count, 1).End(xlUp).Row ' lr - номер последней не пустой строки листа-накопителя
ls = lb.Cells(Rows.Count, 1).End(xlUp).Row      ' ls - номер последней не пустой строки листа-источника
If objCell.text (Камаз) then 'если объект ячейка со свойством текст имеет текст (Камаз), то
i = 0
.Cells(i,3).select
Selection.EntireRow.Сut wb.Cells(ls + 1, 1) 'вырезать выбранные в файле-источнике строки после последней не пустой строки в файл-накопитель
For i = nREnd To 4 Step -1 ' перемещение от конца к началу
Next i
Else
Exit Function
End If
End With
End Sub


Естественно ничего не работает... Чего я тут наворотил?
И правильно ли я трактую текст кода?

nilem

Попытался что-то написать точно по алгоритму - не получилось (без коллекций уже никак  :))
Вот вариант, приближенный, насколько возможно.

ЗЫ Почему-то xlsm не прикрепляется.

Мигель

Огромнейшее спасибо!!!  :D Путь не важен, важен результат :)

Мигель

Цитата: nilem от 22.08.2011, 21:16
Если даты спаренные, типа "18.04.2005 - 05.05.2005; 25.04.2005 - 05.05.2005", значит часть этого количества была реализована в первый период, вторая - во второй. Вместо периодов можно просто кол-во дней писать.

Не подскажите как это сделать?

nilem

ЦитироватьВместо периодов можно просто кол-во дней писать.
Вот ведь, напросился  :)

На Лист1 жмем стрелку 1 (сортировка), на Лист2 - стрелку 2 (даты и кол-во дней).