powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / копия определённых столбцов
5 сообщений из 30, страница 2 из 2
копия определённых столбцов
    #34794947
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor nPUBET
Подскажите, пожалуйста, как заполнить все ячейки (кроме А1)
до =ActiveSheet.UsedRange.Rows.Count=
в 1-ом столбце значением "Сентябрь" ?
Код: plaintext
Range(Cells( 2 , 1 ), Cells(ActiveSheet.UsedRange.Rows.Count, 1 )) = "Сентябрь"
Спасибо!


vkodor ... 4. можно делать все через Find (отдельный вопрос)... Оператор Find для меня пока трудноват.

Новые замеры скорости:
1. Вариант: -> 00:07:57 - 00:10:47
vkodor, 12.09, 13:56...
3. лучше делать все в одном пробеге
2-ой вариант:
00:09:04 - 00:09:29 - первая космическая :)
Код: 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.
.....

    For n =  2  To xlSh.UsedRange.Rows.Count              '***Cells(Rows.Count, 6).End(xlUp).Row
        fl = False
        If xlSh.Cells(n,  6 ) =  0  And xlSh.Cells(n,  7 ) =  0  And _
            xlSh.Cells(n,  8 ) =  0  And xlSh.Cells(n,  9 ) =  0  Then
            fl = True
        ElseIf xlSh.Cells(n,  3 ).Text Like "*C101*" Then
            fl = True
        End If
     
        If fl Then
            If rng Is Nothing Then
                Set rng = xlSh.Cells(n,  6 )
            Else
                Set rng = Union(rng, xlSh.Cells(n,  6 ))
            End If
        End If
    Next
    If Not rng Is Nothing Then rng.EntireRow.ClearContents  '*****
       '**********
         If xlSh.Cells(n,  6 ).Value = "" And xlSh.Cells(n,  7 ).Value = "" And _
            xlSh.Cells(n,  8 ).Value = "" And xlSh.Cells(n,  9 ).Value = "" Then
            xlSh.Cells(n,  6 ).EntireRow.ClearContents '******
        End If
            '*********
'        Sub CopT_()
    Columns("C:C").Select
    Range("A1:j7000").Sort Key1:=Range("C1"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:= 1 , MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("A1").Select
            'End Sub
                '**********
    Range(Cells( 2 ,  1 ), Cells(ActiveSheet.UsedRange.Rows.Count,  1 )) = "Сентябрь"
   ' Sub Kriter_()
    Range("A1").Select
    Selection.AutoFilter Field:= 6 , Criteria1:=">0", Operator:=xlAnd
    Selection.AutoFilter Field:= 7 , Criteria1:=">0", Operator:=xlAnd
    Selection.AutoFilter Field:= 8 , Criteria1:=">0", Operator:=xlAnd
    Selection.AutoFilter Field:= 9 , Criteria1:=">0", Operator:=xlAnd
    'End Sub
    
    '********

End Sub
...
Рейтинг: 0 / 0
копия определённых столбцов
    #34795222
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему же ты так упорно хочешь использовать "Select"?
И ещё всегда пиши имя листа, иначе инструкция будет ссылаться на активный лист.
Код: plaintext
Range("A1").Select
это тоже самое что и
Код: plaintext
ActiveWorkbook.ActiveSheet.Range("A1").Select

А вдруг активный лист будет другой. Результат будет некорректный.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
     xlSh.Range("A1:j" & xlSh.UsedRange.Rows.Count).Sort Key1:=xlSh.Range("C1"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:= 1 , MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    i = xlSh.Cells(Rows.Count,  6 ).End(xlUp).Row
    xlSh.Range(Cells( 2 ,  1 ), Cells(i,  1 )) = "Сентябрь"

    With xlSh.Range("A1")
        .AutoFilter Field:= 6 , Criteria1:=">0", Operator:=xlAnd
        .AutoFilter Field:= 7 , Criteria1:=">0", Operator:=xlAnd
        .AutoFilter Field:= 8 , Criteria1:=">0", Operator:=xlAnd
        .AutoFilter Field:= 9 , Criteria1:=">0", Operator:=xlAnd
    End With

P.S. не понял где быстрей а где медленей
...
Рейтинг: 0 / 0
копия определённых столбцов
    #34795621
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodorПочему же ты так упорно хочешь использовать "Select"?1) при простых операциях записываю свои действия на "плёнку",
потом результат вставляю, куда нужно (а в такой записи всегда появляется =Select=)
2) с помошью =Select= вижу, где курсор,
3) кроме =Select= пока не знаю, что применять...

vkodor
И ещё всегда пиши имя листа, иначе инструкция будет ссылаться на активный лист.
... стараюсь после =Sub name()= сразу активировать нужный лист, например, так:
Код: plaintext
1.
2.
Sub del12()
Sheets("H bb").Activate
...

vkodor
Код: plaintext
Range("A1").Select
это тоже самое что и
Код: plaintext
ActiveWorkbook.ActiveSheet.Range("A1").Select
А вдруг активный лист будет другой. Результат будет некорректный. Я этого не знал. Буду знать. Учусь :)

vkodor
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
     .....        DataOption1:=xlSortNormal  '*********
    Dim i as Integer '  ****
    i = xlSh.Cells(Rows.Count,  6 ).End(xlUp).Row
    xlSh.Range(Cells( 2 ,  1 ), Cells(i,  1 )) = "Сентябрь"
    With xlSh.Range("A1") '******
        ....
    
'**************
Все три блока применил. Спасибо!

vkodor
P.S. не понял где быстрей а где медленей
Ответ выделил жирным шрифтом.
nPUBETНовые замеры скорости:
1. Вариант: -> 00:07:57 - 00:10:47 = 2 минуты 50 секунд. Здесь медленно.
vkodor, 12.09, 13:56 ..3. лучше делать все в одном пробеге
2-ой вариант:
00:09:04 - 00:09:29 - первая космическая :) = только 25 секунд! Здесь быстрее!

Т.е. Твой вариант после "в одном пробеге..." я чуть-чуть изменил, и оказалось быстрее (Твой пост, 12.09, 13:56, 3-й пункт).
vkodor..3. лучше делать все в одном пробеге..
...
Рейтинг: 0 / 0
копия определённых столбцов
    #34800481
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
Sub M_Hbb()
   Sheets("H bb").Activate
     
         '**********
    'Sub VKL()
 
     Rows("1:1").Select
     On Error Resume Next
    Selection.AutoFilter

    '************
        
    Const List1 = "K1"
    Const List2 = "H bb"
    Dim i As Integer
    Dim mList( 18 ) As String
    Dim xlSh1 As Worksheet, xlSh2 As Worksheet, rng As Range
    '   

    mList( 0 ) = "Участок*"
    mList( 1 ) = "Работник*"
    mList( 2 ) = "TC*"
    
    Range("a:L").Clear
    Range("A1").Select
    Application.ScreenUpdating = False

    Set xlSh1 = Worksheets(List1)
    Set xlSh2 = Worksheets(List2)
       '********
    For i =  0  To UBound(mList)
        Set rng = xlSh1.Range("1:1").Find(mList(i), xlSh1.Range("A1"), LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)
        If Not rng Is Nothing Then
            rng.EntireColumn.Copy
            xlSh2.Cells( 1 , xlSh2.Cells( 1 , Columns.Count).End(xlToLeft).Column +  1 ).PasteSpecial xlValues
        Else
       MsgBox "не найден параметер:" & mList(i)
            
        End If
        
    Next
    
    Application.CutCopyMode = False
  
    '********
'    Cells.Columns.AutoFit
    Columns("F:I").NumberFormat = "m/d/yyyy"
    'Range("A1").Select
 '**********


'Sub del22()
'**********
    Dim rngB As Range
    Dim n As Integer
    'Dim xlSh2 As Worksheet
    Dim fl As Boolean
    
    'Set xlSh2 = Sheets(List2)
'************

    For n =  2  To xlSh2.UsedRange.Rows.Count              'Cells(Rows.Count, 6).End(xlUp).Row
        fl = False
        If xlSh2.Cells(n,  6 ) =  0  And xlSh2.Cells(n,  7 ) =  0  And _
            xlSh2.Cells(n,  8 ) =  0  And xlSh2.Cells(n,  9 ) =  0  Then
            fl = True
        ElseIf xlSh2.Cells(n,  3 ).Text Like "*B*" Then
            fl = True
        End If
     
        If fl Then
            If rngB Is Nothing Then
                Set rngB = xlSh2.Cells(n,  6 )
            Else
                Set rngB = Union(rngB, xlSh2.Cells(n,  6 ))
            End If
        End If
    Next
    If Not rngB Is Nothing Then rngB.EntireRow.ClearContents  '*****
       '**********
         If xlSh2.Cells(n,  6 ).Value = "" And xlSh2.Cells(n,  7 ).Value = "" And _
            xlSh2.Cells(n,  8 ).Value = "" And xlSh2.Cells(n,  9 ).Value = "" Then
            xlSh2.Cells(n,  6 ).EntireRow.ClearContents '******
        End If
        
        '***********
          '*********
