Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 3)

Автор: grbdv
Дата сообщения: 27.03.2012 19:43

Цитата:
На листе с данными. Как так? Выходки мелкософта или опять сам дурак?
Код:
? Range("A1", "C3").Address
$A$1:$C$3
? Range("A1", "C3").SpecialCells(xlCellTypeLastCell).Address
$P$1180
Офис 2003. В других версиях так же?

Вопрос снят. Хоть и остался открытым :(
Автор: AndVGri
Дата сообщения: 28.03.2012 03:00
grbdv

Цитата:
Вопрос снят. Хоть и остался открытым

А какой смысл вопроса? Что должен был вернуть, как хотелось бы, SpecialCells(xlCellTypeLastCell).Address?
Автор: grbdv
Дата сообщения: 28.03.2012 09:55
AndVGri

Цитата:
А какой смысл вопроса? Что должен был вернуть, как хотелось бы, SpecialCells(xlCellTypeLastCell).Address?

Ты действительно не понял? Ни в жисть не поверю :) А если так, то пора переквалифицироваться в управдомы. А ты тут, вроде, за давнего консультанта.

Ты по ссылке-то ходил? Я ж ее не для красоты привел, а в объяснение. Хэлп читал? Код в дебаггер вставлял? Походу, ты опять в троллинг скатываешься. Ну-ну :) А это ведь надо уметь делать...

************
Сразу замечу, что так, как написано у тебя в вопросе, SpecialCells не используется. Должно быть 'expression as Range' спереди (по хэлпу), определяющее диапазон применения метода.

Я ждал от него, что он вычислит последнюю ячейку в указанном диапазоне Range("A1", "C3"). Т.е. выдаст "$C$3".

В моем примере наглядно показано, что SpecialCells с данным модификаторм (с остальными - не знаю) игнорирует expression, применяя данный метод ко всему листу, вместо указанного диапазона. Другими словами, подменяет мое Range("A1", "C3") своим Cells.

[more=Help]

Цитата:
SpecialCells Method
See AlsoApplies ToExampleSpecificsReturns a Range object that represents all the cells that match the specified type and value. Range object.

expression.SpecialCells(Type, Value)
expression Required. An expression that returns one of the objects in the Applies To list.

Type Required XlCellType. The cells to include.

XlCellType can be one of these XlCellType constants.
xlCellTypeAllFormatConditions. Cells of any format
xlCellTypeAllValidation. Cells having validation criteria
xlCellTypeBlanks. Empty cells
xlCellTypeComments. Cells containing notes
xlCellTypeConstants. Cells containing constants
xlCellTypeFormulas. Cells containing formulas
xlCellTypeLastCell. The last cell in the used range
xlCellTypeSameFormatConditions. Cells having the same format
xlCellTypeSameValidation. Cells having the same validation criteria
xlCellTypeVisible. All visible cells

Value Optional Variant. If Type is either xlCellTypeConstants or xlCellTypeFormulas, this argument is used to determine which types of cells to include in the result. These values can be added together to return more than one type. The default is to select all constants or formulas, no matter what the type. Can be one of the following XlSpecialCellsValue constants:

XlSpecialCellsValue can be one of these XlSpecialCellsValue constants.
xlErrors
xlLogical
xlNumbers
xlTextValues


Example
This example selects the last cell in the used range of Sheet1.

Worksheets("Sheet1").Activate
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
[/more]
Автор: AndVGri
Дата сообщения: 28.03.2012 10:04
grbdv
И то читал, и срач твой тож... Ну даёт тебе SpecialCells(xlCellTypeLastCell) нижнюю правую ячейку от Range("A1", "C3"), так может и не обязан тебе давать. Вопрос то зачем задал?
Цитата:
Хоть и остался открытым
- риторический, что у Microsoft ошибка?
Или не смог сформулировать вопрос: как в общем виде для некоторого Range получить правую нижнюю ячейку?
Автор: grbdv
Дата сообщения: 28.03.2012 10:28
AndVGri

Цитата:
И то читал, и срач твой тож...

