Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Построчное сравнение заданых клеток!? / 18 сообщений из 18, страница 1 из 1
15.05.2006, 11:03:11
    #33726337
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Как правильно задать строчки для сравнения, например:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub CommandButton1_Click()
Dim i, j, k


For i =  1  To  5 
For j = i +  1  To  5 
For k =  3  To  6 


If Worksheets( 1 ).Cells(i, k) = Worksheets( 1 ).Cells(j, k) Then

Worksheets( 1 ).Cells(j, k).Delete

End If
Next
Next
Next
End Sub
если строки с колонки 3 по 6 равны, то должна остаться одна строчка!?
...
Рейтинг: 0 / 0
15.05.2006, 14:48:05
    #33727370
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
В чем собственно проблема? У тебя что-то не получается или ты спрашиваешься, что делает этот код и вообще что ты хочешь получить в итоге?

Распиши на примере таких данных:

Код: plaintext
1.
2.
3.
4.
1	7	8	9
1	7	8	9
3	9	14	19
3	10	15	20
5	6	7	8
...
Рейтинг: 0 / 0
15.05.2006, 15:48:25
    #33727724
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Вот обычная сортировка, хочу сделать то же самое, но
что бы был это модуль, и можно было его использовать
для разных "Range" . Подключить модуль, назначить Range и какие столбцы под суммы - и все дела! А так каждый раз программу перелопачиваю!
Пробовал массивы, но никак со столбцами суммы увязать не могу, вообщем увяз...! Прилагаю файл екселя.
...
Рейтинг: 0 / 0
15.05.2006, 20:29:33
    #33728512
Logayn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Посмотри, можно и без массивов...
...
Рейтинг: 0 / 0
16.05.2006, 09:18:17
    #33728935
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Спасибо, что откликнулись!

Ваша программа сортирует с подсчетом сумм, но не до конца,
обратите внимание , если эти данные скопировать в мою пограмму,
то она отсортирует до конца! Но я все равно посмотрю внимательно
и поразбираюсь, может что добавлю(если получится-сообщу).
В принципе, она бы мне подошла.
...
Рейтинг: 0 / 0
16.05.2006, 14:25:50
    #33729918
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Посмотрел внимательно, нет это не то! Сравнение идет по клеткам в колонке,
а я ищу как сравнивать по строчкам с колонки такой-то по колонку такую-то!

1 2 3 5 6 7 8 9
---------------------
2 5 6 5 9 8 3 5
2 5 6 5 9 8 3 5
2 8 6 6 7 7 3 5
2 5 6 5 9 8 3 5
2 8 6 6 7 7 3 5
---------------------
как мне записать - если строки с 3 колонки по 9 колонку равны?
...
Рейтинг: 0 / 0
16.05.2006, 15:06:38
    #33730073
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Забыл дописать, вот так яснее будет!
Первая и вторая колонки-это количество по строкам, потом они суммируются
согласно одинаковых строк!

есть таблица:
1 2 3 5 6 7 8 9
---------------------
2 5 6 5 9 8 3 5
2 5 6 5 9 8 3 5
2 8 6 6 7 7 3 5
2 5 6 5 9 8 3 5
2 8 6 6 7 7 3 5
---------------------
Результат:
1 2 3 5 6 7 8 9
---------------------
6 15 6 5 9 8 3 5
4 16 6 6 7 7 3 5
---------------------

как мне записать - если строки с 3 колонки по 9 колонку равны...?
...
Рейтинг: 0 / 0
16.05.2006, 16:06:01
    #33730289
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
У тебя ведь написано
Код: plaintext
1.
2.
3.
If (Sheet1.Cells(i,  2 ) = Sheet1.Cells(j,  2 )) _
And (Sheet1.Cells(i,  3 ) = Sheet1.Cells(j,  3 )) _
And (Sheet1.Cells(i,  5 ) = Sheet1.Cells(j,  5 )) _
And (Sheet1.Cells(i,  4 ) = Sheet1.Cells(j,  4 )) Then

если надо для колонок с 3 по 9 то так

Код: plaintext
1.
2.
3.
4.
5.
6.
 If (Sheet1.Cells(i,  3 ) = Sheet1.Cells(j,  3 )) _
