Форум

им. Зелёного Батискафа

АвторСообщение



Зарегистрирован: 05.03.07
Откуда: Россия, Тюмень
ссылка на сообщение  Отправлено: 25.01.10 12:36. Заголовок: Сравнение списков VBA


 
Sub sravncell()
'Прога для сравнения двух массивов ячеек на листе "Лист2"
'Плюшка пока не дописана, но to be continued!


Dim Ok(10000, 1) As String 'Массив, в котором хранятся имена(0) и адреса(1), совпадающие в обоих массивах
Dim BE1(10000, 1) As String '->>-, которые есть только в первом массиве
Dim BE2(10000, 1) As String '->>-, которые есть только во втором массиве
Dim indOk As Integer 'Отсель, индексы соответствующих массивов...
Dim indBE1 As Integer
Dim indBE2 As Integer '...вот до сель
Dim aDr1 As Integer 'Номера первой...
Dim aDr2 As Integer 'и второй строки, соответственно
Dim CHsize1 As String 'Размеры(по ширине)...
Dim CHsize2 As String '...сортируемых массивов
Dim kui As Integer 'Счётчик
Dim Ksize1 As String 'Размеры(количество строк)...
Dim Ksize2 As String '...сортируемых массивов


CHsize1 = "a1:b1"
CHsize2 = "d1:e1"

'''''''''''''''''''''''''''''''''''Дыва'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Columns(Left(CHsize2, 1) & ":" & Mid(CHsize2, 4, 1)).Select
ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Columns(Left(CHsize2, 1)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Лист2").Sort
.SetRange Range(Left(CHsize2, 1) & ":" & Mid(CHsize2, 4, 1))
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Range(Left(CHsize2, 2)).Select
Ksize2 = 0
Do While ActiveCell.Offset(Ksize2 + 1, 0) <> ""
Ksize2 = Ksize2 + 1
Loop
''''''''''''''''''''''''''''''''''''''''''''''''Енд два''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''Адын''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Columns(Left(CHsize1, 1) & ":" & Mid(CHsize1, 4, 1)).Select 'Сортировка с счёт количества записей по первому массиву
ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Columns(Left(CHsize1, 1)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Лист2").Sort
.SetRange Range(Left(CHsize1, 1) & ":" & Mid(CHsize1, 4, 1))
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Range(Left(CHsize1, 2)).Select
Ksize1 = 0
Do While ActiveCell.Offset(Ksize1 + 1, 0) <> ""
Ksize1 = Ksize1 + 1
Loop 'Вот до этого места
''''''''''''''''''''''''''''''''''''Енд адын''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|Сравнение_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|_+|
indOk = -1
indBE1 = -1
indBE2 = -1
aDr1 = -1
aDr2 = 0
Do While aDr1 < Ksize1
aDr1 = aDr1 + 1
If ActiveCell.Offset(aDr1, 0) = ActiveCell.Offset(aDr2, 0).Range(Left(CHsize2, 2)) Then
indOk = indOk + 1
Ok(indOk, 0) = ActiveCell.Offset(aDr1, 0)
Ok(indOk, 1) = aDr1
If aDr2 < Ksize2 Then aDr2 = aDr2 + 1
ElseIf ActiveCell.Offset(aDr1, 0) < ActiveCell.Offset(aDr2, 0).Range(Left(CHsize2, 2)) Then
indBE1 = indBE1 + 1
BE1(indBE1, 0) = ActiveCell.Offset(aDr1, 0)
BE1(indBE1, 1) = aDr1
ElseIf ActiveCell.Offset(aDr1, 0) > ActiveCell.Offset(aDr2, 0).Range(Left(CHsize2, 2)) And aDr2 < Ksize2 Then
indBE2 = indBE2 + 1
BE2(indBE2, 0) = ActiveCell.Offset(aDr2, 0).Range(Left(CHsize2, 2))
BE2(indBE2, 1) = aDr2
If ActiveCell.Offset(aDr1, 0) >= ActiveCell.Offset(aDr2, 0).Range(Left(CHsize2, 2)) Then aDr1 = aDr1 - 1
If aDr2 < Ksize2 Then aDr2 = aDr2 + 1
Else
indBE1 = indBE1 + 1
BE1(indBE1, 0) = ActiveCell.Offset(aDr1, 0)
BE1(indBE1, 1) = aDr1
End If
Loop

Do While aDr2 <= Ksize2
indBE2 = indBE2 + 1
BE2(indBE2, 0) = ActiveCell.Offset(aDr2, 0).Range(Left(CHsize2, 2))
BE2(indBE2, 1) = aDr2
aDr2 = aDr2 + 1
Loop
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Конец сравнения'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Application.ScreenUpdating = False

For kui = 0 To indOk
ActiveCell.Offset(Ok(kui, 1), 0).Range(CHsize1).Copy
ActiveCell.Offset(kui, 10).Range(CHsize1).Select
ActiveSheet.Paste
Range(Left(CHsize1, 2)).Select
Next kui

For kui = 0 To indBE1
ActiveCell.Offset(BE1(kui, 1), 0).Range(CHsize1).Copy
ActiveCell.Offset(kui, 20).Range(CHsize1).Select
ActiveSheet.Paste
Range(Left(CHsize1, 2)).Select
Next kui

For kui = 0 To indBE2
ActiveCell.Offset(BE2(kui, 1), 0).Range(CHsize2).Copy
ActiveCell.Offset(kui, 20).Range(CHsize2).Select
ActiveSheet.Paste
Range(Left(CHsize1, 2)).Select
Next kui

Application.ScreenUpdating = True
End Sub


Вопрос: Что это за белое вещество в птичьем дерьме?
Ответ: Это тоже птичье дерьмо.
Спасибо: 0 
Профиль Цитата Ответить
Ответов - 1 [только новые]


нострадамус




Зарегистрирован: 14.06.06
ссылка на сообщение  Отправлено: 01.02.10 15:46. Заголовок: попробуй отступами п..


попробуй отступами пользоваться в коде

Бесконечность - это не предел. Спасибо: 0 
Профиль Цитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  5 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия