Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Есть часть слова в ячейке, хочу чтобы он находил в другой яч - Страница 3 - Мир MS Excel

Старая форма входа
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Модератор форума: китин, _Boroda_  
Есть часть слова в ячейке, хочу чтобы он находил в другой яч
wwizard Дата: Среда, 18.04.2012, 17:51 | Сообщение № 41
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Это я к примеру привел
intel|video|core
 
Ответить
СообщениеЭто я к примеру привел
intel|video|core

Автор - wwizard
Дата добавления - 18.04.2012 в 17:51
wwizard Дата: Среда, 18.04.2012, 20:23 | Сообщение № 42
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

А если я хочу чтобы он искал от пробела до пробела, то мне просто надо запятые, здесь: "," поменять на пробел " "
 
Ответить
СообщениеА если я хочу чтобы он искал от пробела до пробела, то мне просто надо запятые, здесь: "," поменять на пробел " "

Автор - wwizard
Дата добавления - 18.04.2012 в 20:23
Hugo Дата: Среда, 18.04.2012, 20:39 | Сообщение № 43
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Нет. В этой версии в параметрах ставится тот разделитель, который будет виден в результате (если будет несколько подходящих значений, там есть такие).
А тот разделитель, по которому бьётся строка, в коде тут:
[vba]
Code
For Each a In Split(s, ",")
[/vba]
Можно в код добавить ещё один параметр, который будет овечать за эту опцию - я уже предлагал, но Вы сказали "не не надо, по запятым нормально" smile

Сделал:
[vba]
Code
Option Explicit

Function izvlech(s$, sep_s$, sep_$, ParamArray par()) As String
       Dim a, p, i As Byte, flag As Boolean
       izvlech = ""
       For Each p In par
           If InStr(p, "|") Then
               For Each a In Split(s, sep_s)
                   If UCase(a) Like "*" & UCase(Split(p, "|")(0)) & "*" Then
                       flag = False
                       For i = 1 To UBound(Split(p, "|"))
                           If UCase(a) Like "*" & UCase(Split(p, "|")(i)) & "*" Then
                     flag = True
                           End If
                       Next
                       If Not flag Then izvlech = izvlech & sep_ & Trim(a)
                   End If
               Next
           End If
           If Len(izvlech) Then
               izvlech = Mid(izvlech, Len(sep_) + 1)
               Exit Function
           End If
       Next
End Function
[/vba]
Но теперь на листе нужно писать уже так (если делим по пробелам):
Code
=izvlech($D13;" ";", ";E$1;E$2;E$3;E$4)

т.е. все параметры нужно двигать вниз на одну позицию, т.к. выше появился разделитель исходной строки.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНет. В этой версии в параметрах ставится тот разделитель, который будет виден в результате (если будет несколько подходящих значений, там есть такие).
А тот разделитель, по которому бьётся строка, в коде тут:
[vba]
Code
For Each a In Split(s, ",")
[/vba]
Можно в код добавить ещё один параметр, который будет овечать за эту опцию - я уже предлагал, но Вы сказали "не не надо, по запятым нормально" smile

Сделал:
[vba]
Code
Option Explicit

Function izvlech(s$, sep_s$, sep_$, ParamArray par()) As String
       Dim a, p, i As Byte, flag As Boolean
       izvlech = ""
       For Each p In par
           If InStr(p, "|") Then
               For Each a In Split(s, sep_s)
                   If UCase(a) Like "*" & UCase(Split(p, "|")(0)) & "*" Then
                       flag = False
                       For i = 1 To UBound(Split(p, "|"))
                           If UCase(a) Like "*" & UCase(Split(p, "|")(i)) & "*" Then
                     flag = True
                           End If
                       Next
                       If Not flag Then izvlech = izvlech & sep_ & Trim(a)
                   End If
               Next
           End If
           If Len(izvlech) Then
               izvlech = Mid(izvlech, Len(sep_) + 1)
               Exit Function
           End If
       Next
End Function
[/vba]
Но теперь на листе нужно писать уже так (если делим по пробелам):
Code
=izvlech($D13;" ";", ";E$1;E$2;E$3;E$4)

