|
|
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Есть таблица: A B C D E Иванов 5 100 1000 xxx Иванов 5 100 1000 xxxxxx Иванов 5 100 1000 xx Иванов 5 100 1000 x Иванов 5 100 1000 xxx Сидоров 6 120 1200 xx Сидоров 6 120 1200 x Сидоров 6 120 1200 xxxxxx Сидоров 6 120 1200 xx Сидоров 6 120 1200 xxx Петров 7 125 1250 xxxxxx Петров 7 125 1250 xx Петров 7 125 1250 x Петров 7 125 1250 xxxxxxxx Петров 7 125 1250 x Петров 7 125 1250 xxx Как с помощью макроса удалить все строки, где значение столбца А="Сидоров", и что б все нижние строки заняли места удалённых ??? выход: A B C D E Иванов 5 100 1000 xxx Иванов 5 100 1000 xxxxxx Иванов 5 100 1000 xx Иванов 5 100 1000 x Иванов 5 100 1000 xxx Петров 7 125 1250 xxxxxx Петров 7 125 1250 xx Петров 7 125 1250 x Петров 7 125 1250 xxxxxxxx Петров 7 125 1250 x Петров 7 125 1250 xxx Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 16:53:52 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
OreLКак с помощью макроса удалить все строки, где значение столбца А="Сидоров"См. Help-->AutoFilter method и пример к нему OreLи что б все нижние строки заняли места удалённых ??? После фильтрации удали видимые строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 17:23:48 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Processor OreLКак с помощью макроса удалить все строки, где значение столбца А="Сидоров"См. Help-->AutoFilter method и пример к нему OreLи что б все нижние строки заняли места удалённых ??? После фильтрации удали видимые строки. Автофильтр: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А если без автофильтра ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 17:35:07 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Ставим курсор на начало столбца с фамилиями и: Dim i As Integer i = 0 Do While ActiveCell.Value <> Empty ' пербтираем все фамилии до первой пустой ячейки If ActiveCell.Offset(i, 0) = "Сидоров" Then ' если искомая фамилия -удаляем строку Selection.EntireRow.Delete Else ' иначе просто переходим на след. запись ActiveCell.Offset(1, 0).Activate End If Loop ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 17:44:05 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
infantСтавим курсор на начало столбца с фамилиями и: Dim i As Integer i = 0 Do While ActiveCell.Value <> Empty ' пербтираем все фамилии до первой пустой ячейки If ActiveCell.Offset(i, 0) = "Сидоров" Then ' если искомая фамилия -удаляем строку Selection.EntireRow.Delete Else ' иначе просто переходим на след. запись ActiveCell.Offset(1, 0).Activate End If Loop Спасибо. Попробую на практике. О результате обязательно сообщю завтра ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 17:55:46 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Извините пожалуйста, конечно я ошибся (писал просто на память и сначала хотел немного другой вариант). Надо не If ActiveCell.Offset(i, 0) = "Сидоров" Then - a правильно в данном варианте Do While ActiveCell.Value <> Empty (проверка ячейки которую мы сделали активной) и объявление переменной i и ее инициализация конечно совсем не нужны :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 19:50:02 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
infantИзвините пожалуйста, конечно я ошибся (писал просто на память и сначала хотел немного другой вариант). Надо не If ActiveCell.Offset(i, 0) = "Сидоров" Then - a правильно в данном варианте Do While ActiveCell.Value <> Empty (проверка ячейки которую мы сделали активной) и объявление переменной i и ее инициализация конечно совсем не нужны :-)) Если не трудно можно работающий код написать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 11:48:55 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Option Explicit Public Sub test() If vbCancel = MsgBox("Вы установили курсор на начало проверямого столбца?", _ vbQuestion + vbOKCancel, "Вопрос") Then Exit Sub Do While ActiveCell.Value <> Empty ' Перебираем все фамилии до первой пустой чейки If ActiveCell.Value = "Сидоров" Then ' если Сидоров - удаляем строку Selection.EntireRow.Delete Else ' если нет - переходим на другую строку ActiveCell.Offset(1, 0).Activate End If Loop End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 12:06:37 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
infantOption Explicit Public Sub test() If vbCancel = MsgBox("Вы установили курсор на начало проверямого столбца?", _ vbQuestion + vbOKCancel, "Вопрос") Then Exit Sub Do While ActiveCell.Value <> Empty ' Перебираем все фамилии до первой пустой чейки If ActiveCell.Value = "Сидоров" Then ' если Сидоров - удаляем строку Selection.EntireRow.Delete Else ' если нет - переходим на другую строку ActiveCell.Offset(1, 0).Activate End If Loop End Sub Спасибо огромное всё работает. А если мне надо удалить сразу три фамилии Код: plaintext так будет верно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 12:24:59 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Не совсем. Вот так вставьте If ActiveCell.Value = "Сидоров" or _ ActiveCell.Value = "Иванов" or _ ActiveCell.Value = "Петров" Then ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 12:34:15 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
infantНе совсем. Вот так вставьте If ActiveCell.Value = "Сидоров" or _ ActiveCell.Value = "Иванов" or _ ActiveCell.Value = "Петров" Then Так тоже не хочет работать ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 12:47:26 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
OreL infantНе совсем. Вот так вставьте If ActiveCell.Value = "Сидоров" or _ ActiveCell.Value = "Иванов" or _ ActiveCell.Value = "Петров" Then Так тоже не хочет работать ! Выдаёт ошибку: Compile error: Expected: end of statement. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 12:50:11 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
В коде End If забыл поставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 13:02:18 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
infantНе совсем. Вот так вставьте If ActiveCell.Value = "Сидоров" or _ ActiveCell.Value = "Иванов" or _ ActiveCell.Value = "Петров" Then Спасибо всё заработало. Забыл пробел поставить "Or_" "Or _" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 13:04:20 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Где тут ошибка? не понимаю почему Loop не работает ! Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 12:58:26 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Потому что в else не попадаете :-) Если вам надо весь столбец просмотреть: Do While ActiveCell.Value <> Empty ......... If ActiveCell.Value <= 1 Then ActiveCell.Value = ActiveCell.Value + (ActiveCell.Value * 2) ElseIf ActiveCell.Value > 1 And ActiveCell.Value <= 5 Then ActiveCell.Value = ActiveCell.Value + (ActiveCell.Value * 1.75) ElseIf ActiveCell.Value > 5 And ActiveCell.Value <= 10 Then .......... end if ActiveCell.Offset(1, 0).Activate Loop ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 13:15:07 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
infantПотому что в else не попадаете :-) Если вам надо весь столбец просмотреть: Do While ActiveCell.Value <> Empty ......... If ActiveCell.Value <= 1 Then ActiveCell.Value = ActiveCell.Value + (ActiveCell.Value * 2) ElseIf ActiveCell.Value > 1 And ActiveCell.Value <= 5 Then ActiveCell.Value = ActiveCell.Value + (ActiveCell.Value * 1.75) ElseIf ActiveCell.Value > 5 And ActiveCell.Value <= 10 Then .......... end if ActiveCell.Offset(1, 0).Activate Loop Cпасибо огромное, так всё работает как часы. А есть возможность ускорить процесс ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 13:38:38 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Ну например: Public Sub VSEPereschetPrice() Dim lngCounter As Long, dblTemp As Double If vbCancel = MsgBox("..............", _ vbQuestion + vbOKCancel, "....") Then Exit Sub lngCounter = 0 Do While ActiveCell.Offset(lngCounter, 0).Value <> Empty dblTemp = ActiveCell.Offset(lngCounter, 0).Value If dblTemp <= 1 Then ActiveCell.Offset(lngCounter, 0).Value = dblTemp + (dblTemp * 2) ElseIf dblTemp > 1 And dblTemp <= 5 Then ActiveCell.Offset(lngCounter, 0).Value = dblTemp + (dblTemp * 1.75) .......................... ElseIf dblTemp > 100 Then ActiveCell.Offset(lngCounter, 0).Value = dblTemp + (dblTemp * 1.4) End If lngCounter = lngCounter + 1 Loop End Sub Не активируя каждый раз каждую след. ячейки вы при больших списках избавляетесь от обновления изображения каждый раз. (можно св-во application.screenupdating использовать - но обработчик ошибок не забудьте тогда) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 14:11:50 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Cпасибо буду пробывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 17:30:21 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
infantOption Explicit Public Sub test() If vbCancel = MsgBox("Вы установили курсор на начало проверямого столбца?", _ vbQuestion + vbOKCancel, "Вопрос") Then Exit Sub Do While ActiveCell.Value <> Empty ' Перебираем все фамилии до первой пустой чейки If ActiveCell.Value = "Сидоров" Then ' если Сидоров - удаляем строку Selection.EntireRow.Delete Else ' если нет - переходим на другую строку ActiveCell.Offset(1, 0).Activate End If Loop End Sub А если мне надо оставить только "Иванова" и "Сидорова", а "Петрова" и остальных удалить, как это будет выглядеть ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 12:40:11 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 12:45:44 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Пользователь2 Код: plaintext 1. 2. Спасибо. Как можно это ускорить уж больно медленно работает ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 13:38:25 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
infantНу например: Public Sub VSEPereschetPrice() Dim lngCounter As Long, dblTemp As Double If vbCancel = MsgBox("..............", _ vbQuestion + vbOKCancel, "....") Then Exit Sub lngCounter = 0 Do While ActiveCell.Offset(lngCounter, 0).Value <> Empty dblTemp = ActiveCell.Offset(lngCounter, 0).Value If dblTemp <= 1 Then ActiveCell.Offset(lngCounter, 0).Value = dblTemp + (dblTemp * 2) ElseIf dblTemp > 1 And dblTemp <= 5 Then ActiveCell.Offset(lngCounter, 0).Value = dblTemp + (dblTemp * 1.75) .......................... ElseIf dblTemp > 100 Then ActiveCell.Offset(lngCounter, 0).Value = dblTemp + (dblTemp * 1.4) End If lngCounter = lngCounter + 1 Loop End Sub Не активируя каждый раз каждую след. ячейки вы при больших списках избавляетесь от обновления изображения каждый раз. (можно св-во application.screenupdating использовать - но обработчик ошибок не забудьте тогда) Код: 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. Что здесь не так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 14:39:11 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
OreL А если мне надо оставить только "Иванова" и "Сидорова", а "Петрова" и остальных удалить, как это будет выглядеть ??? Пользователь2 Код: plaintext 1. 2. вообще-то If ActiveCell.Value <> "Сидоров" And _ ActiveCell.Value <> "Иванов" Then Selection.EntireRow.Delete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 14:40:26 |
|
||
|
VBA-(EXCEL)-Макрос
|
|||
|---|---|---|---|
|
#18+
Eugene Mailov OreL А если мне надо оставить только "Иванова" и "Сидорова", а "Петрова" и остальных удалить, как это будет выглядеть ??? Пользователь2 Код: plaintext 1. 2. вообще-то If ActiveCell.Value <> "Сидоров" And _ ActiveCell.Value <> "Иванов" Then Selection.EntireRow.Delete А в чём разница ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 15:10:08 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33216238&tid=2167339]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 392ms |

| 0 / 0 |
