![]() |
![]() |
|
Excel удаление строк | ☑ | ||
---|---|---|---|---|
0
buh1977
16.12.09
✎
13:05
|
НомСтр = 7;
Пока Не НомСтр = 254 Цикл ЗначСум = СокрЛП(ЛистВыгрузкиСБ.Cells(НомСтр,4).Value); Если (ЗначСум = "")или(ЗначСум = "0") Тогда Сумма0 = "0.00"; ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = Сумма0; ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ; ; Иначе ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум; проблема припопытки удалить строки с нулевыми или пуствми значениями определенных ячеек.так срабатывает но приэтом удаляет строки через 1 ..т.е 2,4.8 не смотря на то что 3и 5 тоже пустые как граиотно удалить строки в файле КонецЕсли; НомСтр = НомСтр + 1; КонецЦикла; |
|||
1
ДенисЧ
16.12.09
✎
13:06
|
После удаления строка следующая получает номер удалённой. Дальше рассказывать?
|
|||
2
lxs
16.12.09
✎
13:06
|
(1) опередил ))
|
|||
3
buh1977
16.12.09
✎
13:10
|
а если она не удалилалсь..т.е второе условие выполнено тогда тоже не надо увеличивать номстр
|
|||
4
buh1977
16.12.09
✎
13:11
|
пожалуйста уж напишите как правильнонадо увеличить счетчик и где
|
|||
5
wise
16.12.09
✎
13:17
|
при удалениии НомСтр НЕ должна увеличиваться...!!
|
|||
6
ДенисЧ
16.12.09
✎
13:24
|
ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ;
номСтр = НомСтр-1; |
|||
7
buh1977
17.12.09
✎
07:33
|
Пока Не НомСтр = 254 Цикл
ЗначСум = СокрЛП(ЛистВыгрузкиСБ.Cells(НомСтр,4).Value); Если (ЗначСум = "")или(ЗначСум = "0") Тогда Сумма0 = "0.00"; ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ; номСтр = НомСтр-1; Иначе ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум; КонецЕсли; НомСтр = НомСтр + 1; КонецЦикла; так будет правильно |
|||
8
buh1977
17.12.09
✎
07:34
|
чего тоя у меня не получается подскажите гже косяк
|
|||
9
buh1977
17.12.09
✎
07:37
|
как то странно изменяется значения номера в счетчике при удалении,если просто не увеличивать при удалении он циклит если до конца файла не встретит заполненную строку
|
|||
10
buh1977
17.12.09
✎
07:38
|
в предложеннорм варианте тоже зависает
|
|||
11
Rie
17.12.09
✎
07:38
|
(8) Как ты думаешь, после удаления строки - их становится меньше?
Если да - то, может быть, имеет смысл несколько иначе сформулировать условие цикла? |
|||
12
buh1977
17.12.09
✎
07:38
|
в предложенном коде тоже зависает
|
|||
13
buh1977
17.12.09
✎
07:40
|
8 например как
|
|||
14
Rie
17.12.09
✎
07:40
|
(11) В коде из (7)?
Ну так при удалении пустых строк НомСтр ну никак не станет 254. Никогда. |
|||
15
buh1977
17.12.09
✎
07:41
|
подскажите варианты решения по условию цикла
|
|||
16
Rie
17.12.09
✎
07:43
|
(15) Ну, например,
ВсегоСтрок = 254; Пока НомСтр<ВсегоСтрок Цикл //... Если УдаляетсяСтрока Тогда //... НомСтр = НомСтр-1; ВсегоСтрок = ВсегоСтрок-1; КонецЕсли; //... КонецЦикла; |
|||
17
buh1977
17.12.09
✎
07:54
|
НомСтр = 7;
ВсегоСтрок = 254; Пока НомСтр<ВсегоСтрок Цикл // Не НомСтр = 254 Цикл ЗначСум = СокрЛП(ЛистВыгрузкиСБ.Cells(НомСтр,4).Value); Если (ЗначСум = "")или(ЗначСум = "0") Тогда УдаляетсяСтрока=Истина; Иначе УдаляетсяСтрока=Ложь; КонецЕсли; Если УдаляетсяСтрока Тогда ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ; номСтр = НомСтр-1; ВсегоСтрок = ВсегоСтрок-1; Иначе ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум; КонецЕсли; // НомСтр = НомСтр + 1; КонецЦикла; |
|||
18
buh1977
17.12.09
✎
07:54
|
таким образом
|
|||
19
Rie
17.12.09
✎
07:56
|
(18) Спорим, что опять зацикливается?
(Ты НомСтр _увеличивать_ нигде не собираешься?) |
|||
20
buh1977
17.12.09
✎
07:57
|
там где комментарии снять
|
|||
21
buh1977
17.12.09
✎
07:58
|
или так
НомСтр = 7; ВсегоСтрок = 254; Пока НомСтр<ВсегоСтрок Цикл // Не НомСтр = 254 Цикл ЗначСум = СокрЛП(ЛистВыгрузкиСБ.Cells(НомСтр,4).Value); Если (ЗначСум = "")или(ЗначСум = "0") Тогда УдаляетсяСтрока=Истина; Иначе УдаляетсяСтрока=Ложь; КонецЕсли; Если УдаляетсяСтрока Тогда ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ; номСтр = НомСтр-1; ВсегоСтрок = ВсегоСтрок-1; Иначе ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум; НомСтр = НомСтр + 1; КонецЕсли; КонецЦикла; |
|||
22
Rie
17.12.09
✎
08:01
|
(21) Тоже не взлетит.
Если увеличение номера у тебя в Иначе - то не нужно уменьшать его в Тогда. И мелкие советы: можно написать прямо: УдаляетсяСтрока = (ЗначСум="") ИЛИ (ЗначСум="0"); А можно это же условие вставить и непосредственно в оператор Если УдаляетсяСтрока Тогда (вместо УдаляетсяСтрока) - но это уже дело вкуса, введение переменной заодно и текст комментирует, и упрощает изменения. |
|||
23
buh1977
17.12.09
✎
08:05
|
так где же увеличивать счетчик
|
|||
24
buh1977
17.12.09
✎
08:08
|
не получается не по первому варианту не по второму- строки вычищает все
|
|||
25
Rie
17.12.09
✎
08:11
|
(24) А подумать не пробовал?
ВсегоСтрок = 254; НомСтр = 7; Пока НомСтр<ВсегоСтрок Цикл Если СтрокуНужноУдалить(НомСтр) Тогда // удаляем строку ВсегоСтрок = ВсегоСтрок-1; Иначе // что-то другое со строкой проворачиваем НомСтр = НомСтр+1; КонецЕсли; КонецЦикла; |
|||
26
buh1977
17.12.09
✎
09:32
|
еще вопрос ..все отработало корректно но
в фале оказались кривые значения 11 307,6000000009 4 708,50000000099 8 300,76 8 455,5 11 307,6000000009 13 725,79 5 321,06 76 219,21 5 458,36000000099 5 361,50000000099 10 716,9200000009 |
|||
27
buh1977
17.12.09
✎
09:33
|
причем исходные значения с точностью до 2 знака и непонятно по какому признаку он часть пишет правильно а часть косячит
|
|||
28
Масянька
17.12.09
✎
09:34
|
Я так делала:
й = КолВоСтрок; Пока й >= 2 Цикл Состояние("Выполняется удаление пустых строк..."); мТекЗначение = Строка(мТекЛист.Cells(й, мКолонка).Value); Если (НЕ ЗначениеЗаполнено(мТекЗначение)) Тогда мТекЛист.Rows(й).Delete(); й = й - 1; Иначе й = й - 1; КонецЕсли; ИндикаторОбработки = ИндикаторОбработки + 1; КонецЦикла; й - это количество строк уже посчитанное. |
|||
29
Aprobator
17.12.09
✎
09:43
|
(0)
|
|||
30
Rie
17.12.09
✎
09:48
|
(26) Округли, если тебя именно в последних знаках цифры беспокоят.
|
|||
31
buh1977
17.12.09
✎
12:37
|
еще вопрос как правильно при каждом запуске копировать эталонный файл с одного места в другое
|
|||
32
buh1977
17.12.09
✎
12:40
|
КнигаВыгрузкиЭлектронноСБ.SaveAs("c\эталон\1.xls","c\старт\1.xls");
типа этого или как |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |