Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   макро удалит из Excel строку (http://forum.oszone.net/showthread.php?t=54520)

Ginger 29-09-2005 17:49 360070

макро удалит из Excel строку
 
нужна помощь с macro в Excel.

надо чтобы макро удаляло строки (целые row) из Excel файла, где встречаются заданые слова (при чем они могут встрачатся меж другими словами) в любой из колонок строки.

hasherfrog 30-09-2005 11:00 360289

Начерно, без изысков:
Код:

Sub Macros1()

strTarget$ = "la-la-la"    ' <----- Place word (substring) to find here
nTotal = Rows.Count        ' <----- Place rows range here (1 to nTotal)

strTarget1$ = strTarget$ + " "
strTarget2$ = " " + strTarget$
strTarget3$ = " " + strTarget$ + " "

For I = 1 To nTotal ' don't use Rows.Count here

again:
bFound = 0

For J = 1 To Columns.Count
strThis$ = Cells(I, J)
If strThis$ = strTarget$ Then bFound = 1
If InStr(strThis$, strTarget1$) Then bFound = 1
If InStr(strThis$, strTarget2$) Then bFound = 1
If InStr(strThis$, strTarget3$) Then bFound = 1
Next J

If bFound = 0 Then GoTo notfound
Rows(I).Select
Selection.Delete Shift:=xlUp
GoTo again

notfound:
Next I

End Sub


hasherfrog 30-09-2005 11:05 360291

Удаляются строки, содержащие
1. ТОЧНО подстроку для поиска,
2. Подстроку, отделённую справа-слева пробелами
3. Подстроку, отделённую слева пробелом
3. Подстроку, отделённую справа пробелом

Т.е. для варианта "la-la-la":
Будут удалены
"la-la-la"
"la-la-la 3463 27652 "
"6543658 4678 4576 la-la-la 5678"
"555 la-la-la"
"555555la-la-la 55"
"5555 la-la-la555"
Но не будет удалено:
"555la-la-la555" (оставлено специально)
"555,la-la-la,555" (Вот это уже хуже)

Ginger 01-10-2005 02:04 360574

hasherfrog
хм... как-то не очень на VB похоже...

а если у меня несколько слов с которыми нужно удалять строки?
мне нужна array.

aESThete 03-10-2005 10:04 360979

hasherfrog
Я бы вставил еще строчку
Код:

Rows(I).Select
Selection.Delete Shift:=xlUp
nTotal = nTotal - 1
GoTo again

Не могу въехать почему Rows.Count прямо в цикле использовать нельзя?

Ginger
Самый простой тупой ;) и медленный вариант - принимать strTarget$ в данной процедуре параметром. Соответственно вызывать эту процедуру для каждого элемента вашего массива.

hasherfrog 06-10-2005 12:46 362001

>> мне нужна array.
А как Вы его задаёте? Мне тут не совсем понятно, можно его внутри макроса определить, или его пользователь как-то вводит в окошечках, или ещё как?

aESThete
>> Не могу въехать почему Rows.Count прямо в цикле использовать нельзя?
Э-э-э... Я уже не знаю, может, это у меня артефакт какой-то остался?...


Время: 21:13.

Время: 21:13.
© OSzone.net 2001-