'        Sub CopT_()

        xlSh2.Range("A1:j" & xlSh2.UsedRange.Rows.Count).Sort Key1:=xlSh2.Range("C1"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:= 1 , MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

             '**********
    Dim asy As Integer
    asy = xlSh2.Cells(Rows.Count,  6 ).End(xlUp).Row  '******
    xlSh2.Range(Cells( 2 ,  1 ), Cells(asy,  1 )) = "Сентябрь"   '******
 
       Range("a1") = "Месяц"
'        '********
'          If xlSh1.Cells(0, 3).Value = xlSh1.Cells(0, 4).Value = _
'       xlSh1.Cells(0, 5).Value = xlSh1.Cells(0, 6).Value = _
'       xlSh1.Cells(0, 7).Value = xlSh1.Cells(0, 8).Value Then
'      Cells.ClearContents
'      Else
'      End If
'        '*********
        '*********
          Rows("1:1").Select
    Selection.Font.Bold = True
    Range("A1").Select
'    Columns("A:A").ColumnWidth = 10
    
    '******
    '*********
'    Sub Kriter_()
  With xlSh2.Range("A1")
        .AutoFilter Field:= 6 , Criteria1:=">0", Operator:=xlAnd
        .AutoFilter Field:= 7 , Criteria1:=">0", Operator:=xlAnd
        .AutoFilter Field:= 8 , Criteria1:=">0", Operator:=xlAnd
        .AutoFilter Field:= 9 , Criteria1:=">0", Operator:=xlAnd
    End With
    'End Sub
    
    '********
'End Sub
'End If
Application.ScreenUpdating = True
     '  *******
          If xlSh1.Cells( 0 ,  3 ) =  0  And xlSh1.Cells(,  4 ) =  0  And _  ' проблемный участок
          xlSh1.Cells( 0 ,  5 ).Value = xlSh1.Cells( 0 ,  6 ).Value = _
          xlSh1.Cells( 0 ,  7 ).Value = xlSh1.Cells( 0 ,  8 ).Value Then
           Cells.Clear                 ' проблемный участок
' Exit Sub
          End If
'***************

End Sub


............
.AutoFilter Field:=9, Criteria1:=">0", Operator:=xlAnd
End With
'End Sub

'********
'End Sub
'End If
Application.ScreenUpdating = True
' *******
If xlSh1.Cells(0, 5) = 0 And xlSh1.Cells(, 4) = 0 And _
xlSh1.Cells(0, 5).Value = xlSh1.Cells(0, 6).Value = _
xlSh1.Cells(0, 7).Value = xlSh1.Cells(0, 8).Value Then
Cells.Clear
' Exit Sub
End If

'***************
End Sub
Выделенное жирным шрифтом - проблемный участок.

В конце этого макроса вставил небольшое условие =If .... then..= (проблемный участок):
-если определеённые ячейки в листе для запроса =К1= равны нулю,
тогда чищу все ячейки в листе =H bb=.Это условие работает, но странно:
если в =К1= есть данные (заголовок не выводится, данные не сортируются,
между строками видны группы пустых cтрок - короче бред),
-если в =К1= нет данных - тогда и в =H bb= пусто (т.е. как надо). =Exit Sub= пробовал, тоже не получается.


Подскажите, пожалуйста, как правильно сформулировать условие:
-если в листе =К1= группа ячеек равна нулю (для надёжности),
тогда в =H bb= ничего не копировать, т.е выполнение =Sub M_Hbb()= сразу завершаю (а то юзер поставит в А1 или в К4 или в B3, например, "текст" или цифры - так от нечего делать);
-если в =К1= та группа ячеек заполнена, тогда запускаю весь макрос =Sub M_Hbb()=.
...
Рейтинг: 0 / 0
копия определённых столбцов
    #34801087
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nPUBET, Корректировка - жирным шрифтом....
.....
-если в =К1= нет данных - тогда в =H bb= выводит следующее: А1="Месяц", "А2"="Сентябрь" , а в остальныx ячейках пусто (а должно быть везде пусто). =Exit Sub= пробовал, тоже не получается.


Подскажите, пожалуйста, как правильно сформулировать условие:
-если в листе =К1= группа ячеек равна нулю (для надёжности),
тогда в =H bb= ничего не копировать, т.е выполнение =Sub M_Hbb()= сразу завершаю (а то юзер поставит в А1 или в К4 или в B3, например, "текст" или цифры - так от нечего делать);
-если в =К1= та группа ячеек заполнена, тогда запускаю весь макрос =Sub M_Hbb()=.

Файл приложил...
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / копия определённых столбцов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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