Прочти все с самого начала. Вставь код в дебаггер. Тогда не будешь писать бред:
Цитата:
Ну даёт тебе SpecialCells(xlCellTypeLastCell) нижнюю правую ячейку от Range("A1", "C3")
Именно, что не дает.


Цитата:
- риторический, что у Microsoft ошибка?
Читай ссылку. Может баг. А может и фича :) Факт то, что мелкософт в данном случае подменяет родительский объект. А умышленно или по недосмотру - хз. Если и умышленно, то непонятно зачем. Склоняюсь к версии Казанского, что этот метод именно эмуляция Ctrl+End.


Цитата:
Или не смог сформулировать вопрос: как в общем виде для некоторого Range получить правую нижнюю ячейку?
Эта проблема передо мной не стоит. С чего ты взял? Мои вопросы были:
- почему так?
- чяднт?
- как работает в других версиях?

Ты ни на один не ответил. ДА и не собирался. И сформулировать как раз _ты_ не можешь, - какого хрена ты возник со своим флудотроллингом?

Вот, объяснишь человеку (подразумевая в нем именно человека), а оказывается - тролль :) Жму кнопку.



Добавлено:

Цитата:
И то читал, и срач твой тож

Срач - что имелось ввиду? Ткни пальцем.
Автор: AndVGri
Дата сообщения: 29.03.2012 05:54
grbdv

Цитата:
Сразу замечу, что так, как написано у тебя в вопросе, SpecialCells не используется.

А зачем в контексте узкого вопроса по использованию конкретного варианта метода Range упоминать всё: Великий царь всея Руси, Белая, Малая и т. д.?

Цитата:
Вопрос снят. Хоть и остался открытым

Я мало что могу добавить к написанному на планете. Расжую только немного.
1. Определение в Help Excel.

Цитата:
xlCellTypeLastCell. The last cell in the used range

Буквально. Последняя ячейка в используемом Range, ключевые слова: ЯЧЕЙКА и В. Для рабочего листа в Excel - последняя ячейка определяется пересечением последнего столбца, содержащего хотя бы одну изменённую (Value, Formula, Interior, Comment и т. д.) ячейку, и последней строкой, содержащей хотя бы одну изменённую ячейку. Сама ячейка может быть и не изменённой.
2. Рассмотрим как у тебя Range("A1:C3"). Исходя из определения, данного выше для последней ячейки, у тебя ошибка в утверждении
Цитата:
Я ждал от него, что он вычислит последнюю ячейку в указанном диапазоне Range("A1", "C3"). Т.е. выдаст "$C$3"
, так как в этом диапазоне может же быть изменена только, допустим, ячейка B2, то есть, в этом случае метод SpecialCells(xlCellTypeLastCell).Address должен вернуть B$2$, хотя, если есть изменения в ячейке R8, выдаст R$8$. Пока претензии к работе метода кажутся обоснованы.
3. Но Range может быть не только прямоугольной областью. Его можно задать как Range("A7:C19,K1:R3"). Пусть изменена ячейка B9 и M2. Какую ячейку мы получим, используя метод? M$9$ - так? Но она лежит вне диапазона A7:C19,K1:R3, что нарушает определение The last cell in the used range. Что должен возвращать метод, чтобы не
Цитата:
подменять родительский объект?
Возможно поэтому, метод и возвращает последнюю ячейку для UsedRange. Остаётся удивляться, почему UsedRange определён для Worksheet и не создан для Range (были бы такие же проблемы в определении), а SpecialCells(xlCellTypeLastCell) член Range и не вынесен каким-нубудь методом LastCell для Worksheet. Но этот вопрос следует задавать на форумах разработчиков Office.
4.
Цитата:
как работает в других версиях?

2003, 2007, 2010 - поведение одинаковое.
5. Своим вопросом я всего лишь ожидал, что тебе нужна помощь в разрешение момента 2.
6.
Цитата:
Срач - что имелось ввиду? Ткни пальцем.

По правилам форума, на которые ты так любишь ссылаться.

