Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Номер столбца из ячейки / 12 сообщений из 12, страница 1 из 1
15.06.2007, 13:10:30
    #34597450
Evrodiller
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Доброго времени суток!
Вот пытаюсь разрешить такую задачку, но чет руки видать не оттуд ростут :(
1. В ячейку В1 вписывается цифра (например 10) в Листе 1
2. На Листе2 производится сокрытие пустых строк и копируются те, что не пусты (например с А10 по К25)
2. Нужно найти строку С & B1 (С10) и вставить туда скопированный ранее результат
3. На Листе 1 прибавить к результату В1 кол-во скопированных ячеек и вписать в ячейку В1
Пример: В1 + 15

Код: 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.
Sub Arxiv ()

If Range("B1") =  1  Then
   
   
For y =  10  To  33  'Строка от 8 до 52
 If Cells(y,  2 ).Value =  0  Then
  Rows(y).Hidden = True
  
  End If
  Next
Dim Rk, Rk0
Range("A1") = Columns("H").Rows( 65000 ).End(xlUp).Row ' определение первой пустой ячейки в колонке А
    Rk = Range("A1")
    Range("A10:O" & Rk).Select
    Selection.Copy
    Sheets("Архив Нарядов").Select
    Rk0 = Columns("B").Rows( 65000 ).End(xlUp).Row
        
    
    Range("A" & Rk0 +  1 ).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.CutCopyMode = False
Sheets("Ввод нарядов").Select
    Range("D2").Select
    Application.CutCopyMode = False
    End If
    

End Sub
...
Рейтинг: 0 / 0
16.06.2007, 08:53:37
    #34599280
natalitvinenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Вы в начале программы не указываете лист в адресе ячейки. Нет перехода с листа1 на лист2
...
Рейтинг: 0 / 0
18.06.2007, 08:52:01
    #34600803
Evrodiller
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
natalitvinenkoВы в начале программы не указываете лист в адресе ячейки. Нет перехода с листа1 на лист2
Угу, примером ошибся :(
Вот начал делать по другому, но ВБА ругается, что не находит объект в библиотеке :(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub test()
If Range("A1") =  1  Then
For y =  8  To  33  'Строка от 8 до 33
 If Cells(y,  2 ).Value =  0  Then
  Rows(y).Hidden = True 'Скрыть пустые строки в этом диапазоне
  End If
  Next
'Кол-во непустых строк приплюсовать к имеющемуся значению
Dim N_st, St
St = Range("B1")
N_st = Columns("H").Rows( 65000 ).End(xlUp).Row
Range("B1") = N_st + St

End If
End Sub
В чем может быть проблема , ума не приложу, работаю в Excel 2007
...
Рейтинг: 0 / 0
18.06.2007, 10:16:48
    #34600985
Evrodiller
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub test()
Dim y 
y = Range("A9 : O33") 'Диапазон с А9 по О33
If Range("A1") =  1  Then
For y =  9  To  33  'Строка от 8 до 33, если есть не соответствующие условию, то их скрыть
 If Cells(y,  3 ).Value =  0  Then
  Rows(y).Hidden = True
  
  End If
  Next
  
Dim N_st, St
St = Range("B1")
N_st = Columns("H").Rows( 65000 ).End(xlUp).Row 
Range("B1") = N_st + St

End If
End Sub

Пришлось обходить проблему и "обзывать" y именем, можь кому и пригодится помимо меня
...
Рейтинг: 0 / 0
18.06.2007, 10:46:42
    #34601089
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Evrodiller
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub test()
Dim y 
y = Range("A9 : O33") 'Диапазон с А9 по О33
If Range("A1") =  1  Then
For y =  9  To  33  'Строка от 8 до 33, если есть не соответствующие условию, то их скрыть
 If Cells(y,  3 ).Value =  0  Then
  Rows(y).Hidden = True
  
  End If
  Next
  
Dim N_st, St
St = Range("B1")
N_st = Columns("H").Rows( 65000 ).End(xlUp).Row 
Range("B1") = N_st + St

End If
End Sub

Пришлось обходить проблему и "обзывать" y именем, можь кому и пригодится помимо меня


Код: plaintext
y = Range("A9 : O33") 'Диапазон с А9 по О33
эта строка не имеет смысла, её можно удалить
А то что переменную объявить, нужно было, то это наверное строка
Код: plaintext
Option Explicit
В области Declarations стоит
...
Рейтинг: 0 / 0
20.06.2007, 08:07:18
    #34606518
Evrodiller
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Сделал вот так, но работает медленно чем хотелось бы.
Код: 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.
Sub test()
Application.ScreenUpdating = False
Dim y

If Range("A1") =  1  Then
For y =  9  To  33  'Строка от 8 до 33
 If Cells(y,  3 ).Value =  0  Then
  Rows(y).Hidden = True
  
  End If
  Next
  
Dim n1, n2
'n1=номер последней полной ячейки в вводе нарядов (диапазон)
'n2= номер последней полной ячейки в архиве, после которой будет вставка данных из ввода нарядов
 n1 = Columns("B").Rows( 65000 ).End(xlUp).Row
Range("B10:W" & n1).Select
    Selection.Copy
    Sheets("Архив нарядов").Select
    n2 = Columns("B").Rows( 65000 ).End(xlUp).Row
    Range("A" & n2 +  1 ).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.CutCopyMode = False
Sheets("Ввод нарядов").Select
    Range("D2").Select
    Application.CutCopyMode = False
    End If
Application.ScreenUpdating = True
End Sub
Можно ли как-то оптимизировать этот код?
...
Рейтинг: 0 / 0
20.06.2007, 08:33:55
    #34606566
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub test()
Application.ScreenUpdating = False
Dim y, n
If Range("A1") =  1  Then

 For y =  9  To  33  'Строка от 8 до 33
  If Cells(y,  3 ).Value =  0  Then
    Rows(y).Hidden = True
   Else
    n = Sheets("Лист2").Range("B" & Rows.Count).End(xlUp).Row +  1 
    Sheets("Лист2").Range("A" & n & ":" & "V" & n).Value = _
    Sheets("Лист1").Range("B" & y & ":" & "W" & y).Value
  End If
 Next
  
Sheets("Лист1").Select
Range("D2").Select

End If
Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
20.06.2007, 09:43:57
    #34606696
Evrodiller
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Deggasad
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub test()
Application.ScreenUpdating = False
Dim y, n
If Range("A1") =  1  Then

 For y =  9  To  33  'Строка от 8 до 33
  If Cells(y,  3 ).Value =  0  Then
    Rows(y).Hidden = True
   Else
    n = Sheets("Лист2").Range("B" & Rows.Count).End(xlUp).Row +  1 
    Sheets("Лист2").Range("A" & n & ":" & "V" & n).Value = _
    Sheets("Лист1").Range("B" & y & ":" & "W" & y).Value
  End If
 Next
  
Sheets("Лист1").Select
Range("D2").Select

End If
Application.ScreenUpdating = True
End Sub

Спасибо за участие в разрешение вопроса, но с этим кодом все значительно дольше просчитывает :( гдет в два раза больше времени уходит на расчет, чем в моем варианте
...
Рейтинг: 0 / 0
20.06.2007, 11:06:13
    #34606972
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Evrodiller
Спасибо за участие в разрешение вопроса, но с этим кодом все значительно дольше просчитывает :( гдет в два раза больше времени уходит на расчет, чем в моем варианте

Хотел покрасивей сделать. Вот так поробуй, должно быть быстро.

Код: 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.
Sub test()
Application.ScreenUpdating = False
Dim icel As Range, n, m1, m2, MyRange As Range, MyRange2 As Range
If Range("A1") =  1  Then
' с какой по какую ячейку
m1 =  9 
m2 =  33 

 For Each icel In Sheets("Лист1").Range("C" & m1 & ":" & "C" & m2)
  If icel =  0  Then
        If MyRange Is Nothing Then
          Set MyRange = icel
         Else
          Set MyRange = Application.Union(MyRange, icel)
        End If
  End If
 Next icel
 MyRange.EntireRow.Hidden = True
 Set icel = Nothing
 Set MyRange = Nothing
 
 n = Sheets("Лист2").Range("B" & Rows.Count).End(xlUp).Row +  1 
 
 Sheets("Лист2").Range("A" & n & ":" & "V" & n + m2 - m1).Value = _
  Sheets("Лист1").Range("B" & m1 & ":" & "W" & m2).Value
 
 For Each icel In Sheets("Лист2").Range("B" & n & ":" & "B" & n + m2 - m1)
  If icel =  0  Then
        If MyRange Is Nothing Then
          Set MyRange = icel
         Else
          Set MyRange = Application.Union(MyRange, icel)
        End If
  End If
 Next icel
 MyRange.EntireRow.Delete
 Set icel = Nothing
 Set MyRange = Nothing
  
End If
Application.ScreenUpdating = True
End Sub

Если нужно копировать вместе со строками в которых столбец "С" пустой, то удали вторую часть кода. Вот эту
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 For Each icel In Sheets("Лист2").Range("B" & n & ":" & "B" & n + m2 - m1)
  If icel =  0  Then
        If MyRange Is Nothing Then
          Set MyRange = icel
         Else
          Set MyRange = Application.Union(MyRange, icel)
        End If
  End If
 Next icel
 MyRange.EntireRow.Delete
 Set icel = Nothing
 Set MyRange = Nothing
...
Рейтинг: 0 / 0
20.06.2007, 12:19:45
    #34607284
Evrodiller
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Deggasad
Ваш пример
Время на расчет 3 секунды при чем нет разницы сколько строк заполнено в архиве
Мой пример: Время на рсчет 4 секунды, но после 8500 строки уменьшилось до 1 секунды
Иль я торможу, иль лыжи по асфальту не скользят %)

В любом случае, огромное спасибо, за потраченное время :)
...
Рейтинг: 0 / 0
20.06.2007, 13:16:19
    #34607551
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
Evrodiller Deggasad
Ваш пример
Время на расчет 3 секунды при чем нет разницы сколько строк заполнено в архиве
Мой пример: Время на рсчет 4 секунды, но после 8500 строки уменьшилось до 1 секунды
Иль я торможу, иль лыжи по асфальту не скользят %)

В любом случае, огромное спасибо, за потраченное время :)

А если в столбце "С:С" побольше нулевых ячеек сделать???
...
Рейтинг: 0 / 0
20.06.2007, 16:42:56
    #34608451
Evrodiller
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Номер столбца из ячейки
DeggasadА если в столбце "С:С" побольше нулевых ячеек сделать???
А смысл ? что это даст в итоге?
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Номер столбца из ячейки / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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