т.е. все параметры нужно двигать вниз на одну позицию, т.к. выше появился разделитель исходной строки.

Автор - Hugo
Дата добавления - 18.04.2012 в 20:39
wwizard Дата: Среда, 18.04.2012, 20:51 | Сообщение № 44
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

пришлось передумать, потому как с тем параметром удобнее.

Может посоветуете, какую книгу почитать по макросам, чтобы научится их создавать, для себя?
 
Ответить
Сообщениепришлось передумать, потому как с тем параметром удобнее.

Может посоветуете, какую книгу почитать по макросам, чтобы научится их создавать, для себя?

Автор - wwizard
Дата добавления - 18.04.2012 в 20:51
Hugo Дата: Среда, 18.04.2012, 20:55 | Сообщение № 45
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Читайте форум smile
А вообще тут в библиотеке книг много. Но я ни одной не читал...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЧитайте форум smile
А вообще тут в библиотеке книг много. Но я ни одной не читал...

Автор - Hugo
Дата добавления - 18.04.2012 в 20:55
wwizard Дата: Среда, 18.04.2012, 21:06 | Сообщение № 46
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

спс
 
Ответить
Сообщениеспс

Автор - wwizard
Дата добавления - 18.04.2012 в 21:06
wwizard Дата: Четверг, 19.04.2012, 21:10 | Сообщение № 47
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Неа, не работает ссылка
Все что после: " | " он не видит. смотреть колонку [F]
 
Ответить
СообщениеНеа, не работает ссылка
Все что после: " | " он не видит. смотреть колонку [F]

Автор - wwizard
Дата добавления - 19.04.2012 в 21:10
Hugo Дата: Четверг, 19.04.2012, 21:34 | Сообщение № 48
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Неправильно применяете.
То, что после | - это исключения.
Пишите в ячейках
[vba]
Code
athlon|---
pentium|---
intel|video
core|---
[/vba]
Т.е. или атлон, или пентиум, или интел - но не тот, который интел-видео smile
Ну и в примере не последняя версия - эта делит только по запятым.

P.S. Даже так:
[vba]
Code
turon|---
athlon|---
amd|---
pentium|---
intel|video|graphics|gma|boost|hd|display
core|---
atom|---
p6|---
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНеправильно применяете.
То, что после | - это исключения.
Пишите в ячейках
[vba]
Code
athlon|---
pentium|---
intel|video
core|---
[/vba]
Т.е. или атлон, или пентиум, или интел - но не тот, который интел-видео smile
Ну и в примере не последняя версия - эта делит только по запятым.

P.S. Даже так:
[vba]
Code
turon|---
athlon|---
amd|---
pentium|---
intel|video|graphics|gma|boost|hd|display
core|---
atom|---
p6|---
[/vba]

Автор - Hugo
Дата добавления - 19.04.2012 в 21:34
wwizard Дата: Четверг, 19.04.2012, 21:44 | Сообщение № 49
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

а как искать и то и то
 
Ответить
Сообщениеа как искать и то и то

Автор - wwizard
Дата добавления - 19.04.2012 в 21:44
Hugo Дата: Четверг, 19.04.2012, 21:51 | Сообщение № 50
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Чтоб одновременно и Intel, и AMD выбирал?
Нужно менять код.
И впрямь нужно? На каких позициях?


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЧтоб одновременно и Intel, и AMD выбирал?
Нужно менять код.
И впрямь нужно? На каких позициях?

Автор - Hugo
Дата добавления - 19.04.2012 в 21:51
wwizard Дата: Четверг, 19.04.2012, 21:56 | Сообщение № 51
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

