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

Вход

Регистрация

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

 

= Мир MS Excel/Посчитать количество уникальных значений по двум столбцам. - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Посчитать количество уникальных значений по двум столбцам. (Макросы/Sub)
Посчитать количество уникальных значений по двум столбцам.
StoTisteg Дата: Воскресенье, 13.03.2016, 20:35 | Сообщение № 21
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Народ, вы забыли, что файлов много ;)


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеНарод, вы забыли, что файлов много ;)

Автор - StoTisteg
Дата добавления - 13.03.2016 в 20:35
Pelena Дата: Воскресенье, 13.03.2016, 20:37 | Сообщение № 22
Группа: Админы
Ранг: Местный житель
Сообщений: 19158
Репутация: 4411 ±
Замечаний: ±

Excel 365 & Mac Excel
Обходим ошибку (увеличила до 1000 строк)
Код
=СУММ(ЕСЛИОШИБКА(1/СЧЁТЕСЛИМН(Лист1!$C$3:$C$1000;Лист1!$C$3:$C$1000;Лист1!$K$3:$K$1000;Лист1!$K$3:$K$1000;Лист1!$P$3:$P$1000;Лист1!$P$3:$P$1000);0)*(Лист1!$K$3:$K$1000=A2)*(Лист1!$P$3:$P$1000="Выполнено"))


вы забыли, что файлов много

Никто не запрещает Вам предложить свой вариант


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеОбходим ошибку (увеличила до 1000 строк)
Код
=СУММ(ЕСЛИОШИБКА(1/СЧЁТЕСЛИМН(Лист1!$C$3:$C$1000;Лист1!$C$3:$C$1000;Лист1!$K$3:$K$1000;Лист1!$K$3:$K$1000;Лист1!$P$3:$P$1000;Лист1!$P$3:$P$1000);0)*(Лист1!$K$3:$K$1000=A2)*(Лист1!$P$3:$P$1000="Выполнено"))


вы забыли, что файлов много

Никто не запрещает Вам предложить свой вариант

Автор - Pelena
Дата добавления - 13.03.2016 в 20:37
Leksa Дата: Воскресенье, 13.03.2016, 20:39 | Сообщение № 23
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Pelena, вопрос - как доработать формулу чтоб считала правильно если в № или ФИО или Статусе пустая ячейка?
[moder]См. формулу выше[/moder]
 
Ответить
СообщениеPelena, вопрос - как доработать формулу чтоб считала правильно если в № или ФИО или Статусе пустая ячейка?
[moder]См. формулу выше[/moder]

Автор - Leksa
Дата добавления - 13.03.2016 в 20:39
StoTisteg Дата: Воскресенье, 13.03.2016, 20:40 | Сообщение № 24
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
"мсье знает толк в извращениях" лучше, чем я

Мсье знает толк в кучах файлов и кривых руках пользователей ;)


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
"мсье знает толк в извращениях" лучше, чем я

Мсье знает толк в кучах файлов и кривых руках пользователей ;)

