Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сортировка диапазона данных VBA / 3 сообщений из 3, страница 1 из 1
17.11.2009, 08:06
    #36313890
andMegaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка диапазона данных VBA
Всем привет. Имеется такая табличка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  A       B       C         D        E
 199 . 63 	 177 . 312 	 206 . 2632    184 . 59    188 . 365   

 100 . 32 	 88 . 8864 	 103 . 0224    102 . 58    102 . 816 

 87 . 45    Null    91 . 4784     84 . 65     87 . 678 

Null    Null     Null      Null    Null


 82 . 43 	          85 . 5234     78 . 30    89 . 61 

Необходимо построчно отсортировать в возрастающем порядке все числа.
Причем
1. Eсли в строке встречается NULL, то в сортировке данное значение учавствовать не

должно.

Т.е. из строки :
Код: plaintext
 87 . 45    Null    91 . 4784     84 . 65     87 . 678 

Должна получиться

Код: plaintext
 84 . 65    87 . 45     87 . 678     91 . 4784 

2. Если в диапазоне, например Range ("A10:E10"), встречаются одинаковые значения, то

повторяющееся значение должно быть удалено.

Как осуществить такое?
...
Рейтинг: 0 / 0
17.11.2009, 09:32
    #36314002
andMegaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка диапазона данных VBA
Слелал так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Option Base  1 
Private Sub PArraySort()
Dim MyArray( 1  To  5 )

Application.ScreenUpdating = False
For i =  1  To ActiveCell.SpecialCells(xlLastCell).Row
     For j =  1  To  5 
       MyArray(j) = Cells(i, j).Value
     Next j
       Call MyArraySort(MyArray)
     For k =  1  To  5 
        Cells(i, k +  6 ).Value = MyArray(k)
     Next k
Next i
 Application.ScreenUpdating = True
End Sub

Function MyArraySort(List())
'Функция сортировки массива
     Dim First As Integer, Last As Integer
     Dim i As Integer, j As Integer
     
  First = LBound(List): Last = UBound(List)

For i = First To Last
     For j = i +  1  To Last
       If List(i) > List(j) Then
          Temp = List(j)
          List(j) = List(i)
          List(i) = Temp
       End If
     Next j
Next i
End Function
Но возникает вопрос как из массива удалять элементы, значения которых равны Null
...
Рейтинг: 0 / 0
17.11.2009, 11:28
    #36314287
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка диапазона данных VBA
А разве в Экселе есть значение NULL ? Мне кажется, это просто строка. При сортировке Эксель бросит ее в самый конец (строка всегда больше чем число). Когда будете выводить на лист, проверяете значение на "NULL" и если True ничего не выводите.
Код: plaintext
Cells(i, k +  6 ).Value = IIF(MyArray(k)="NULL","",MyArray(k))
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сортировка диапазона данных VBA / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]