Цитата:
0110 Запрещены сообщения, каким-то образом оскорбляющие национальные, личные, профессиональные чувства участников форума. К нарушителям данного правила будут применены самые строгие меры.


Цитата:
А если так, то пора переквалифицироваться в управдомы.


Цитата:
И сформулировать как раз _ты_ не можешь, - какого хрена ты возник со своим флудотроллингом?

Я с тобой на брудершафт пил? С чего ты ведёшь себя со мной панибратски?
Ты уже модератор форума, чтобы так писать?

Цитата:
Походу, ты опять в троллинг скатываешься. Ну-ну А это ведь надо уметь делать...

В тех же правилах сказано

Цитата:
1001 Участники форума заметившие нарушение правил могут обратиться к модератору форума по Внутренней почте. Сообщение в ответ нарушителю будет расцениваться как оффтопик.

Вот и обратись, а не оффтопь. Если любое замечание или не согласие с твоим мнением вызывает у тебя переход на личности, а не на обсуждение вопроса. Я конечно понимаю, что у тебя больное самолюбия и комплекс не полноценности, но не я тебя унизил, чтобы ты нарушал простые правила вежливости.
Автор: hitridjus
Дата сообщения: 29.03.2012 12:44
[more] Форумчане, помогите!

Я не силен в VBA и прошу помочь.
С помощью сторонних форумов у меня получилось написать макрос. С помощью которого происходит выборка данных из объединенных ячеек из книги находящейся на сетевом сервере. При необходимости могу скинуть все задействованные файлы.
Так вот суть проблемы, при закрытой книге в ячейке с формулой написана ошибка (#ЗНАЧ!). Как только открываю книгу, формула начинает работать.

Сама формула обращения к книге выглядит вот так:
=hitridjus(B4;'\\Serv02\отдел продаж\Координатор\Дебеторы\2012 год\[График платежей и дебиторская задолженность 2012 г.xls]дебиторы'!$B$2:$B$2500;'\\Serv02\отдел продаж\Координатор\Дебеторы\2012 год\[График платежей и дебиторская задолженность 2012 г.xls]дебиторы'!$K$2:$K$2500)

UDf выглядит вот так:
Function hitridjus(x As String, a As Range, b As Range)
hitridjus = CVErr(xlErrValue)
If (a.Rows.Count <> b.Rows.Count) Or (a.Columns.Count <> b.Columns.Count) Or (a.Columns.Count > 1) Then Exit Function
For i = 1 To a.Rows.Count - 1
If a.Cells(i, 1).Value = x Then
j = i + 1: f = False
Do Until f Or j > a.Rows.Count
If a.Cells(j, 1).Value = "Итого;" Then
f = True
hitridjus = b.Cells(j, 1).Value
Exit Function
End If
j = j + 1
Loop
hitridjus = CVErr(xlErrNA)
End If
Next
End Function

Пытался найти способ доработать UDF, чтобы работало с закрытой книгой. Но все усилия тщетны. На одном из форумов нашел подобное решение проблемы (с помощью Variant http://www.planetaexcel.ru/forum.php?thread_id=16634&forumaction=newreply&page_forum=lastpage&allnum_forum=5), но ни как не могу внедрить его себе. [/more]
Автор: psiho
Дата сообщения: 29.03.2012 16:47

Цитата:
Пытался найти способ доработать UDF, чтобы работало с закрытой книгой. Но все усилия тщетны. На одном из форумов нашел подобное решение проблемы (с помощью Variant http://www.planetaexcel.ru/forum.php?thread_id=16634&forumaction=newreply&page_forum=lastpage&allnum_forum=5), но ни как не могу внедрить его себе.

Там везде, где есть "Range" заменили на "Variant". Ты это в своём коде пробовал делать?
Автор: AndVGri
Дата сообщения: 30.03.2012 02:41
hitridjus
Если правильно понял логику функции, а понять сложно. Зачем, например, переменная f, если используется Exit Function? Опять же, а если число столбцов в диапазоне меньше числа строк - проверки нет.
[more=То так]

Код:
Function hitridjus(x As String, a As Variant, b As Variant) As Variant
Dim aData As Variant, bData As Variant, i As Long
Dim aRows As Long, bRows As Long, aColumns As Long, bColumns As Long
Dim f As Boolean, j As Long
If TypeName(a) = "Range" Then
aData = a.Value
ElseIf TypeName(a) = "Variant()" Then
aData = a
End If
If TypeName(b) = "Range" Then
bData = b.Value
ElseIf TypeName(b) = "Variant()" Then
bData = b
End If
If (TypeName(aData) <> "Variant()") Or (TypeName(bData) <> "Variant()") Then
hitridjus = "введены не диапазоны": Exit Function
End If
aRows = UBound(aData, 1): aColumns = UBound(aData, 2): bRows = UBound(bData, 1): bColumns = UBound(bData, 2)
If (aRows <> bRows) Or (aColumns <> bColumns) Then
hitridjus = "диапазоны a, b не равны": Exit Function
End If
For i = 1 To aRows - 1
If aData(i, 1) = x Then
j = i + 1: f = False
Do Until f Or j > aRows
If aData(j, 1) = "Итого;" Then
f = True: hitridjus = bData(j, 1)
Exit Function
End If
j = j + 1
Loop
hitridjus = CVErr(xlErrNA)
End If
Next i
End Function
Автор: hitridjus
Дата сообщения: 30.03.2012 10:44

Цитата:
Там везде, где есть "Range" заменили на "Variant". Ты это в своём коде пробовал делать?


Делал, нет ни каких изменений.


Добавлено:
AndVGri

Честно говоря, данный скрипт написал не я. Источник. На том форуме мне помогли решить проблему выборки данных из объединенных ячеек.

Поэтому я к сожалению не могу ответить на данный вопрос.
Автор: Stupido
Дата сообщения: 30.03.2012 15:09
ребята!

есть открытый файл, в нём несколько sheet'ов. Надо добавить новый sheet и сделать его активным... Как ?
Cпасибо!
Автор: psiho
Дата сообщения: 30.03.2012 16:37

Цитата:
есть открытый файл, в нём несколько sheet'ов. Надо добавить новый sheet и сделать его активным... Как ?


Код: ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
Автор: grbdv
Дата сообщения: 31.03.2012 11:40
AndVGri
Извини, дружище, что сразу не ответил - времени мало. И сейчас в обрез, поэтому вначале - по сути:
Цитата:
Я мало что могу добавить к написанному на планете. Расжую только немного. ...
РаЗжевывать будут тебе дети сухари в старости. И я - сейчас :)

Метод 'SpecialCells' применяется к диапазону 'Range', задаваемому 'expression' (хэлп). С чего же он вылазит за его пределы?! Вот мужики были бы рады, если бы 'Find' или, тем паче, 'Replace' начали бы шарашить за пределами своих 'expression':) Да и все что угодно, применяемое к диапазону.

Так что, милый друг, все твои рассуждения "о природе последних ячеек" на листе (в контексте ответа на мой вопрос) могут быть интересны лишь в случае признания легитимности такого поведения. А ты признаешь его таковым?

Поэтому, принимаем де факто такое блядское (по-другому не скажешь, сорри) поведение этого метода - игнорирование указанного дипазона и самовольную подмену его листом - и просто имеем его ввиду и используем обходные пути, т.к. изменить SQ мы не в состоянии. Я правильный сделал вывод? Именно поэтому вопрос считается (мной) снятым. О чем еще тереть?

И именно поэтому же вопрос о таком поведении и остается открытым (проблемы-то и нюансы в использовании метода остались), а не вопрос - как мне найти ту или иную специфическую ячейку :)