угу, нужно... (((
практически на всех


Сообщение отредактировал wwizard - Четверг, 19.04.2012, 21:56
 
Ответить
Сообщениеугу, нужно... (((
практически на всех

Автор - wwizard
Дата добавления - 19.04.2012 в 21:56
Hugo Дата: Четверг, 19.04.2012, 22:02 | Сообщение № 52
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Нет, особо переделывать не нужно - всего лишь поставить одну ' и переместить один блок (на последнем примере, но это не последняя версия):

[vba]
Code
Function izvlech(s$, sep_$, ParamArray par()) As String
       Dim a, p, i As Byte, flag As Boolean
       izvlech = ""
       For Each p In par
           If InStr(p, "|") Then
               For Each a In Split(s, ",")
                   If UCase(a) Like "*" & UCase(Split(p, "|")(0)) & "*" Then
                       flag = False
                       For i = 1 To UBound(Split(p, "|"))
                           If UCase(a) Like "*" & UCase(Split(p, "|")(i)) & "*" Then
                     flag = True
                           End If
                       Next
                       If Not flag Then izvlech = izvlech & sep_ & Trim(a)
                   End If
               Next
           End If

       Next

       If Len(izvlech) Then
           izvlech = Mid(izvlech, Len(sep_) + 1)
           'Exit Function
       End If

End Function
[/vba]

Правда это сразу тормозит работу - т.к. проверок теперь намного больше производится.

Хотя вот эта строка
'Exit Function
что она есть, что её нет, что закомментирована, что нет - всё едино уже не нужна smile

P.S. Мне кажется, что слишком часто ерунда получается:

Intel Atom N570 1.66GHz, Intel NM10, Intel Atom N570 1.66GHz
Intel Pentium Dual, Intel Pentium Dual, Core P6200 2.13GHz, Core P6200 2.13GHz
Intel Pentium P6200 2.13GHz, Intel Pentium P6200 2.13GHz, Intel Pentium P6200 2.13GHz
Похоже, что ещё словарём нужно повторы отсеивать...

Хотя тут вроде в кассу:
AMD Athlon II Dual-, Core P360 2.3GHz
Intel, Core i5-2450M 2.50GHz
но ведь и так понятно, что это за проц:
Core i7-2630QM 2.0GHz


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНет, особо переделывать не нужно - всего лишь поставить одну ' и переместить один блок (на последнем примере, но это не последняя версия):

[vba]
Code
Function izvlech(s$, sep_$, ParamArray par()) As String
       Dim a, p, i As Byte, flag As Boolean
       izvlech = ""
       For Each p In par
           If InStr(p, "|") Then
               For Each a In Split(s, ",")
                   If UCase(a) Like "*" & UCase(Split(p, "|")(0)) & "*" Then
                       flag = False
                       For i = 1 To UBound(Split(p, "|"))
                           If UCase(a) Like "*" & UCase(Split(p, "|")(i)) & "*" Then
                     flag = True
                           End If
                       Next
                       If Not flag Then izvlech = izvlech & sep_ & Trim(a)
                   End If
               Next
           End If

       Next

       If Len(izvlech) Then
           izvlech = Mid(izvlech, Len(sep_) + 1)
           'Exit Function
       End If

End Function
[/vba]

Правда это сразу тормозит работу - т.к. проверок теперь намного больше производится.

Хотя вот эта строка
'Exit Function
что она есть, что её нет, что закомментирована, что нет - всё едино уже не нужна smile

P.S. Мне кажется, что слишком часто ерунда получается:

Intel Atom N570 1.66GHz, Intel NM10, Intel Atom N570 1.66GHz
Intel Pentium Dual, Intel Pentium Dual, Core P6200 2.13GHz, Core P6200 2.13GHz
Intel Pentium P6200 2.13GHz, Intel Pentium P6200 2.13GHz, Intel Pentium P6200 2.13GHz
Похоже, что ещё словарём нужно повторы отсеивать...

Хотя тут вроде в кассу:
AMD Athlon II Dual-, Core P360 2.3GHz
Intel, Core i5-2450M 2.50GHz
но ведь и так понятно, что это за проц:
Core i7-2630QM 2.0GHz

Автор - Hugo
Дата добавления - 19.04.2012 в 22:02
Hugo Дата: Четверг, 19.04.2012, 23:17 | Сообщение № 53
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Посмотрите файл по ссылке - я там добавил ещё словарь.

[vba]
Code
Option Explicit

Function izvlech(s$, sep_s$, sep_$, ParamArray par()) As String
     Dim a, p, i As Byte, flag As Boolean, t$
     izvlech = ""
     With CreateObject("Scripting.Dictionary")
         .CompareMode = 1
         For Each p In par
             If InStr(p, "|") Then
                 For Each a In Split(s, sep_s)
                     If UCase(a) Like "*" & UCase(Split(p, "|")(0)) & "*" Then
                         flag = False
                         For i = 1 To UBound(Split(p, "|"))
                             If UCase(a) Like "*" & UCase(Split(p, "|")(i)) & "*" Then
                    flag = True
                             End If
                         Next
                         If Not flag Then
                             t = Trim(a)
                             If Not .exists(t) Then
                    .Item(t) = vbNullString
                    izvlech = izvlech & sep_ & t
                             End If
                         End If
                     End If
                 Next
             End If
         Next
     End With
     If Len(izvlech) Then
         izvlech = Mid(izvlech, Len(sep_) + 1)
         'Exit Function
     End If

End Function
[/vba]

Теперь вроде нормально с процессорами работает.
Можно конечно ещё переделать, чтоб все параметры в одной строке указывать - сперва то, по чему отбираем, потом то, что исключаем.
Но тоже есть вопросы - если отбираем например по трём словам, то как понять, какое исключение кому в паре? Или все ко всем?
Или если нужно исключение, то это слово ставить одно? Как сейчас... smile


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПосмотрите файл по ссылке - я там добавил ещё словарь.

[vba]
Code
Option Explicit

Function izvlech(s$, sep_s$, sep_$, ParamArray par()) As String
     Dim a, p, i As Byte, flag As Boolean, t$
     izvlech = ""
     With CreateObject("Scripting.Dictionary")
         .CompareMode = 1
         For Each p In par
             If InStr(p, "|") Then
                 For Each a In Split(s, sep_s)
                     If UCase(a) Like "*" & UCase(Split(p, "|")(0)) & "*" Then
                         flag = False
                         For i = 1 To UBound(Split(p, "|"))
                             If UCase(a) Like "*" & UCase(Split(p, "|")(i)) & "*" Then
                    flag = True
                             End If
                         Next
                         If Not flag Then
                             t = Trim(a)
                             If Not .exists(t) Then
                    .Item(t) = vbNullString
                    izvlech = izvlech & sep_ & t
                             End If
                         End If
                     End If
                 Next
             End If
         Next
     End With
     If Len(izvlech) Then
         izvlech = Mid(izvlech, Len(sep_) + 1)
         'Exit Function
     End If

End Function
[/vba]

Теперь вроде нормально с процессорами работает.
Можно конечно ещё переделать, чтоб все параметры в одной строке указывать - сперва то, по чему отбираем, потом то, что исключаем.
Но тоже есть вопросы - если отбираем например по трём словам, то как понять, какое исключение кому в паре? Или все ко всем?
Или если нужно исключение, то это слово ставить одно? Как сейчас... smile

Автор - Hugo
Дата добавления - 19.04.2012 в 23:17
wwizard Дата: Пятница, 20.04.2012, 00:21 | Сообщение № 54
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

а что значит словарь, и что значит не последняя версия, вроде лучше уже некуда
 
Ответить
Сообщениеа что значит словарь, и что значит не последняя версия, вроде лучше уже некуда

Автор - wwizard
Дата добавления - 20.04.2012 в 00:21
Hugo Дата: Пятница, 20.04.2012, 00:24 | Сообщение № 55
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Словарь - Scripting.Dictionary. С его помощью избавляюсь от повторов.
Ну а версия - то, что Вы показали, бьёт по запятым.
А то, что я тут выше показал/выложил, бьёт по указанному параметру.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеСловарь - Scripting.Dictionary. С его помощью избавляюсь от повторов.
Ну а версия - то, что Вы показали, бьёт по запятым.
А то, что я тут выше показал/выложил, бьёт по указанному параметру.

Автор - Hugo
Дата добавления - 20.04.2012 в 00:24
wwizard Дата: Суббота, 21.04.2012, 10:05 | Сообщение № 56
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Спс, все супр работает.
 
Ответить
СообщениеСпс, все супр работает.

Автор - wwizard
Дата добавления - 21.04.2012 в 10:05
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!