Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите с макросом в Excel / 8 сообщений из 8, страница 1 из 1
08.11.2009, 17:00
    #36297342
Passat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с макросом в Excel
Друзья, помогите кто может! Нужно создать макрос, с помощью которого можно сделать следующее:
На одном листе находятся данные, на другом листе
необходимо создать таблицы, соответствующие следующим критериям:
первая таблица должна содержать данные о работниках со специальностями
Слесарь и Электрик, и у которых Признаки№1 и №2 больше нуля, или хотябы один из признаков больше нуля.
Вторая таблица должна
содержать данные о работниках со специальностями Бухгалтер и Главный
бухгалтер, и у которых Признаки№1 и №2 больше нуля, или хотябы один из
признаков больше нуля. Третья таблица должна содержать данные о работниках
со специальностями Директор и Зам. директора, и у которых Признаки№1 и №2
больше нуля, или хотябы один из признаков больше нуля с выводом
этих признаков в таблицу.
В прикрепленном файле более наглядней представлено, что я хочу.
Заранее благодарен:))
...
Рейтинг: 0 / 0
08.11.2009, 23:24
    #36297651
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с макросом в Excel
Т.к. есть косяк в исходных данных - "Зам. Директора" в таблице и "Зам. директора" в условии, в макросе добавил UCase.
Ну и т.к. нужны рамки, код немного распух. Завтра попробую подсократить, пока так.

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
Sub product()
With Application
    calc_status = .Calculation
    .Calculation = xlManual
    .ScreenUpdating = False

Sheets("Результат").Activate
Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  2 ,  1 )
x = blank_cell.Row -  1 

For Each cc In Sheets("Исх. данные").UsedRange.Columns( 4 ).Cells
    If UCase(Trim(cc.Value)) = "СЛЕСАРЬ" Or UCase(Trim(cc.Value)) = "ЭЛЕКТРИК" And (cc.Offset( 0 , - 1 ) + cc.Offset( 0 , - 2 ) <>  0 ) Then
    Range(Sheets("Исх. данные").Cells(cc.Row,  1 ), Sheets("Исх. данные").Cells(cc.Row,  3 )).Copy blank_cell
    Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  1 ,  1 )
    End If
Next
y = blank_cell.Row -  1 

Set rrr = Sheets("Результат").Range("A" & x & ":C" & y)

    With rrr.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  3 ,  1 )
x = blank_cell.Row -  1 
For Each cc In Sheets("Исх. данные").UsedRange.Columns( 4 ).Cells
    If UCase(Trim(cc.Value)) = "БУХГАЛТЕР" Or UCase(Trim(cc.Value)) = "ГЛАВНЫЙ БУХГАЛТЕР" And (cc.Offset( 0 , - 1 ) + cc.Offset( 0 , - 2 ) <>  0 ) Then
    Range(Sheets("Исх. данные").Cells(cc.Row,  1 ), Sheets("Исх. данные").Cells(cc.Row,  3 )).Copy blank_cell
    Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  1 ,  1 )
    End If
Next
y = blank_cell.Row -  1 

Set rrr = Sheets("Результат").Range("A" & x & ":C" & y)

    With rrr.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  3 ,  1 )
x = blank_cell.Row -  1 
For Each cc In Sheets("Исх. данные").UsedRange.Columns( 4 ).Cells
    If UCase(Trim(cc.Value)) = "ДИРЕКТОР" Or UCase(Trim(cc.Value)) = "ЗАМ. ДИРЕКТОРА" And (cc.Offset( 0 , - 1 ) + cc.Offset( 0 , - 2 ) <>  0 ) Then
    Range(Sheets("Исх. данные").Cells(cc.Row,  1 ), Sheets("Исх. данные").Cells(cc.Row,  3 )).Copy blank_cell
    Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  1 ,  1 )
    End If
Next
y = blank_cell.Row -  1 
Set rrr = Sheets("Результат").Range("A" & x & ":C" & y)

    With rrr.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    
    

   .Calculation = calc_status
   .ScreenUpdating = True
 End With
End Sub
...
Рейтинг: 0 / 0
09.11.2009, 09:04
    #36297894
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с макросом в Excel
Сделал покороче - вынес рамки в отдельную функцию. Ну и заменил "<> 0" на "> 0", так правильнее (вдруг будут отрицательные признаки?).
...
Рейтинг: 0 / 0
09.11.2009, 16:57
    #36299313
Passat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с макросом в Excel
Ребят, спасибо. То что надо! Вообще я мега-проект делаю, где и условий будет больше и колонок в итоговых таблицах))))
...
Рейтинг: 0 / 0
18.11.2009, 23:42
    #36318536
Passat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с макросом в Excel
Подогнал макрос под свой проект. Добавил столбцов с данными. Но макрос отрабатывает только по критериям должностей, а условие, что данные в определенных столбцах должны быть больше нуля игнорируются=( В чем ошибка?
...
Рейтинг: 0 / 0
19.11.2009, 09:15
    #36318834
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с макросом в Excel
Нашёл - поставь OR в скобки:

Код: plaintext
1.
    If (UCase(Trim(cc.Value)) = "СЛЕСАРЬ" Or UCase(Trim(cc.Value)) = "ЭЛЕКТРИК") And (cc.Offset( 0 , - 1 ) + cc.Offset( 0 , - 3 )) >  0  Then
Но там другое вскрылось - проблема с заданием рамок если мало значений, похоже если y = blank_cell.Row - 1 меньше 1, то проблема. Надо подкрутить...
...
Рейтинг: 0 / 0
19.11.2009, 11:07
    #36319088
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с макросом в Excel
Глянул пристальнее - проблема была в другом...
Добавил флаг, и в функции рамки условие.
И x = blank_cell.Row - 1 заменил на x = blank_cell.Row
Потестируй получше, мне сейчас некогда, не помню, зачем вначале - 1 было...
Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
Sub product()

With Application
    calc_status = .Calculation
    .Calculation = xlManual
    .ScreenUpdating = False

Sheets("Результат").Activate
Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  2 ,  1 )
x = blank_cell.Row
flag = False
For Each cc In Sheets("Исх. данные").UsedRange.Columns( 7 ).Cells
    If (UCase(Trim(cc.Value)) = "СЛЕСАРЬ" Or UCase(Trim(cc.Value)) = "ЭЛЕКТРИК") And (cc.Offset( 0 , - 1 ) + cc.Offset( 0 , - 3 )) >  0  Then
    Range(Sheets("Исх. данные").Cells(cc.Row,  1 ), Sheets("Исх. данные").Cells(cc.Row,  7 )).Copy blank_cell
    Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  1 ,  1 )
    flag = True
    End If
Next
y = blank_cell.Row -  1 

If flag Then ramki x, y

Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  2 ,  1 )
x = blank_cell.Row
flag = False
For Each cc In Sheets("Исх. данные").UsedRange.Columns( 7 ).Cells
    If (UCase(Trim(cc.Value)) = "БУХГАЛТЕР" Or UCase(Trim(cc.Value)) = "ГЛАВНЫЙ БУХГАЛТЕР") And (cc.Offset( 0 , - 1 ) + cc.Offset( 0 , - 3 )) >  0  Then
    Range(Sheets("Исх. данные").Cells(cc.Row,  1 ), Sheets("Исх. данные").Cells(cc.Row,  7 )).Copy blank_cell
    Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  1 ,  1 )
    flag = True
    End If
Next
y = blank_cell.Row -  1 

If flag Then ramki x, y

Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  2 ,  1 )
x = blank_cell.Row
flag = False
For Each cc In Sheets("Исх. данные").UsedRange.Columns( 7 ).Cells
    If (UCase(Trim(cc.Value)) = "ДИРЕКТОР" Or UCase(Trim(cc.Value)) = "ЗАМ. ДИРЕКТОРА") And (cc.Offset( 0 , - 1 ) + cc.Offset( 0 , - 3 )) >  0  Then
    Range(Sheets("Исх. данные").Cells(cc.Row,  1 ), Sheets("Исх. данные").Cells(cc.Row,  7 )).Copy blank_cell
    Set blank_cell = Sheets("Результат").Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row +  1 ,  1 )
    flag = True
    End If
Next
y = blank_cell.Row -  1 
    
If flag Then ramki x, y

   .Calculation = calc_status
   .ScreenUpdating = True
 End With
End Sub

Function ramki(ByVal xx As Long, ByVal yy As Long)
Set rrr = Sheets("Результат").Range("A" & xx & ":G" & yy)

    With rrr.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With rrr.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    
    If yyy > xxx Then
        With rrr.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
    End If
    
End Function

...
Рейтинг: 0 / 0
19.11.2009, 13:17
    #36319607
Passat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с макросом в Excel
Спасибо!!!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите с макросом в Excel / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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