Касательно всего остального... Все ведь на этой одной странице. Перечти. Я тебя обвинил (более чем мотивированно) в троллинге. Тем не менее, заново и повтороно (это разве не лояльность с моей стороны?) вежливо раЗжевал суть.

Ты же следующим постом первым делом обвинил меня в сраче где-то (повисло в вохдухе). Тем более шутку, цитату из классики (управдом) приведенную сразу после комплимента ("не понял? Ни в жисть не поверю") во фразе, засыпанной смайлами, принять за оскорбление, панибратство и что там еще? Чего же ты теперь от меня хочешь? Какой вежливости? Чему удивляешься? Радуйся, что я еще терплю и речь стараюсь вести лишь о сути вопроса.

Вот список твоих эпитетов в ответ на мой "троллинг" и "управдома". Пришлось [more=в море засунуть :)]
И то читал, и срач твой тож
Вопрос то зачем задал?
не смог сформулировать вопрос
Великий царь всея Руси, Белая, Малая
Расжую только
этот вопрос следует задавать
на брудершафт пил?
ведёшь себя панибратски
Ты уже модератор форума, чтобы так писать?
вызывает переход на личности, а не на обсуждение
не оффтопь
не я тебя унизил
нарушал простые правила вежливости[/more]

Мне бы растоптать тебя после всего этого... Но я изначально к тебе и твоей квалификации уважительно относился. Поэтому делаю скидку на весну и соблазн протроллить ньюба на формулировочках, уйдя от сути. Ты, видимо, не сориентировался в мизансценах.
Автор: grbdv
Дата сообщения: 01.04.2012 12:42
king_stiven
Цитата:
Excel 2003
Делаю новую кнопку в панели, но хочу чтоб она была только в данной книге, а не во всех других книгах, то есть как сделать, чтоб изменения, настройки в данной книге не отражались в других книгах?

