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

Вход

Регистрация

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

 

= Мир MS Excel/Подсчет совпадений и нахождение позиций. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Подсчет совпадений и нахождение позиций. (Макросы/Sub)
Подсчет совпадений и нахождение позиций.
Sashagor1982 Дата: Понедельник, 12.10.2015, 22:58 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте уважаемые форумчане. В приложенный файл содержит лист "Исходный" и макрос Rabota. В результате работы макроса заполняется лист РКОФ (наименование должностей их количество по разным штатам). Столбцы 22 и 23 Исходного содержат информацию об убытии(прибытии) сотрудников, если убытие(прибытие) содержит "вч", то в РКОФ заполняются столбцы I и J, однако если содержится например "птб1", то это позиция существующей должности (3 столбец Исходного). Задача состоит в том, чтобы данные перемещения подсчитывались в результате работы макроса и заполнялись столбцы K,L,M,N листа РКОФ, причем столбцы K,M содержат количество, а L и N номера строк с реквизитами должностей (указанно в листе Образец файла примера), при чем если должностей несколько, то позиции перечисляются через запятую. Заранее спасибо.
К сообщению приложен файл: 11.zip (74.3 Kb)
 
Ответить
СообщениеЗдравствуйте уважаемые форумчане. В приложенный файл содержит лист "Исходный" и макрос Rabota. В результате работы макроса заполняется лист РКОФ (наименование должностей их количество по разным штатам). Столбцы 22 и 23 Исходного содержат информацию об убытии(прибытии) сотрудников, если убытие(прибытие) содержит "вч", то в РКОФ заполняются столбцы I и J, однако если содержится например "птб1", то это позиция существующей должности (3 столбец Исходного). Задача состоит в том, чтобы данные перемещения подсчитывались в результате работы макроса и заполнялись столбцы K,L,M,N листа РКОФ, причем столбцы K,M содержат количество, а L и N номера строк с реквизитами должностей (указанно в листе Образец файла примера), при чем если должностей несколько, то позиции перечисляются через запятую. Заранее спасибо.

Автор - Sashagor1982
Дата добавления - 12.10.2015 в 22:58
Sashagor1982 Дата: Вторник, 13.10.2015, 22:20 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Вроде получилось со столбцами K и M, но с L и N нужна помощь. Так же кажется, что макрос кривой в плане вывода на экран.
К сообщению приложен файл: 1612721.zip (74.2 Kb)


Сообщение отредактировал Sashagor1982 - Вторник, 13.10.2015, 22:22
 
Ответить
СообщениеВроде получилось со столбцами K и M, но с L и N нужна помощь. Так же кажется, что макрос кривой в плане вывода на экран.

Автор - Sashagor1982
Дата добавления - 13.10.2015 в 22:20
wild_pig Дата: Среда, 14.10.2015, 12:35 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
Напишите, как вы это ручками делаете и можно будет сделать.
 
Ответить
СообщениеНапишите, как вы это ручками делаете и можно будет сделать.

Автор - wild_pig
Дата добавления - 14.10.2015 в 12:35
KSV Дата: Среда, 14.10.2015, 14:37 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Добрый день!
Проверьте [vba]
Код
Sub Rabota()
    Dim a(), b()
    Dim i&, n&
    Dim sd As Object, dicLeave As Object
'--------------------
    Set sd = CreateObject("Scripting.Dictionary")
    Set dicLeave = CreateObject("Scripting.Dictionary")
    Set dicArrive = CreateObject("Scripting.Dictionary")
    a = ThisWorkbook.Worksheets("Исходный").UsedRange.Value
    For i = 3 To UBound(a)
        If a(i, 8) = "оф." Or a(i, 9) = "оф." Then
            key_ = a(i, 4) & a(i, 5) & a(i, 6)
            If sd.Exists(key_) Then b = sd(key_) Else b = Array(a(i, 7), a(i, 4), a(i, 6), "'" & a(i, 5), Empty, Empty, Empty, Empty, Empty, Empty, Empty, Empty, Empty, sd.Count + 1)
            If Len(a(i, 8)) Then b(4) = b(4) + 1
            If Len(a(i, 9)) Then b(5) = b(5) + 1
            If Len(a(i, 22)) Then If Left$(a(i, 22), 2) = "вч" Then b(6) = b(6) + 1 Else b(8) = b(8) + 1: dicLeave(a(i, 3)) = b(13)
            If Len(a(i, 23)) Then If Left$(a(i, 23), 2) = "вч" Then b(7) = b(7) + 1 Else b(12) = a(i, 23): b(10) = b(10) + 1
            sd(key_) = b
        End If
    Next
    
    a = sd.items
    For i = 0 To UBound(a)
        If Len(a(i)(12)) Then If dicLeave.Exists(a(i)(12)) Then n = dicLeave(a(i)(12)): a(i)(11) = n: n = n - 1: a(n)(9) = IIf(Len(a(n)(9)), a(n)(9) & ";", "") & i + 1
    Next
    
    With ThisWorkbook.Worksheets("РКОФ")
        With .Cells(7, 1)
            .Value = 1
            With .Resize(sd.Count)
                .DataSeries
                .Offset(, 2).Resize(, 12).Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(a))
            End With
        End With
        .Activate
    End With
    Beep
