powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Построчное сравнение заданых клеток!?
18 сообщений из 18, страница 1 из 1
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #33727724
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот обычная сортировка, хочу сделать то же самое, но
что бы был это модуль, и можно было его использовать
для разных "Range" . Подключить модуль, назначить Range и какие столбцы под суммы - и все дела! А так каждый раз программу перелопачиваю!
Пробовал массивы, но никак со столбцами суммы увязать не могу, вообщем увяз...! Прилагаю файл екселя.
...
Рейтинг: 0 / 0
Построчное сравнение заданых клеток!?
    #33728512
Logayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотри, можно и без массивов...
...
Рейтинг: 0 / 0
Построчное сравнение заданых клеток!?
    #33728935
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, что откликнулись!

Ваша программа сортирует с подсчетом сумм, но не до конца,
обратите внимание , если эти данные скопировать в мою пограмму,
то она отсортирует до конца! Но я все равно посмотрю внимательно
и поразбираюсь, может что добавлю(если получится-сообщу).
В принципе, она бы мне подошла.
...
Рейтинг: 0 / 0
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #33731852
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но с пробелами у меня проблем нет, да и мой вариант вроде как
попроще.
Перекопал сколько мог, кажется невозможно написать такой модуль,
придется каждый раз править сортировочную программу, другого выхода не вижу!!!(?)
Спасибо всем!
...
Рейтинг: 0 / 0
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #33734337
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что мешает тебе отсортировать данные?

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

авторВот обычная сортировка, хочу сделать то же самое, но
что бы был это модуль, и можно было его использовать
для разных "Range" . Подключить модуль, назначить Range и какие столбцы под суммы - и все дела! А так каждый раз программу перелопачиваю!
Пробовал массивы, но никак со столбцами суммы увязать не могу, вообщем увяз...! Прилагаю файл екселя.
...
Рейтинг: 0 / 0
Построчное сравнение заданых клеток!?
    #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
Построчное сравнение заданых клеток!?
    #33735949
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если честно, то я зацепился уже за эту строчку-
Код: plaintext
isNotEqv = isNotEqv And (r.Cells(i, j) = r.Cells(i +  1 , j))
пытаюсь подогнать свою же програму по этому принципу,
если получится, обязательно покажу!
...
Рейтинг: 0 / 0
Построчное сравнение заданых клеток!?
    #33745955
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, вот, как и обещал выкладываю на ваш суд модуль,
можете пользоваться , если понравится , не жалко !!!
А вам , кто откликнулся, всем огромное спосибо !!!
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Построчное сравнение заданых клеток!?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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