Как сравнить часть ячейки????

Программирование на Visual Basic for Applications
UliyaP
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 09.10.2006 (Пн) 21:09

Как сравнить часть ячейки????

Сообщение UliyaP » 17.10.2006 (Вт) 18:11

У меня есть зелопленый столбец Мне надо сравнить часть ячейки и записать в месть целой ячейки соответствующее значение.
Пример PhotoSmart R607 BMW WilliamsF1 Team
Надо определить что ячейка содержит PhotoSmart и записать в эту ячейку Принтер.
Подскажите как это сделать?Я идиот! Убейте меня, кто-нибудь!??

UliyaP
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 09.10.2006 (Пн) 21:09

Сообщение UliyaP » 17.10.2006 (Вт) 18:13

--------------------------------------------------------------------------------

У меня есть заполненый столбец. Мне надо сравнить часть ячейки и записать в место целой ячейки соответствующее значение.
Пример PhotoSmart R607 BMW WilliamsF1 Team
Надо определить что ячейка содержит PhotoSmart и записать в эту ячейку Принтер.
Подскажите как это сделать?Я идиот! Убейте меня, кто-нибудь!??

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 17.10.2006 (Вт) 18:58

Если с помощью VBA, то...

в ячейке например так:

Код: Выделить всё
If [A1] Like "*PhotoSmart*" Then [A1] = "Принтер"


Код: Выделить всё
If InStr([A1], "PhotoSmart") Then [A1] = "Принтер"


Код: Выделить всё
If Application.CountIf([A1], "*PhotoSmart*") Then [A1] = "Принтер"


Код: Выделить всё
'здесь запись производится в любом случае
[A1] = IIf(InStr([A1], "PhotoSmart"), "Принтер", [A1])


можно еще с пом. Regular Expressions, но все зависит от реальной задачи.

Но в столбце быстрее всего так:

Код: Выделить всё
Sub Test()
    Columns("A:A").Replace What:="*PhotoSmart*", Replacement:="принтер"
End Sub
Привет,
KL

UliyaP
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 09.10.2006 (Пн) 21:09

Сообщение UliyaP » 17.10.2006 (Вт) 20:09

Спасибо!!!!!
Ты опять меня очень выручил!!!!!!
Завтра обязательно попробую!!!!!!

UliyaP
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 09.10.2006 (Пн) 21:09

Сообщение UliyaP » 17.10.2006 (Вт) 20:12

А что бы он записывал в соседний столбей или какой-то другой?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 17.10.2006 (Вт) 21:41

Тогда чтобы не перебирать все ячейки что-нить в этом духе:

Код: Выделить всё
Sub test()
    Dim rng As Range, c As Range, cnt As Long, i As Long
    On Error Resume Next
    With ActiveSheet
        Set rng = Intersect(.[A:A], .UsedRange)
        Set c = rng(1)
    End With
    cnt = Application.CountIf(rng, "*PhotoSmart*")
    For i = 1 To cnt
        Set c = rng.Find("PhotoSmart", c)
        c.Offset(, 3) = "Принтер"
    Next i
End Sub
Привет,
KL

Estilla
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 27.09.2006 (Ср) 21:07
Откуда: Москва

Сообщение Estilla » 18.10.2006 (Ср) 11:10

KL писал(а):Если с помощью VBA, то...
в ячейке например так:
Код: Выделить всё
If [A1] Like "*PhotoSmart*" Then [A1] = "Принтер"



Первый раз увидел, что можно квадратными скобками обратиться к ячейке. А на сколько это правильно?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.10.2006 (Ср) 11:12

Вполне правильно.
Иногда удобно, иногда нет.
Lasciate ogni speranza, voi ch'entrate.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 18.10.2006 (Ср) 13:40

alibek писал(а):Вполне правильно.
Иногда удобно, иногда нет.


Пара примеров неудобства:

- обращение к рангу с помощью квадратных скобок ([]) расчитывается VBA медленнее чем Range(). Поэтому лучше не использовать этот синтаксис внутри циклов.

- запись типа [VLOOKUP(A1,B1:D10;2;0)] эквивалентна Evaluate("VLOOKUP(A1,B1:D10;2;0)"), но не позволяет свободной манипуляции формулой путем использования переменных.
Привет,
KL


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 67

    TopList