Автор - StoTisteg
Дата добавления - 13.03.2016 в 20:40
KuklP Дата: Воскресенье, 13.03.2016, 21:11 | Сообщение № 25
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Правда изврат.
К сообщению приложен файл: 6945402.xlsm (41.2 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеПравда изврат.

Автор - KuklP
Дата добавления - 13.03.2016 в 21:11
StoTisteg Дата: Воскресенье, 13.03.2016, 21:59 | Сообщение № 26
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Правда изврат.

Не беспокойтесь, меня Вам не переплюнуть :p
[vba]
Код
Sub Считать()

    Dim СписокФайлов() As String
    Dim i, j, Rws, Clm, ЧислоФайлов As Integer
    
    Application.DisplayAlerts = False
    MsgBox prompt:="Укажите файлы для обработки"
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        ЧислоФайлов = .SelectedItems.Count
        ReDim СписокФайлов(1 To ЧислоФайлов)
        For i = 1 To ЧислоФайлов
            СписокФайлов(i) = .SelectedItems(i)
        Next i
    End With
    For i = 1 To ЧислоФайлов
        If InStr(1, LCase(СписокФайлов(i)), ".xls", vbTextCompare) > 0 Then
            Workbooks.Open Filename:=СписокФайлов(i)
            If Trim(Worksheets(1).Cells(1, 1).Value) = "n\n" Then
                Do While Err.Number = 0
                    Err.Clear
                    On Error Resume Next
                    Worksheets(Sheets.Count).Delete
                Loop
                Worksheets.Add after:=Worksheets(1)
                Cells(1, 1).Value = "Ответственный"
                Cells(1, 2).Value = "Выполнено"
                Cells(1, 3).Value = "Осталось"
                Worksheets.Add after:=Worksheets(2)
                Worksheets(1).Cells.Copy Destination:=Cells
                Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, ActiveSheet.UsedRange.Columns.Count)).RemoveDuplicates Columns:=11, Header:=xlYes
                With Worksheets(2)
                    For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
                        If Trim(Cells(j, 11).Value) <> "" Then .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = Cells(j, 11).Value
                    Next j
                End With
                Cells.Clear
                Worksheets(1).Cells.Copy Destination:=Cells
                Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, ActiveSheet.UsedRange.Columns.Count)).RemoveDuplicates Columns:=Array(3, 11), Header:=xlYes
                Rws = Cells(Rows.Count, 1).End(xlUp).Row
                Clm = ActiveSheet.UsedRange.Columns.Count
                Cells(1, Clm + 2).Value = "Выполнено"
                Cells(1, Clm + 3).Value = "Не выполнено"
                Range(Cells(2, Clm + 2), Cells(Rws, Clm + 2)).FormulaR1C1 = "=COUNTIFS(R2C11:R" & Rws & "C11,RC[" & 9 - Clm & "],R2C16:R" & Rws & "C16,""Выполнено"")"
                Range(Cells(2, Clm + 3), Cells(Rws, Clm + 3)).FormulaR1C1 = "=COUNTIFS(R2C11:R" & Rws & "C11,RC[" & 9 - Clm & "],R2C16:R" & Rws & "C16,""<>Выполнено"")"
                Columns(Clm + 2).Copy
                Columns(Clm + 2).PasteSpecial Paste:=xlPasteValues
                Columns(Clm + 3).Copy
                Columns(Clm + 3).PasteSpecial Paste:=xlPasteValues
                Range(Cells(1, 1), Cells(Rws, Clm + 3)).RemoveDuplicates Columns:=11, Header:=xlYes
                With Worksheets(2)
                    For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
                        If Trim(Cells(j, 11).Value) <> "" Then
                            .Cells(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Value = Cells(j, Clm + 2).Value
                            .Cells(.Cells(Rows.Count, 3).End(xlUp).Row + 1, 3).Value = Cells(j, Clm + 3).Value
                        End If
                    Next j
                End With
                Worksheets(3).Delete
                ActiveWorkbook.Save
            End If
            ActiveWorkbook.Close
        End If
    Next i
    Application.DisplayAlerts = True

End Sub
[/vba]
К сообщению приложен файл: 1937175.xlsm (19.6 Kb)


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
Правда изврат.

Не беспокойтесь, меня Вам не переплюнуть :p
[vba]
Код
Sub Считать()

    Dim СписокФайлов() As String
    Dim i, j, Rws, Clm, ЧислоФайлов As Integer
    
    Application.DisplayAlerts = False
    MsgBox prompt:="Укажите файлы для обработки"
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        ЧислоФайлов = .SelectedItems.Count
        ReDim СписокФайлов(1 To ЧислоФайлов)
        For i = 1 To ЧислоФайлов
            СписокФайлов(i) = .SelectedItems(i)
        Next i
    End With
    For i = 1 To ЧислоФайлов
        If InStr(1, LCase(СписокФайлов(i)), ".xls", vbTextCompare) > 0 Then
            Workbooks.Open Filename:=СписокФайлов(i)
            If Trim(Worksheets(1).Cells(1, 1).Value) = "n\n" Then
                Do While Err.Number = 0
                    Err.Clear
                    On Error Resume Next
                    Worksheets(Sheets.Count).Delete
                Loop
                Worksheets.Add after:=Worksheets(1)
                Cells(1, 1).Value = "Ответственный"
                Cells(1, 2).Value = "Выполнено"
                Cells(1, 3).Value = "Осталось"
                Worksheets.Add after:=Worksheets(2)
                Worksheets(1).Cells.Copy Destination:=Cells
                Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, ActiveSheet.UsedRange.Columns.Count)).RemoveDuplicates Columns:=11, Header:=xlYes
                With Worksheets(2)
                    For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
                        If Trim(Cells(j, 11).Value) <> "" Then .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = Cells(j, 11).Value
                    Next j
                End With
                Cells.Clear
                Worksheets(1).Cells.Copy Destination:=Cells
                Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, ActiveSheet.UsedRange.Columns.Count)).RemoveDuplicates Columns:=Array(3, 11), Header:=xlYes
                Rws = Cells(Rows.Count, 1).End(xlUp).Row
                Clm = ActiveSheet.UsedRange.Columns.Count
                Cells(1, Clm + 2).Value = "Выполнено"
                Cells(1, Clm + 3).Value = "Не выполнено"
                Range(Cells(2, Clm + 2), Cells(Rws, Clm + 2)).FormulaR1C1 = "=COUNTIFS(R2C11:R" & Rws & "C11,RC[" & 9 - Clm & "],R2C16:R" & Rws & "C16,""Выполнено"")"
                Range(Cells(2, Clm + 3), Cells(Rws, Clm + 3)).FormulaR1C1 = "=COUNTIFS(R2C11:R" & Rws & "C11,RC[" & 9 - Clm & "],R2C16:R" & Rws & "C16,""<>Выполнено"")"
                Columns(Clm + 2).Copy
                Columns(Clm + 2).PasteSpecial Paste:=xlPasteValues
                Columns(Clm + 3).Copy
                Columns(Clm + 3).PasteSpecial Paste:=xlPasteValues
                Range(Cells(1, 1), Cells(Rws, Clm + 3)).RemoveDuplicates Columns:=11, Header:=xlYes
                With Worksheets(2)
                    For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
                        If Trim(Cells(j, 11).Value) <> "" Then
                            .Cells(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Value = Cells(j, Clm + 2).Value
                            .Cells(.Cells(Rows.Count, 3).End(xlUp).Row + 1, 3).Value = Cells(j, Clm + 3).Value
                        End If
                    Next j
                End With
                Worksheets(3).Delete
                ActiveWorkbook.Save
            End If
            ActiveWorkbook.Close
        End If
    Next i
    Application.DisplayAlerts = True

End Sub
[/vba]

Автор - StoTisteg
Дата добавления - 13.03.2016 в 21:59
Hugo Дата: Воскресенье, 13.03.2016, 22:22 | Сообщение № 27
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
Можно ведь проще:
[vba]
Код

Public Sub obrabotka()
    Dim a, b, c, x&, t$, tt$, i&, dc1 As Object, dc2 As Object, k
    Set dc1 = CreateObject("scripting.dictionary")
    Set dc2 = CreateObject("scripting.dictionary")
    Application.ScreenUpdating = False

    'если файлов много - тут добавить открытие очередного файла
    With Sheets(1)
        x = .Cells(.Rows.Count, 1).End(xlUp).Row
        a = .Range("C3:C" & x).Value: b = .Range("K3:K" & x).Value: c = .Range("P3:P" & x).Value
    End With
    For i = 1 To UBound(a)
        t = a(i, 1) & "|" & b(i, 1): tt = t & "|" & (c(i, 1) = "Выполнено")
        dc1.Item(tt) = dc1.Item(tt) + 1: dc2.Item(t) = 0&
    Next
    'если файлов много - тут добавить закрытие очередного файла

    i = 1
    For Each k In dc2.keys
        i = i + 1: Sheets(2).Cells(i, 1).Resize(1, 3) = Array(k, dc1.Item(k & "|" & (1 = 1)), dc1.Item(k & "|" & (1 = 0)))
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Воскресенье, 13.03.2016, 22:39
 
Ответить
СообщениеМожно ведь проще:
[vba]
Код

Public Sub obrabotka()
    Dim a, b, c, x&, t$, tt$, i&, dc1 As Object, dc2 As Object, k
    Set dc1 = CreateObject("scripting.dictionary")
    Set dc2 = CreateObject("scripting.dictionary")
    Application.ScreenUpdating = False

    'если файлов много - тут добавить открытие очередного файла
    With Sheets(1)
        x = .Cells(.Rows.Count, 1).End(xlUp).Row
        a = .Range("C3:C" & x).Value: b = .Range("K3:K" & x).Value: c = .Range("P3:P" & x).Value
    End With
    For i = 1 To UBound(a)
        t = a(i, 1) & "|" & b(i, 1): tt = t & "|" & (c(i, 1) = "Выполнено")
        dc1.Item(tt) = dc1.Item(tt) + 1: dc2.Item(t) = 0&
    Next
    'если файлов много - тут добавить закрытие очередного файла

    i = 1
    For Each k In dc2.keys
        i = i + 1: Sheets(2).Cells(i, 1).Resize(1, 3) = Array(k, dc1.Item(k & "|" & (1 = 1)), dc1.Item(k & "|" & (1 = 0)))
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Hugo
Дата добавления - 13.03.2016 в 22:22
KuklP Дата: Воскресенье, 13.03.2016, 22:24 | Сообщение № 28
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Do While Err.Number = 0
Err.Clear
строка Err.Clear не имеет смысла. В случае ошибки до нее не дойдет ход.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Do While Err.Number = 0
Err.Clear
строка Err.Clear не имеет смысла. В случае ошибки до нее не дойдет ход.

Автор - KuklP
Дата добавления - 13.03.2016 в 22:24
StoTisteg Дата: Воскресенье, 13.03.2016, 22:36 | Сообщение № 29
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Перестраховка ещё никому не вредила :)


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеПерестраховка ещё никому не вредила :)