And (Sheet1.Cells(i,  4 ) = Sheet1.Cells(j,  4 )) _
And (Sheet1.Cells(i,  5 ) = Sheet1.Cells(j,  5 )) _
And (Sheet1.Cells(i,  6 ) = Sheet1.Cells(j,  6 )) _
And (Sheet1.Cells(i,  7 ) = Sheet1.Cells(j,  7 )) _
And (Sheet1.Cells(i,  8 ) = Sheet1.Cells(j,  8 )) _
And (Sheet1.Cells(i,  9 ) = Sheet1.Cells(j,  9 )) Then
...
Рейтинг: 0 / 0
16.05.2006, 21:09:08
    #33731051
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Да, я и пользуюсь этим способом записи, но каждый раз, чтобы написать
сортировку для нового поля , например, 15 столбцов( из них 14 и 15, например,
количество), я должен перелопачивать программу, вносить изменения!
Вот я и хочу слепить модуль с переменными - размер поля, количество столбцов сравниваемых строк, и какие столбцы для подсчета количества
собственно продукции! Потом , например, в любой новой программе подключить модуль, назначить Range и какие столбцы под суммы - и все дела!
Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
Private Sub CommandButton1_Click()

 numSheet = "Sheet2": startRow =  1 : endRow =  51 : startCol =  3 : endCol =  5 : c1 =  1 : c2 =  2 
        Call Sort

End Sub

Это модуль:

Код: 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.
34.
35.
36.
37.
38.
39.
40.
Public endRow As Integer
Public factEndRow As Integer
Public startCol As Integer
Public endCol As Integer
Public rng As Range, g
Public ic As Integer
Public ir As Integer
Public jr As Integer
Public c1 As Integer
Public c2 As Integer


'====================================================================================
Sub Sort()
Dim Cells() As Integer
Set rng = Worksheets(numSheet).Range("A" & startRow & ":" & "A" & endRow)
Set g = rng.Find(What:="")
 factEndRow = g.row
ReDim Cells(ic) As Integer
For ic = startCol To endCol
For ir = startRow To factEndRow
For jr = ir +  1  To factEndRow
   If Worksheets(numSheet).Cells(jr, c1) = "" _
  And Worksheets(numSheet).Cells(jr, c2) = "" Then GoTo v
'-----------------------------------------------------------
 
 If Worksheets(numSheet).Cells(ir, ic) = Worksheets(numSheet).Cells(jr, ic) Then
'-----------------------------------------------------
Worksheets(numSheet).Cells(ir, c1) = Worksheets(numSheet).Cells(ir, c1) + Worksheets(numSheet).Cells(jr, c1)
Worksheets(numSheet).Cells(ir, c2) = Worksheets(numSheet).Cells(ir, c2) + Worksheets(numSheet).Cells(jr, c1)
Worksheets(numSheet).Cells(jr, ic).Delete
Worksheets(numSheet).Cells(ir, ic) = Worksheets(numSheet).Cells(jr, ic)

v:
End If
Next
Next
Next

'------------------------------------------------
End Sub

Но считает она по клеточкам, поэтому и не фурычит!
Вот если бы по строкам сравнивать, например, "если последующая строка
со столбца 3 по столбец 6 такая же как предыдущая строка со столбца 3 по столбец 6 , то" и т.д
...
Рейтинг: 0 / 0
16.05.2006, 23:08:59
    #33731141
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Для приведенного ранее тобой примера, могу предложить следующий вариант удаления дублирующих строк.

Код: 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.
Public Sub DeleteDuplicateRows()
    Dim rng As Range
    Dim strFormula As String
    Dim intI As Integer
    Dim intRows As Integer
    Dim intCount As Integer
    
    Set rng = ActiveSheet.UsedRange
    intRows = rng.Rows.Count
    
    intI =  1 
    
    Do While intI <= intRows
        strFormula = "SumProduct((" & _
          rng.Columns( 3 ).Address & "=" & rng.Cells(intI,  3 ) & ")*(" & _
          rng.Columns( 4 ).Address & "=" & rng.Cells(intI,  4 ) & ")*(" & _
          rng.Columns( 5 ).Address & "=" & rng.Cells(intI,  5 ) & ")*(" & _
          rng.Columns( 6 ).Address & "=" & rng.Cells(intI,  6 ) & ")*(" & _
          rng.Columns( 7 ).Address & "=" & rng.Cells(intI,  7 ) & ")*(" & _
          rng.Columns( 8 ).Address & "=" & rng.Cells(intI,  8 ) & "))"
    
        intCount = Evaluate(strFormula)

        If intCount >  1  Then
            rng.Rows(intI).EntireRow.Delete shift:=xlShiftUp
            intRows = intRows -  1 
            intI = intI -  1 
        End If
        
        intI = intI +  1 
    Loop
