<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6933</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6933&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS. Ускорение поиска совпадений в ячейках Excel».]]></description>
		<lastBuildDate>Thu, 29 Mar 2012 12:12:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58549#p58549</link>
			<description><![CDATA[<p>Обнаружил у себя ошибку - поиск .find(SearchName) ищет подстроку, а не конкретное значение из переменной, т.е. если я ищу значение &quot;Тест&quot;, то для него и &quot;Тест&quot;, и &quot;Тест1&quot; это совпадение. Добавил проверку на полное соответствие.<br /></p><div class="codebox"><pre><code>Sub DocsInJ_c (exJourObj, JWS)                       &#039;&#039;============================== exJourObj - объект Excel, JWS - страница
    set A1 = exJourObj.range(&quot;A1&quot;).EntireColumn
    ArRows = A1.rows.count
    for o1 = 1 to ArRows-1
    if jws.Cells.Item(o1 ,4).Value = &quot;&quot; then Exit For          &#039; количество заполненых строк на листе
    next
    i1 = 0  
    for o=0 to SelectedDocsInVed.count-1            &#039; перебор по документам из ведомости
    SearchName = SelectedDocsInVed.item(o)    
    set RangeS = JWS.range(&quot;D1:D&quot;&amp; o1)
    set SearchObj = RangeS.find(SearchName)
    If Not SearchObj Is Nothing Then
       strFirstAddres = SearchObj.AddresLocal (false, false)
    End If
    Do Until (SearchObj Is Nothing)
       set SearchObj = RangeS.findNext(SearchObj)
       strHolder = SearchObj.AddresLocal(false, false)
       If SearchObj = SearchName then            &#039; добавил проверку
       i = SearchObj.row
       SDocsInJournal.add i1, SearchName
       i1 = i1 + 1
       Perebor1 SearchName, JWS, i
       End If
       If strHolder = strFirstAddres Then
          Exit Do
       End If
    Loop
    Next
End Sub</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (KlimTV)]]></author>
			<pubDate>Thu, 29 Mar 2012 12:12:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58549#p58549</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58101#p58101</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Должно быть, какой-нибудь MSScript Control используется в ней?!</p></blockquote></div><p>Вполне возможно. Это надо узнавать у разработчиков.</p><p>Скрипт поправил, работает значительно быстрее.</p><div class="codebox"><pre><code>Sub DocsInJ_c (exJourObj, JWS)                       &#039;&#039;============================== exJourObj - объект Excel, JWS - страница
    set A1 = exJourObj.range(&quot;A1&quot;).EntireColumn
    ArRows = A1.rows.count
    for o1 = 1 to ArRows-1
    if jws.Cells.Item(o1 ,4).Value = &quot;&quot; then Exit For          &#039; количество заполненых строк на листе
    next
    i1 = 0  
    for o=0 to SelectedDocsInVed.count-1            &#039; перебор по документам из ведомости
    SearchName = SelectedDocsInVed.item(o)    
    set RangeS = JWS.range(&quot;D1:D&quot;&amp; o1)
    set SearchObj = RangeS.find(SearchName)
    If Not SearchObj Is Nothing Then
       strFirstAddres = SearchObj.AddresLocal (false, false)
    End If
    Do Until (SearchObj Is Nothing)
       set SearchObj = RangeS.findNext(SearchObj)
       strHolder = SearchObj.AddresLocal(false, false)
       i = SearchObj.row
       SDocsInJournal.add i1, SearchName
       i1 = i1 + 1
       Perebor1 SearchName, JWS, i
       If strHolder = strFirstAddres Then
          Exit Do
       End If
    Loop
    Next
