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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   [решено] Поиск фразы в столбце и создание записи в соседнем столбце (http://forum.oszone.net/showthread.php?t=309163)

blackeangel 13-12-2015 16:13 2584393

Поиск фразы в столбце и создание записи в соседнем столбце
 
Всем добрый день. Есть такая не сложная задача:
Найти столбец содержащий в первой строке слово "маршрут", в нём искать регулярные выражения как 3000,3100,3200,3300,3400,3600,3800,3801,2400 и справа от столбца с "маршрут" создать столбец "пришёл" в котором будем писать если нашлось 3000, то пишем 3000,если нет 3000, но нашлось 3100 то пишем 3100 и тд до последней записи в файле.
Как это все реализовать?Помогите пожалуйста!
Пример как было и как должно быть прилагаю

blackeangel 13-12-2015 16:39 2584401

себе представляю это так:

Код:

sub типа пример ()
задаем переменные
а=3000
b=3100
c=3200
d=3300
...
ищем столбец содержащий в первой строке "Маршрут"
Получаем его номер
дальше запускаем for со 2 до последней строки содержащей запись в столбце с "Маршрут"
запускаем if содержит(входит) а then
в столбец с номером "Маршрут" +1 и строка [i] пишем константу а
else
 if содержит(входит) b then
в столбец с номером "Маршрут" +1 и строка [i] пишем константу b
 else
    if содержит(входит) c then
в столбец с номером "Маршрут" +1 и строка [i] пишем константу c
    else
...
end if
end sub

но как это реализовать на ЯП не знаю...

Iska 13-12-2015 18:07 2584425

В выложенном примере «B7» содержит «3050». Откуда оно взялось, если его нет в указанном Вами перечне:
Цитата:

Цитата blackeangel
3000,3100,3200,3300,3400,3600,3800,3801,2400 »

И вообще непонятно, как понимать эту фразу:
Цитата:

Цитата blackeangel
искать регулярные выражения как 3000,3100,3200,3300,3400,3600,3800,3801,2400 »

?!

P.S. Выложите реальный образец. Пример, как должно быть, лучше делать на отдельном листе.

blackeangel 13-12-2015 18:53 2584447

Цитата:

Цитата Iska (Сообщение 2584425)
В выложенном примере «B7» содержит «3050». Откуда оно взялось, если его нет в указанном Вами перечне:
Цитата:

Цитата blackeangel
3000,3100,3200,3300,3400,3600,3800,3801,2400 »

И вообще непонятно, как понимать эту фразу:
Цитата:

Цитата blackeangel
искать регулярные выражения как 3000,3100,3200,3300,3400,3600,3800,3801,2400 »

?!

P.S. Выложите реальный образец. Пример, как должно быть, лучше делать на отдельном листе.

Так искать надо как содержит,там и буквы есть и скобочки ещё,так что 3050 это как лишний мусор. Я дал кусок да ещё и упрощённый.
Как понимать мою фразу?как константы.Все перечисленные это и есть константы(9 штук), которые искать надо.Во втором своём сообщении я примерно описал как программа должна работать. .

blackeangel 14-12-2015 07:18 2584596

Цитата:

Цитата Iska (Сообщение 2584425)
В выложенном примере «B7» содержит «3050». Откуда оно взялось, если его нет в указанном Вами перечне:
Цитата:

Цитата blackeangel
3000,3100,3200,3300,3400,3600,3800,3801,2400 »

И вообще непонятно, как понимать эту фразу:
Цитата:

Цитата blackeangel
искать регулярные выражения как 3000,3100,3200,3300,3400,3600,3800,3801,2400 »

?!

P.S. Выложите реальный образец. Пример, как должно быть, лучше делать на отдельном листе.

Вот живой рабочий пример,сильно от того что давал ранее не отличается.Было и стало на разных листах, как и просил

blackeangel 15-12-2015 09:29 2584983

Решение найдено.
Код:

Sub raspil()
Application.ScreenUpdating = False
i = 2
sWhatFind = "Маршрут"
Cells.Find(What:=sWhatFind, After:=ActiveCell, SearchOrder:=xlByColumns).Activate
ncolumn = ActiveCell.Column
Do While Cells(i, ncolumn).Value <> Empty
If Cells(i, ncolumn).Value Like "*3000*" Then
Cells(i, ncolumn + 1).Value = "3000"
Else
If Cells(i, ncolumn).Value Like "*3100*" Then
Cells(i, ncolumn + 1).Value = "3100"
Else
If Cells(i, ncolumn).Value Like "*3200*" Then
Cells(i, ncolumn + 1).Value = "3200"
Else
If Cells(i, ncolumn).Value Like "*3300*" Then
Cells(i, ncolumn + 1).Value = "3300"
Else
If Cells(i, ncolumn).Value Like "*3400*" Then
Cells(i, ncolumn + 1).Value = "3400"
Else
If Cells(i, ncolumn).Value Like "*3600*" Then
Cells(i, ncolumn + 1).Value = "3600"
Else
If Cells(i, ncolumn).Value Like "*3800*" Then
Cells(i, ncolumn + 1).Value = "3800"
Else
If Cells(i, ncolumn).Value Like "*3801*" Then
Cells(i, ncolumn + 1).Value = "3801"
Else
If Cells(i, ncolumn).Value Like "*2400*" Then
Cells(i, ncolumn + 1).Value = "2400"
End If
End If
End If
End If
End If
End If
End If
End If
End If
i = i + 1
Loop
Application.ScreenUpdating = True
End Sub


okshef 15-12-2015 21:02 2585218

По-моему, с помощью Select Case вышло бы короче и понятнее

Iska 15-12-2015 21:54 2585232

Там «Like»'а нету. Если, конечно, в новых версиях не разрешили использовать его в «Is». Update: обходной путь указал коллега okshef ниже.

А сократить, конечно, можно было. Хотя бы использовав не вложенность, а «ElseIf», а для скорости один раз брать значение «Cells(i, ncolumn).Value», а не десяток.

okshef 15-12-2015 22:14 2585239

Как-то так: http://ccm.net/faq/36211-vba-using-t...th-select-case

Iska 15-12-2015 22:52 2585253

okshef, «Good» :). И ведь видел когда-то эту технику (не в связи с Like). Но не пользуешься — забыл.

a_axe 22-12-2015 09:58 2587291

okshef, браво! Искренне считал, что это на select case не реализуется, всегда использовал if. Снимаю шляпу :hi:

Iska 22-12-2015 15:54 2587406

a_axe, ага. У меня примерно такое же изумление было, когда впервые увидел технику «Select Case True», причём — даже не в связи с «Like», но тоже какой-то обходной путь реализации (деталей — кто, когда — уже не припомню).


Время: 10:37.

Время: 10:37.
© OSzone.net 2001-