Цитата:
king_stiven
Это в VBA-тему. Создать пользовательскую панель. Кнопку(и) поместить на нее. Код "Application.CommandBars("UserTools").Visible = True ' или False" поместить в события, соответственно, открытия-закрытия книги (Workbook_Open, Workbook_BeforeClose).

Цитата:
grbdv
То есть нет простого решения что нибудь в настройках пощёлкать? Кнопка то создаётся, вопрос в том, чтоб только в данной конкретной книге эти кнопки были а не во всех.

Надо в точности выполнить то, что описано выше. Вот готовый код:

Код: Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("UserTools").Visible = False
End Sub
Private Sub Workbook_Open()
Application.CommandBars("UserTools").Visible = True
End Sub
Автор: king_stiven
Дата сообщения: 01.04.2012 19:25
Alt+F11
вставил в окно

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Настраиваемая 1").Visible = False
End Sub
Private Sub Workbook_Open()
Application.CommandBars("Настраиваемая 1").Visible = True
End Sub

Дальше что нажимать, не соображу.
Автор: ramblinman
Дата сообщения: 01.04.2012 21:05
Добрый вечер
Помогите пожалуйста сделать следующую вещь:

необходимо в некой заданной области на диске во всех директориях, содержащих в названии значение ячейки А:1 найти текстовый файл с расширением ".cue" и в нем найти и заменить строку начинающуюся на "REM GENRE" на строку "REM GENRE + значение ячейки В:1" Данную операцию необходимо проделать для всех не пустых ячеек столбца А
Автор: grbdv
Дата сообщения: 02.04.2012 01:13
king_stiven, сохранить. Закрыть книгу. Открыть книгу.
Убедиться, что панель появляется при открытии _данной_ книги и исчезает при ее закрытии. Если заработает, то потом доделаем, чтобы она пряталась при переключении на другую книгу, если открыто несколько.
Автор: king_stiven
Дата сообщения: 02.04.2012 14:25
grbdv
Не проходит, всё меняется одинаково в любой книге.

Добавлено:
При закрытии книги панель остаётся
Автор: grbdv
Дата сообщения: 02.04.2012 14:45
king_stiven
Цитата:
Не проходит, всё меняется одинаково в любой книге.

Задача минимум была: показать "UserTools" при открытии книги, и спрятать ее при закрытии. Это решается кодом выше. Надо чтобы "UserTools" уже существовала (хотя бы пустая).