Автор - StoTisteg
Дата добавления - 13.03.2016 в 22:36
Leksa Дата: Понедельник, 14.03.2016, 09:34 | Сообщение № 30
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
StoTisteg, на файле пример отрабатывает идеально, на файле где 192 строки система зависает и спасает только диспетчер. это не лечиться?
 
Ответить
СообщениеStoTisteg, на файле пример отрабатывает идеально, на файле где 192 строки система зависает и спасает только диспетчер. это не лечиться?

Автор - Leksa
Дата добавления - 14.03.2016 в 09:34
Leksa Дата: Понедельник, 14.03.2016, 09:36 | Сообщение № 31
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Pelena, на файле в 192 строки в поле Выполнено считает то что надо, а во втором столбце не корректно то на 1 больше то на 1 меньше и у одного пользователя аж в 3 задачи разница.
 
Ответить
СообщениеPelena, на файле в 192 строки в поле Выполнено считает то что надо, а во втором столбце не корректно то на 1 больше то на 1 меньше и у одного пользователя аж в 3 задачи разница.

Автор - Leksa
Дата добавления - 14.03.2016 в 09:36
Pelena Дата: Понедельник, 14.03.2016, 09:40 | Сообщение № 32
Группа: Админы
Ранг: Местный житель
Сообщений: 19158
Репутация: 4411 ±
Замечаний: ±

Excel 365 & Mac Excel
не корректно

Показывайте в файле


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
не корректно

Показывайте в файле

Автор - Pelena
Дата добавления - 14.03.2016 в 09:40
KuklP Дата: Понедельник, 14.03.2016, 09:52 | Сообщение № 33
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Leksa, вы вариант в № 25 смотрели?


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеLeksa, вы вариант в № 25 смотрели?

Автор - KuklP
Дата добавления - 14.03.2016 в 09:52
Leksa Дата: Понедельник, 14.03.2016, 11:53 | Сообщение № 34
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Pelena, не могу понять почему такая разница в отчете и считает ли он строку если № = пусто?
К сообщению приложен файл: 6801956.xlsx (42.4 Kb)
 
Ответить
СообщениеPelena, не могу понять почему такая разница в отчете и считает ли он строку если № = пусто?

Автор - Leksa
Дата добавления - 14.03.2016 в 11:53
Leksa Дата: Понедельник, 14.03.2016, 11:55 | Сообщение № 35
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
KuklP, да посмотрела формирует столбцы, но хотелось бы знать количество уникальных не выполненных задач.
 
Ответить
СообщениеKuklP, да посмотрела формирует столбцы, но хотелось бы знать количество уникальных не выполненных задач.

Автор - Leksa
Дата добавления - 14.03.2016 в 11:55
KuklP Дата: Понедельник, 14.03.2016, 12:03 | Сообщение № 36
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
но хотелось бы знать количество
В смысле? А что там в 3-й столбец выводится по-Вашему? Впрочем, без разницы. Я трачу на Вас время, а потом еще должен клещами из Вас ответы вытягивать - это свинство. Бывайте.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
но хотелось бы знать количество
В смысле? А что там в 3-й столбец выводится по-Вашему? Впрочем, без разницы. Я трачу на Вас время, а потом еще должен клещами из Вас ответы вытягивать - это свинство. Бывайте.

