1

Тема: VBS. Сортировка содержимого ячеек в Excel

Здравствуйте. Есть такая задача отсортировать 5 колонок по содержимому одной из колонок. Макрос на VBA получается следующий:

Sub Макрос5()
'
' Макрос5 Макрос
'

'
    ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("B13"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Лист1").Sort
        .SetRange Range("B14:F18")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

К сожалению у меня не получается перевести это на язык, понятный VBS. Если кто-нибудь сталкивался с данной проблемой - поделитесь примером кода на VBS. Или подскажите, как можно это сделать или где подглядеть.

2

Re: VBS. Сортировка содержимого ячеек в Excel

Вы можете детальнее описать какая сортировка вам нужна?

3 (изменено: Vasek, 2012-03-31 14:38:46)

Re: VBS. Сортировка содержимого ячеек в Excel

Пример проверялся в Excel 2007, работате с двумя колонками, на вход берутся данные из двух лежащих со сценарием файлов.


' Нужен для полноты примера
Set FSO = CreateObject("Scripting.FileSystemObject")
' Нужен для полноты примера
Set InFile = FSO.OpenTextFile("test.txt")
' Нужен для полноты примера
Set InFile1 = FSO.OpenTextFile("test1.txt")
' Объект приложения
Set xEl = CreateObject("Excel.Application")
' Это свойство чтобы увидеть объект
xEl.Visible = True
' Создается книга
xEl.Workbooks.Add

' Выполнять до конца файла
Do Until InFile.AtEndOfStream
	' Пишем строку первого файла
	xEl.Workbooks(1).ActiveSheet.Cells(InFile.Line - 1, 1) = InFile.ReadLine
	' Пишем строку второго файла
	xEl.Workbooks(1).ActiveSheet.Cells(InFile1.Line - 1, 2) = InFile1.ReadLine
Loop

' Определение диапазона для сортировки
With xEl.Workbooks(1).ActiveSheet.UsedRange
		iRow = .Row + .Rows.Count - 1 ' Последняя строка
		iCol = .Column + .Columns.Count - 1 ' Последний столбец
End With

' Для того чтобы в каждом столбце произошла подгонка по ширине	
For k = 1 to iCol
	xEl.Workbooks(1).ActiveSheet.Cells(iRow, k).EntireColumn.AutoFit
Next

' Для того чтобы поэксперементировать с диапазоном, если снимите комент то увидите где именно находится диапазон
'xEl.Workbooks(1).ActiveSheet.Range(xEl.Workbooks(1).ActiveSheet.Cells(1,1),xEl.Workbooks(1).ActiveSheet.Cells(iRow,iCol)).select
Set objRange = xEl.Workbooks(1).ActiveSheet.Range(xEl.Workbooks(1).ActiveSheet.Cells(1,1),xEl.Workbooks(1).ActiveSheet.Cells(iRow,iCol))
Set objRange2 = xEl.Range("B1")' - Здесь указывается именно та колонка, по которой вы будите сортировать
objRange.Sort objRange2,,,,,,,2,,,1,1' сам метод
Wscript.Echo "Готово"

4

Re: VBS. Сортировка содержимого ячеек в Excel

Спасибо, работает.

Vasek пишет:

Вы можете детальнее описать какая сортировка вам нужна?

Нужна простая сортировка в алфавитном порядке. Сортируется значение только одной колонки (колонка "B" - инвентарные номера документов), в других колонках записана атрибутная часть данных документов, от ячеек этих колонок нужно только перемещение вместе с номером своего документа

Vasek пишет:

objRange.Sort objRange2,,,,,,,2,,,1,1' сам метод

А можно где-нибудь на русском(в крайнем случае на английском) почитать описание этого метода? Хотелось бы для общего развития узнать о нем более подробно. Не поделитесь ссылочкой?

5

Re: VBS. Сортировка содержимого ячеек в Excel

А можно где-нибудь на русском(в крайнем случае на английском) почитать описание этого метода?

Запрос вида: Excel Range Sort site:microsoft.com - Поиск в Google, оттуда приходим к статье в MSDN: Range.Sort Method (Excel).

6

Re: VBS. Сортировка содержимого ячеек в Excel

Или в самом экселе есть встроенный visual basic в нем есть объктный браузер

7

Re: VBS. Сортировка содержимого ячеек в Excel

Спасибо за информацию