End Sub
[/vba]

[p.s.]и судя по всему, в ячейке W357 должно быть "птб15", а не "птб13"[/p.s.]
К сообщению приложен файл: 1612721_1.zip (70.0 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеДобрый день!
Проверьте [vba]
Код
Sub Rabota()
    Dim a(), b()
    Dim i&, n&
    Dim sd As Object, dicLeave As Object
'--------------------
    Set sd = CreateObject("Scripting.Dictionary")
    Set dicLeave = CreateObject("Scripting.Dictionary")
    Set dicArrive = CreateObject("Scripting.Dictionary")
    a = ThisWorkbook.Worksheets("Исходный").UsedRange.Value
    For i = 3 To UBound(a)
        If a(i, 8) = "оф." Or a(i, 9) = "оф." Then
            key_ = a(i, 4) & a(i, 5) & a(i, 6)
            If sd.Exists(key_) Then b = sd(key_) Else b = Array(a(i, 7), a(i, 4), a(i, 6), "'" & a(i, 5), Empty, Empty, Empty, Empty, Empty, Empty, Empty, Empty, Empty, sd.Count + 1)
            If Len(a(i, 8)) Then b(4) = b(4) + 1
            If Len(a(i, 9)) Then b(5) = b(5) + 1
            If Len(a(i, 22)) Then If Left$(a(i, 22), 2) = "вч" Then b(6) = b(6) + 1 Else b(8) = b(8) + 1: dicLeave(a(i, 3)) = b(13)
            If Len(a(i, 23)) Then If Left$(a(i, 23), 2) = "вч" Then b(7) = b(7) + 1 Else b(12) = a(i, 23): b(10) = b(10) + 1
            sd(key_) = b
        End If
    Next
    
    a = sd.items
    For i = 0 To UBound(a)
        If Len(a(i)(12)) Then If dicLeave.Exists(a(i)(12)) Then n = dicLeave(a(i)(12)): a(i)(11) = n: n = n - 1: a(n)(9) = IIf(Len(a(n)(9)), a(n)(9) & ";", "") & i + 1
    Next
    
    With ThisWorkbook.Worksheets("РКОФ")
        With .Cells(7, 1)
            .Value = 1
            With .Resize(sd.Count)
                .DataSeries
                .Offset(, 2).Resize(, 12).Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(a))
            End With
        End With
        .Activate
    End With
    Beep
End Sub
[/vba]

[p.s.]и судя по всему, в ячейке W357 должно быть "птб15", а не "птб13"[/p.s.]

Автор - KSV
Дата добавления - 14.10.2015 в 14:37
Sashagor1982 Дата: Среда, 14.10.2015, 20:50 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
KSV, Да птб15, извиняюсь, макрос вроде работает. Попробую разобрать детально..
 
Ответить
СообщениеKSV, Да птб15, извиняюсь, макрос вроде работает. Попробую разобрать детально..

Автор - Sashagor1982
Дата добавления - 14.10.2015 в 20:50
Sashagor1982 Дата: Пятница, 16.10.2015, 20:12 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Если чуть изменить Исходный, то не работает :( :( :(
К сообщению приложен файл: 121.zip (75.5 Kb)
 
Ответить
СообщениеЕсли чуть изменить Исходный, то не работает :( :( :(

Автор - Sashagor1982
Дата добавления - 16.10.2015 в 20:12
Skif-F Дата: Пятница, 16.10.2015, 23:42 | Сообщение № 7
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Лист "Исходный":
строка 388 - убывает на буар8
строка 391 - прибывает из буар8
строка 397 - тот самый буар8, но он понятия не имеет, что он должен куда-то убыть и откуда-то прибыть

Вопрос: "Это нормально или ошибка в данных?"

Пробуйте. Module2.Rabota
К сообщению приложен файл: 1717462.zip (89.0 Kb)


Сообщение отредактировал Skif-F - Суббота, 17.10.2015, 00:24
 
Ответить
СообщениеЛист "Исходный":
строка 388 - убывает на буар8
строка 391 - прибывает из буар8
строка 397 - тот самый буар8, но он понятия не имеет, что он должен куда-то убыть и откуда-то прибыть

Вопрос: "Это нормально или ошибка в данных?"

Пробуйте. Module2.Rabota

Автор - Skif-F
Дата добавления - 16.10.2015 в 23:42
KSV Дата: Суббота, 17.10.2015, 05:18 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
По логике, в ячейках W390 и W391 должны быть указаны коды буар6 и буар7, соответственно.
А код птб33 должен быть в ячейке W397.
Или не так?
К сообщению приложен файл: 121_1.zip (71.8 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеПо логике, в ячейках W390 и W391 должны быть указаны коды буар6 и буар7, соответственно.
А код птб33 должен быть в ячейке W397.
Или не так?

Автор - KSV
Дата добавления - 17.10.2015 в 05:18
Sashagor1982 Дата: Понедельник, 19.10.2015, 21:59 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Спасибо, изучу детально)))
 
Ответить
СообщениеСпасибо, изучу детально)))

Автор - Sashagor1982
Дата добавления - 19.10.2015 в 21:59
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Подсчет совпадений и нахождение позиций. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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