Надо:
1. Создать панель "UserTools"
2. Создать новую книгу.
3. Поместить в нее код
4. Сохранить.

Что не получается? На каком этапе? Что "не проходит"? Что "все меняется"? Причем тут "любые книги"? Я не понял ничего... УМВР


Добавлено:
king_stiven
http://rghost.net/private/37367776/dc21a48beae25d62b2e534e10818771b
В данном варианте панель "UserTools" будет отображаться только в данной книге. Если панели с таким именем нет, то она будет создана автоматически.
Автор: king_stiven
Дата сообщения: 02.04.2012 18:21
Делать вышеописанное не помогло. То есть панель появляется при открытии любой книги и не исчезает при закрытии _данной_ книги.
А твой файл работает нормально.
http://rghost.net/private/37367776/dc21a48beae25d62b2e534e10818771b
Спасибо.
Автор: grbdv
Дата сообщения: 02.04.2012 18:39
king_stiven
Цитата:
Делать вышеописанное не помогло. То есть панель появляется при открытии любой книги и не исчезает при закрытии _данной_ книги.
УМВР :)

Цитата:
А твой файл работает нормально. Спасибо.
Вот и слава Богу. На здоровье. Имей ввиду только, что автоматически создается лишь пустая панель. Без инструментов. Т.е., если ты ее удалишь через настройки, то и кнопки тоже пропадут. Панель-то восстановится, но пустая.

Если концепция понятна, то на основе этого шаблона можно и дальше изгаляться. К примеру, панель может появляется только если активны опеределенные диапазоны ячеек, менять свой инструментарий по их контексту, плавать по экрану вслед за выделением etc.
Автор: Crazyblind
Дата сообщения: 07.04.2012 15:50
В общем такое дело. Компания занимается доставкой грузов. С утра водителям выдают список адресов, на которые надо заезжать. Ну и некоторое время водитель сидит и думает как ему лучше проехаться по этим адресам, какой из маршрутов будет самым оптимальным. Водитель, естесственно, не всегда принимает правильное решение, да и тратит время на обдумывание. Хочется сформировать эту таблицу адресов в минимальном по километражу порядке. Пишу в ВБА, потому что таблица изначально в Экселе, да и мне самому ВБА ближе, но если у кого есть какие идеи - приму любые предложения. Сейчас я вижу это только как найти код ХОРОШЕЙ карты, где расстояние от адреса до адреса считается по дорогам, а не напрямую, ну и просто необходимо как-то связываться с ней и методом пузырька переставлять адреса, пока не будет найден меньший путь по километражу в сумме всех адресов, вопрос только есть ли такие карты с кодом, ну или вообще у кого какие идеи?

Заранее всем благодарен.

P.S.: город Пермь.
Автор: grbdv
Дата сообщения: 07.04.2012 16:36
Если предположить, что есть карта с километражом реальным, а не напрямую, то:

1. Сделать в лоб (пузырьком :) по первой, имеющейся в распоряжении, карте.
2. Требовать с водилы отчет - почему ему не понравился формальный маршрут с его видением порядка объезда точек и указанием причин.
3. Если п.2 формализуется - формализовать в код.
4. Формализовать пробки.

После реализации п.4 придет понимание того, что надо было остановиться на п.1 исключительно в качестве рекомендации водиле :)
Автор: Crazyblind
Дата сообщения: 07.04.2012 16:51
На пробки наплевать, это не такая уж и проблема для нашего города, они бывают в основном в центре, а заказы по всему городу (тех, кто пытается объехать пробку и создает еще одну тоже хватает). Еще есть идея просто обработки картинки(карты) по цвету дорог, например, пока еще думаю над этим.

То есть пока что я пытаюсь выполнить только 1ый пункт этого списка, если это уж будет настолько неэффективно, то фиг с ним.
Автор: psiho
Дата сообщения: 07.04.2012 19:22

Цитата:
у кого какие идеи?

А с гуглом или яндексом сделать взаимодействие в VBA не пробовали?
Автор: andrewkard1980
Дата сообщения: 08.04.2012 10:44
Crazyblind
Я вижу так, вставляете WebBrowser в лист Excel, размещаете карту Google:

