<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6933&amp;type=atom" />
	<updated>2012-03-29T12:12:08Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6933</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=58549#p58549" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[KlimTV]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27683</uri>
			</author>
			<updated>2012-03-29T12:12:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=58549#p58549</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=58101#p58101" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[KlimTV]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27683</uri>
			</author>
			<updated>2012-03-20T10:28:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=58101#p58101</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=58069#p58069" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-03-19T15:19:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=58069#p58069</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=58048#p58048" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[KlimTV]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27683</uri>
			</author>
			<updated>2012-03-19T10:22:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=58048#p58048</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57856#p57856" />
			<content type="html"><![CDATA[<p>Кроме того, с помощью метода <strong><span style="color: blue">SpecialCells</span></strong> объекта <span style="color: blue">Range</span> можно существенно уменьшить область для поиска.</p>]]></content>
			<author>
				<name><![CDATA[Dmitrii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=13351</uri>
			</author>
			<updated>2012-03-15T03:07:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57856#p57856</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57825#p57825" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2012-03-14T12:09:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57825#p57825</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57824#p57824" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Евген]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25253</uri>
			</author>
			<updated>2012-03-14T12:08:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57824#p57824</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS. Ускорение поиска совпадений в ячейках Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57819#p57819" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[KlimTV]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27683</uri>
			</author>
			<updated>2012-03-14T09:08:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57819#p57819</id>
		</entry>
</feed>
