Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Объединение дубликатов при условии - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Объединение дубликатов при условии
Kioto Дата: Воскресенье, 12.02.2017, 18:54 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, уважаемые, недавно мне сделали макрос, но мной была упущено одно условие, при котором нужно изменить макрос.
Проблема в том, что, когда макрос работает, он дублирует даты посещений, чтобы этого не было нужно прописать в нём, чтобы он добавлял даты на другой лист, если стоит в столбце O стоит услуга "Выезд".
К сообщению приложен файл: 3450162-1-.xls (56.0 Kb)
 
Ответить
СообщениеЗдравствуйте, уважаемые, недавно мне сделали макрос, но мной была упущено одно условие, при котором нужно изменить макрос.
Проблема в том, что, когда макрос работает, он дублирует даты посещений, чтобы этого не было нужно прописать в нём, чтобы он добавлял даты на другой лист, если стоит в столбце O стоит услуга "Выезд".

Автор - Kioto
Дата добавления - 12.02.2017 в 18:54
Udik Дата: Воскресенье, 12.02.2017, 22:24 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Так надо?
[vba]
Код

Public Sub tt()
    Dim wsh1 As Worksheet, wsh2 As Worksheet
    Dim i As Long, rowLast&, rowCurr&, clnUslug&
    Dim rng1 As Range
    Dim oDict As Object
    
    Set wsh1 = Worksheets("Лист1")
    wsh1.Activate
    wsh1.Cells(1, 1).Select
    
    Set rng1 = wsh1.Cells.Find(What:="услуга", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False)
    If rng1 Is Nothing Then Exit Sub
    clnUslug = rng1.Column
    Set rng1 = wsh1.Cells.Find(What:="ФИО", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False)
    If rng1 Is Nothing Then Exit Sub
    rowLast = wsh1.Cells(Rows.Count, rng1.Column).End(xlUp).Row
    Set oDict = CreateObject("Scripting.Dictionary")
    
    With wsh1
        
        Set wsh2 = Worksheets.Add(After:=wsh1)
        .Cells(1, rng1.Column).Copy wsh2.Cells(1, 1) 'копируем заголовки
        .Cells(1, 7).Copy wsh2.Cells(1, 2)
        .Cells(1, 12).Copy wsh2.Cells(1, 3)
        .Cells(1, 10).Copy wsh2.Cells(1, 4)
        .Cells(1, 2).Copy wsh2.Cells(1, 5)
        rowCurr = 2
        For i = 2 To rowLast
            If .Cells(i, clnUslug).Value = "выезд" Then
                
                If Not oDict.exists(.Cells(i, rng1.Column).Value) Then
                    oDict(.Cells(i, rng1.Column).Value) = rowCurr
                    .Cells(i, rng1.Column).Copy wsh2.Cells(rowCurr, 1)
                    .Cells(i, 7).Copy wsh2.Cells(rowCurr, 2)
                    .Cells(i, 12).Copy wsh2.Cells(rowCurr, 3)
                    .Cells(i, 10).Copy wsh2.Cells(rowCurr, 4)
                    .Cells(i, 2).Copy wsh2.Cells(rowCurr, 5)
                    rowCurr = rowCurr + 1
                Else
                    wsh2.Cells(oDict.Item(.Cells(i, rng1.Column).Value), 5).Value = wsh2.Cells(oDict.Item(.Cells(i, rng1.Column).Value), 5).Value & Chr(10) & .Cells(i, 2).Value
                    
                End If
            End If
            
        Next i
    End With
    
End Sub

[/vba]
К сообщению приложен файл: 0t.xlsm (24.9 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Воскресенье, 12.02.2017, 22:58
 
Ответить
СообщениеТак надо?
[vba]
Код

Public Sub tt()
    Dim wsh1 As Worksheet, wsh2 As Worksheet
    Dim i As Long, rowLast&, rowCurr&, clnUslug&
    Dim rng1 As Range
    Dim oDict As Object
    
    Set wsh1 = Worksheets("Лист1")
    wsh1.Activate
    wsh1.Cells(1, 1).Select
    
    Set rng1 = wsh1.Cells.Find(What:="услуга", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False)
    If rng1 Is Nothing Then Exit Sub
    clnUslug = rng1.Column
    Set rng1 = wsh1.Cells.Find(What:="ФИО", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False)
    If rng1 Is Nothing Then Exit Sub
    rowLast = wsh1.Cells(Rows.Count, rng1.Column).End(xlUp).Row
    Set oDict = CreateObject("Scripting.Dictionary")
    
    With wsh1
        
        Set wsh2 = Worksheets.Add(After:=wsh1)
        .Cells(1, rng1.Column).Copy wsh2.Cells(1, 1) 'копируем заголовки
        .Cells(1, 7).Copy wsh2.Cells(1, 2)
        .Cells(1, 12).Copy wsh2.Cells(1, 3)
        .Cells(1, 10).Copy wsh2.Cells(1, 4)
        .Cells(1, 2).Copy wsh2.Cells(1, 5)
        rowCurr = 2
        For i = 2 To rowLast
            If .Cells(i, clnUslug).Value = "выезд" Then
                
                If Not oDict.exists(.Cells(i, rng1.Column).Value) Then
                    oDict(.Cells(i, rng1.Column).Value) = rowCurr
                    .Cells(i, rng1.Column).Copy wsh2.Cells(rowCurr, 1)
                    .Cells(i, 7).Copy wsh2.Cells(rowCurr, 2)
                    .Cells(i, 12).Copy wsh2.Cells(rowCurr, 3)
                    .Cells(i, 10).Copy wsh2.Cells(rowCurr, 4)
                    .Cells(i, 2).Copy wsh2.Cells(rowCurr, 5)
                    rowCurr = rowCurr + 1
                Else
                    wsh2.Cells(oDict.Item(.Cells(i, rng1.Column).Value), 5).Value = wsh2.Cells(oDict.Item(.Cells(i, rng1.Column).Value), 5).Value & Chr(10) & .Cells(i, 2).Value
                    
                End If
            End If
            
        Next i
    End With
    
End Sub

[/vba]

Автор - Udik
Дата добавления - 12.02.2017 в 22:24
Kioto Дата: Понедельник, 13.02.2017, 04:24 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Udik, да почти так, только адрес складывается не только из столбца 12, а 12+13 и разделяется запятой, чтобы получилось "г. Питер, ул. Лесная 17".
 
Ответить
СообщениеUdik, да почти так, только адрес складывается не только из столбца 12, а 12+13 и разделяется запятой, чтобы получилось "г. Питер, ул. Лесная 17".

Автор - Kioto
Дата добавления - 13.02.2017 в 04:24
Udik Дата: Понедельник, 13.02.2017, 13:14 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
а 12+13 и разделяется запятой

тогда строчку добавить надо
[vba]
Код

wsh2.Cells(rowCurr, 3).Value = wsh2.Cells(rowCurr, 3).Value & ", " & .Cells(i, 13)
[/vba]
К сообщению приложен файл: 8708631.xlsm (25.6 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
а 12+13 и разделяется запятой

тогда строчку добавить надо
[vba]
Код

wsh2.Cells(rowCurr, 3).Value = wsh2.Cells(rowCurr, 3).Value & ", " & .Cells(i, 13)
[/vba]

Автор - Udik
Дата добавления - 13.02.2017 в 13:14
Kioto Дата: Среда, 15.02.2017, 04:51 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Udik, всё работает, спасибо.
 
Ответить
СообщениеUdik, всё работает, спасибо.

Автор - Kioto
Дата добавления - 15.02.2017 в 04:51
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!