Автор - KuklP
Дата добавления - 14.03.2016 в 12:03
Leksa Дата: Понедельник, 14.03.2016, 12:26 | Сообщение № 37
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
KuklP, вот примерно так работает у меня ваш макрос - я честно пытаюсь понять почему у меня так а не как Вас - поэтому реагирую не ежесекундно.
я понимаю, что скорее всего у вас сегодня плохое настроение и Вы решили назвать это свинством.
К сообщению приложен файл: 12.xlsm (51.4 Kb)
 
Ответить
СообщениеKuklP, вот примерно так работает у меня ваш макрос - я честно пытаюсь понять почему у меня так а не как Вас - поэтому реагирую не ежесекундно.
я понимаю, что скорее всего у вас сегодня плохое настроение и Вы решили назвать это свинством.

Автор - Leksa
Дата добавления - 14.03.2016 в 12:26
Hugo Дата: Понедельник, 14.03.2016, 14:07 | Сообщение № 38
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
Потому что пример другой, в нём не заполнен первый столбец.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПотому что пример другой, в нём не заполнен первый столбец.

Автор - Hugo
Дата добавления - 14.03.2016 в 14:07
Pelena Дата: Понедельник, 14.03.2016, 15:08 | Сообщение № 39
Группа: Админы
Ранг: Местный житель
Сообщений: 19158
Репутация: 4411 ±
Замечаний: ±

Excel 365 & Mac Excel
разница в отчете

С доп. столбцом
К сообщению приложен файл: 4484374.xlsx (44.3 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
разница в отчете

С доп. столбцом

Автор - Pelena
Дата добавления - 14.03.2016 в 15:08
Leksa Дата: Понедельник, 14.03.2016, 19:45 | Сообщение № 40
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Pelena, огромное спасибо! теперь работает! буду осваивать формулы массива)))
 
Ответить
СообщениеPelena, огромное спасибо! теперь работает! буду осваивать формулы массива)))

Автор - Leksa
Дата добавления - 14.03.2016 в 19:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Посчитать количество уникальных значений по двум столбцам. (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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