End Sub
...
Рейтинг: 0 / 0
17.05.2006, 11:04:21
    #33731852
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Спасибо, но с пробелами у меня проблем нет, да и мой вариант вроде как
попроще.
Перекопал сколько мог, кажется невозможно написать такой модуль,
придется каждый раз править сортировочную программу, другого выхода не вижу!!!(?)
Спасибо всем!
...
Рейтинг: 0 / 0
17.05.2006, 18:11:51
    #33733627
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
а так пойдет?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Function DeleteEqv(r As Range)
    Dim i As Integer
    Dim j As Integer
    
    Dim isNotEqv As Boolean
    
    i =  1 
    While i < r.Rows.Count
        isNotEqv = True
        
        For j =  1  To r.Columns.Count
            isNotEqv = isNotEqv And (r.Cells(i, j) = r.Cells(i +  1 , j))
        Next j
        If isNotEqv Then
            ThisWorkbook.Worksheets( 1 ).Rows(r.Row +  1 ).Delete
        Else
            i = i +  1 
        End If
    Wend
End Function
и запуск
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Test()
    Dim r As Range
    
    Set r = ThisWorkbook.Worksheets( 1 ).Range("C2:I6")
    
    DeleteEqv r
End Sub
...
Рейтинг: 0 / 0
17.05.2006, 23:47:54
    #33734131
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Спасибо, но это работает с одинаковыми последователными даными, а если
в разбежку- вот так, то увы..!!!
--------------------------
666 777 888
666 777 999
666 777 888
666 777 999
666 777 888
-----------------------------
Не сортирует, а
должно получиться так:
----------------------------
666 777 888
666 777 999
------------------------------
...
Рейтинг: 0 / 0
18.05.2006, 08:13:36
    #33734337
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
А что мешает тебе отсортировать данные?

Попробуй мой вариант, он удаляет строки с повторами вне зависимости от сортировки.
...
Рейтинг: 0 / 0
18.05.2006, 09:51:07
    #33734530
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Ничего не мешает! У меня есть уже нормально работающая программа
по сортировке, я прилагал файл екселя.

авторВот обычная сортировка, хочу сделать то же самое, но
что бы был это модуль, и можно было его использовать
для разных "Range" . Подключить модуль, назначить Range и какие столбцы под суммы - и все дела! А так каждый раз программу перелопачиваю!
Пробовал массивы, но никак со столбцами суммы увязать не могу, вообщем увяз...! Прилагаю файл екселя.
...
Рейтинг: 0 / 0
18.05.2006, 13:52:37
    #33735560
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
vallot Спасибо, но это работает с одинаковыми последователными даными, а если
в разбежку- вот так, то увы..!!!
а что мешает доработать?
Код: 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.
Public Function DeleteEqv(r As Range)
    Dim i As Integer
    Dim j As Integer
    Dim z As Integer
    
    Dim isNotEqv As Boolean
    
    i =  1 
    While i < r.Rows.Count
       
        z = i +  1 
        While z < r.Rows.Count
            isNotEqv = True
            
            For j =  1  To r.Columns.Count
                isNotEqv = isNotEqv And (r.Cells(i, j) = r.Cells(z, j))
            Next j
            If isNotEqv Then
                ThisWorkbook.Worksheets( 1 ).Rows(r.Row + z -  1 ).Delete
            Else
                z = z +  1 
            End If
        Wend
        i = i +  1 
    Wend
End Function
...
Рейтинг: 0 / 0
18.05.2006, 15:17:02
    #33735949
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Если честно, то я зацепился уже за эту строчку-
Код: plaintext
isNotEqv = isNotEqv And (r.Cells(i, j) = r.Cells(i +  1 , j))
пытаюсь подогнать свою же програму по этому принципу,
если получится, обязательно покажу!
...
Рейтинг: 0 / 0
23.05.2006, 15:40:49
    #33745955
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построчное сравнение заданых клеток!?
Ну, вот, как и обещал выкладываю на ваш суд модуль,
можете пользоваться , если понравится , не жалко !!!
А вам , кто откликнулся, всем огромное спосибо !!!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Построчное сравнение заданых клеток!? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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