End Sub</code></pre></div><p>Спасибо за подсказки.</p>]]></description>
			<author><![CDATA[null@example.com (KlimTV)]]></author>
			<pubDate>Tue, 20 Mar 2012 10:28:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58101#p58101</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58069#p58069</link>
			<description><![CDATA[<div class="quotebox"><cite>KlimTV пишет:</cite><blockquote><p>Разве скрипт не воспринимает двоеточие как начало новой строки ?</p></blockquote></div><p>Потому и был задан вопрос:<br /></p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>И хотелось бы уточнить, Вы пишете в среде WSH или VBA ?</p></blockquote></div><div class="quotebox"><cite>KlimTV пишет:</cite><blockquote><p>Не могу сказать точно, не знаю - среда встроена в приложение (электронный архив). Но полагаю не VBA, т.к. синтаксис не совпадает полностью, например оператор like просто не воспринимается системой smile</p></blockquote></div><p>Должно быть, какой-нибудь MSScript Control используется в ней?!</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 19 Mar 2012 15:19:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58069#p58069</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58048#p58048</link>
			<description><![CDATA[<p>Товарищу Евген&#039;y <br /></p><div class="quotebox"><blockquote><p>Cells.Find(What:=&quot; &amp; txtValue &amp;&quot;, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False , SearchFormat:=False).Activate</p></blockquote></div><p>Разве скрипт не воспринимает двоеточие как начало новой строки ? Или есть какие-то хитрости о которых я не в курсе?</p><p>Товарищу Xameleon&#039;y <br /></p><div class="quotebox"><blockquote><p>Возможно я не совсем правильно понял Вашу задачу. Метод Find по каким то причинам не подходит ? Он возвращает Range ячеек, содержащик искомое значение, на сколько я помню.</p></blockquote></div><p>К сожалению в моем справочном пособии (для справки использую пособие от Штайнера Г.) про метод Find ничего не написано, поэтому пытался найти нужную ячейку перебором. Задача такова - необходимо проверить, есть ли в 4-ой колонке искомое значение и в зависимости от да/нет действовать дальше. Если знаете хорошее справочное пособие по скрипту и Excel, не могли бы поделиться названием в ПМ.</p><div class="quotebox"><blockquote><p>И хотелось бы уточнить, Вы пишете в среде WSH или VBA ?</p></blockquote></div><p>Не могу сказать точно, не знаю - среда встроена в приложение (электронный архив). Но полагаю не VBA, т.к. синтаксис не совпадает полностью, например оператор like просто не воспринимается системой <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Товарищу Dmitrii&#039;y <br /></p><div class="quotebox"><blockquote><p>Кроме того, с помощью метода SpecialCells объекта Range можно существенно уменьшить область для поиска.</p></blockquote></div><p>Попробую сначала Find освоить. Как с ним разберусь попробую и SpecialCells.</p><br /><p>Всем спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (KlimTV)]]></author>
			<pubDate>Mon, 19 Mar 2012 10:22:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58048#p58048</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57856#p57856</link>
			<description><![CDATA[<p>Кроме того, с помощью метода <strong><span style="color: blue">SpecialCells</span></strong> объекта <span style="color: blue">Range</span> можно существенно уменьшить область для поиска.</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Thu, 15 Mar 2012 03:07:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57856#p57856</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57825#p57825</link>
			<description><![CDATA[<p>Возможно я не совсем правильно понял Вашу задачу. Метод Find по каким то причинам не подходит ? Он возвращает Range ячеек, содержащик искомое значение, на сколько я помню.</p><div class="codebox"><pre><code>
Set Range = Cells.Find(&quot;search string&quot;)</code></pre></div><p>или</p><div class="codebox"><pre><code>
Set Range = ActiveSheet.Cells.Find(&quot;search string&quot;)</code></pre></div><p>И хотелось бы уточнить, Вы пишете в среде WSH или VBA ?</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 14 Mar 2012 12:09:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57825#p57825</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57824#p57824</link>
			<description><![CDATA[<div class="codebox"><pre><code>Cells.Find(What:=&quot; &amp; txtValue &amp;&quot;, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False , SearchFormat:=False).Activate</code></pre></div><p>Не ?</p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Wed, 14 Mar 2012 12:08:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57824#p57824</guid>
		</item>
		<item>
			<title><![CDATA[VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57819#p57819</link>
			<description><![CDATA[<p>Здравствуйте.<br />Есть такая проблема - необходимо проверить, есть ли искомое значение на активном листе Excel. Реализовал следующим способом, ниже код метода<br /></p><div class="codebox"><pre><code>Sub DocsInJ_c (exJourObj, JWS)                       &#039;&#039;============================== exJourObj - объект Excel, JWS - страница
    set A1 = exJourObj.range(&quot;A1&quot;).EntireColumn
    ArRows = A1.rows.count
    for o1 = 1 to ArRows-1
    if jws.Cells.Item(o1 ,4).Value = &quot;&quot; then Exit For          &#039; количество заполненых строк на листе
    next
    i1 = 0  
    for o=0 to SelectedDocsInVed.count-1            &#039; перебор по документам из ведомости
    SearchName = SelectedDocsInVed.item(o)    &#039; 
    for i=1 to o1                                                &#039;  перебор по документам из журнала
    if SearchName = JWS.Cells.Item(i ,4).Value then
    SDocsInJournal.add i1, SearchName         &#039; добавить в список дублируемых
    i1 = i1 + 1
    end if
    Next
    Next
End Sub</code></pre></div><p>Работает, но есть одна загвоздка. Если просто открыть лист и с помощью ctrl+f искать требуемое значение, то при переборе журнала с 5-10 тысячами записей продуктивней оказывается ручной труд. Есть ли возможность искать нужное значение не перебором всех ячеек, а методом, аналогичным поиску Excel ?</p>]]></description>
			<author><![CDATA[null@example.com (KlimTV)]]></author>
			<pubDate>Wed, 14 Mar 2012 09:08:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57819#p57819</guid>
		</item>
	</channel>
</rss>