Код:
Public Sub GeoMaps()
Лист3.WebBrowser1.Navigate ("http://maps.google.com/?ie=UTF8&ll=58.0050,56.1456")
End Sub
Автор: grbdv
Дата сообщения: 08.04.2012 13:08
andrewkard1980
Цитата:
Ссылку на слове оптимальный ставил не я.

Это старая фича руборда. Есть еще несколько таких слов. Microsoft, к примеру. А у кого-то из дедов они в подписи зажиты :) Забыл, у кого... сорри.

Добавлено:
Упс... Значит не Microsoft... Сервер?

Добавлено:
Хе-хе... В начале предложения скрипт его не видит :) Сорри за оффтоп.
Автор: 7615790
Дата сообщения: 11.04.2012 11:50
Приветствую!
Опишу задачу. Есть колонка цифр (телефонных номеров) на "Листе1". Есть "Лист2" на котором навалена информация в хаотическом порядке но в которой встречаются цифры (номера телефонов) из первой колонки. Задача в следующем. Берем данные из "Листа1" ячейка А1 и ищем это значение на Листе2.
Если находим, то выделяем цветом (зеленым) ячейку где содержится хотя бы частичное совпадение с данными из Листа1. и переходим к следующему значению из "Листа1" ячейка А2
По сути дела эта процедура аналогична команде Ctrl+h. Т.е найденные данные менять или удалять не нужно. Нужно что бы просто они подсветились цветом.
По своему я эту задачу решил, но данные нужно вводить вручную, а там их тысячи. Во кусок кода, который по сути дела повторяется, только уже с новым данными.

Cells.Replace What:="№ телефона из листа1 ячейка А1", Replacement:="№ телефона из листа1 ячейка А1", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True

и так далее. Т.е макрос состоит из таких блоков, количество которых столько же, столько и телефонов из Листа 1
"Подсвечивание " делаю вручную вызвав команду Ctrl+h в поле "заменить на" заполняют вкладку "Формат" нужным мне цветом заливки, или цветом текста.
Я думаю понятно, что я не специалист в VBA, но для личного пользования особой скорости мне не нужно. Нужно только "автоматизировать" процесс. Что бы данные в строку
Cells.Replace What:="№ телефона из листа1 ячейка А1", Replacement:="№ телефона из листа1 ячейка А1"
подставлялись автоматически из "листа1 ячейка А1" дальше "листа1 ячейка А2" и так до конца списка.

Вижу два варианта. Это организовать цикл, и подставить в поле поиска данные из массива, но на это уже меня не хватает. Прошу совета.
Автор: KF121
Дата сообщения: 11.04.2012 12:48
7615790
Это можно сделать без всяких макросов и автозамен, с использованием условного форматирования и формулы.
и так: идем в условное форматирование и создаем правило на основе формулы, пишем туда
=VLOOKUP(&A1;Sheet2!A:E;1;FALSE)=&A1
или
=ВПР(&A1;Лист2!A:E;1;ЛОЖЬ)=&A1
настраиваем как ходит чтобы выглядела ячейка



и применяем правило для всего первого столбца, нажимаем ок



вуаля и все номера которые есть на листе 2 покрасились в зеленую заливку

Автор: 7615790
Дата сообщения: 11.04.2012 14:24
Идея интересная, но возникли загвоздки (установлен Excel2003). Пройду последовательно, поправьте где не так.
1.Захожу в "Формат" выбираю пункт "Условное форматирование". Выпадает картинка



2.Выбираю в поле условие "Формула" и ввожу =VLOOKUP(&A1;Sheet2!A:E;1;FALSE)=&A1
3.Задаю формат ячейки (см. рис)



4.Честно говоря вкладку там где мы применяем правило для всего первого столбца не нашел.
5.После запуска пишет что возникла ошибка и курсор застряет на =VLOOKUP(этом месте &A1;Sheet2!A:E;1;FALSE)=&A1

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.