Название в первом списке может быть сокращено, во второй же оно написано полностью. Я через Find ищу каждое слово во втором списке и в соседний столбец вывожу полное название. У меня почему-то как-то одни и те же строчки то обрабатываются, то выдают ошибки. Для примера можно запустить Макросс1() (он выдаст ошибку на третьей строке), а потом запустить Макросс2() — он обработает третью строку и запнется на седьмой) |
|
*Первая строчка не вставилась* «Добрый день, помогите пожалуйста решить задачку: |
|
ber$erk Пользователь Сообщений: 2735 |
Не верно расположен блок обработки ошибок: Sub Макросс1() rr = Sheets(«Контакты»).Columns(«D:D»).Find(What:=iPersona).Row Next Errr: ‘обработка ошибки Учимся сами и помогаем другим… |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
ber$erk, Ваш вариант дальше второй строки не идёт |
А как же быть? В таком случае при первой ошибуке он выходит из цикла и получается, что обработались только значения до первой попавшейся ошибки, а потом выход из цикла и конец. Весь оставшийся список не обработался. |
|
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Другой_, попробуйте искать частичное совпадение — параметр lookAt:=xlPart |
ber$erk Пользователь Сообщений: 2735 |
{quote}{login=Юрий М}{date=27.07.2012 11:39}{thema=}{post}ber$erk, Ваш вариант дальше второй строки не идёт :-){/post}{/quote} Sub Макросс1() On Error Resume Next Set searchCell = Sheets(«Контакты»).Columns(«D:D»).Find(What:=iPersona) End Sub Учимся сами и помогаем другим… |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Попробуйте такой вариант: |
ber$erk Пользователь Сообщений: 2735 |
поторопился: Учимся сами и помогаем другим… |
Спасибо) А можно ещё узнать, как я могу узнать номер строки в которой нашелся результат поиска? Например, если, я захочу взять результат из соседнего столбца от найденного значения. |
|
*ага, понял про rr = searchCell.Row |
|
А всё-таки, почему нельзя блок обработки ошибки внутрь вставлять, что таоке присходило, что ошибка вылезала? |
|
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Мой вариант не устраивает? И никаких ошибок, требующих дальнейшей обработки |
Юрий, я пробовал, у меня то же самое, ошибка вылезает. Sub Макросс1() For Each cell In Selection On Error GoTo Errr Errr: ‘обработка ошибки Next End Sub |
|
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
{quote}{login=Другой_}{date=27.07.2012 12:49}{thema=}{post}Юрий, я пробовал, у меня то же самое, ошибка вылезает.{/post}{/quote}У меня никаких ошибок не возникает. См. файл. |
Юрий, вашим вариантом у меня никаких ошибок не возникает. Скорее всего я им воспользуюсь, он очень лаконичный. Но всё-таки хотелось бы мою ошибку узнать, что бы не повторять в будущем. Что такое происходит, что вылезает ошибка? |
|
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
rr = searchCell.Row |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
{quote}{login=Другой_}{date=27.07.2012 01:51}{thema=}{post}Юрий, вашим вариантом у меня никаких ошибок не возникает. {/post}{/quote}А перед этим писали: «Юрий, я пробовал, у меня то же самое, ошибка вылезает.» Соберитесь с мыслями |
Другой_ Гость |
#19 27.07.2012 13:58:07 Юрий, спасибо. Последний вопросик) |
I’m looking for user ID #s from a list. However some users no longer exist. I’ve tried the test
method, the on error go to
method, and if err.number<> 0 then
method. I still receive the Run-time error '91': object variable or with block variable not set
. The number does not exist on the the list. Below is my code with a couple of fruitless attempts
On Error GoTo errorLn
If Err.Number <> 0 Then
GoTo errorLn
End If
Cells.Find(What:=uSSO, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Select
What other options are there? Or am I misplacing the lines of «error»? I have tried it before and after the «cells.Find…»
asked Aug 15, 2012 at 16:03
You will want to do something different than have message boxes, presumably.
Dim myCell As Range
Set myCell = Cells.Find(What:=uSSO, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If (Not myCell Is Nothing) Then
MsgBox "something!"
Else
MsgBox "nothing"
End If
answered Aug 15, 2012 at 16:12
enderlandenderland
13.7k17 gold badges100 silver badges152 bronze badges
I believe you’ll need to restructure it just a little bit. It is not the best practice to handle errors with On Error Resume Next
, but you could try this:
On Error Resume Next
Cells.Find(What:=uSSO, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Select
If Err.Number <> 0 Then
'''Do your error stuff'''
GoTo errorLn
Else
Err.Clear
End If
Does that work for your situation?
Source: http://www.mrexcel.com/forum/excel-questions/143988-check-if-value-exists-visual-basic-applications-array.html
answered Aug 15, 2012 at 16:08
2
Try this
Sub Sample1()
Dim oSht As Worksheet
Dim uSSO As String
Dim aCell As Range
On Error GoTo Whoa
'~~> Change this to the relevant sheet
Set oSht = Sheets("Sheet1")
'~~> Set User ID here
uSSO = "User ID"
Set aCell = oSht.Cells.Find(What:=uSSO, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'~~> Check if found or not
If Not aCell Is Nothing Then
MsgBox "Value Found in Cell " & aCell.Address
Else
MsgBox "Value Not found"
End If
Exit Sub
Whoa:
MsgBox Err.Description
End Sub
I also would recommend reading this link where I have covered .Find
and .FindNext
Topic: .Find and .FindNext In Excel VBA
Link: https://web.archive.org/web/20160316214709/https://siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/
Kolappan N
3,5012 gold badges35 silver badges41 bronze badges
answered Aug 15, 2012 at 16:09
Siddharth RoutSiddharth Rout
146k17 gold badges206 silver badges250 bronze badges
1
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2019 for Mac Excel 2016 Excel 2016 for Mac Excel 2013 Excel 2010 Excel 2007 More…Less
This topic provides help for the most common scenarios for the #VALUE! error in the FIND/FINDB and SEARCH/SEARCHB functions.
A few things to know about FIND and SEARCH functions
-
The FIND and SEARCH functions are very similar. They both work in the same way — locate a character or a text string in another text string. The difference between these two functions is that FIND is case-sensitive, and SEARCH is not case-sensitive. So if you don’t want to match case in a text string, use SEARCH.
-
If you want a function that returns the string based on the character number you specify, use the MID function along with FIND. You can find information and examples of using MID and FIND combinations in the FIND help topic.
-
The syntax of these functions is the same, find_text, within_text, [start_num]). In simple English, the syntax means What do you want to find?, Where do you want to find it?, What position do you want to start from?
Problem: the value in the find_text argument cannot be found in the within_text string
If the function cannot find the text to be found in the specified text string, it will throw a #VALUE! error.
For example, a function like:
-
=FIND(«gloves»,»Gloves (Youth)»,1)
Will throw the #VALUE! error, because there is no matching “gloves” in the string, but there is “Gloves”. Remember that FIND is case-sensitive, so make sure the value in find_text has an exact match in the string in the within_text argument.
However, this SEARCH function will return a value of 1, since it’s not case-sensitive:
-
=SEARCH(«gloves»,»Gloves (Youth)»,1)
Solution: Correct the syntax as necessary.
Problem: The start_num argument is set to zero (0)
The start_num argument is an optional argument, and if you omit it, the default value will be assumed to be 1. However, if the argument is present in the syntax and the value is set to 0, you will see the #VALUE! error.
Solution: Remove the start_num argument if it is not required, or set it to the correct appropriate value.
Problem: The start_num argument is greater than the within_text argument
For example, the function:
-
=FIND(“s”,”Functions and formulas”,25)
Looks for “s” in the “Functions and formulas” string (within_text) starting at the 25th character (start_num), but returns a #VALUE! error because there are only 22 characters in the string.
Tip: To find the total number of characters in a text string, use the LEN function
Solution: Correct the starting number as necessary.
Need more help?
You can always ask an expert in the Excel Tech Community or get support in the Answers community.
See Also
Correct a #VALUE! error
FIND/FINDB functions
SEARCH/SEARCHB FUNCTIONS
Overview of formulas in Excel
How to avoid broken formulas
Detect errors in formulas
All Excel functions (alphabetical)
All Excel functions (by category)
Need more help?
- Remove From My Forums
-
Question
-
I am writing a excel vba for some find and merge function, but the .Find method returns «Type mismatch» error. Parts of the code is below. Strangely when I tested it (immediate windows) using Range(«a:a»), it works.
…
…
Dim FAnumRow As Variant
Dim LAnumRow As Variant…..
Range(«3:3»).Insert
Range(«a3»).Select
LActNo = Range(«a4»).End(xlDown).Value
For Anum = 1 To LActNo
FAnumRow = Range(Cells(4, 1), Cells(ActiveSheet.Rows.Count, 1).End(xlUp)).Find(What:=Anum, _
After:=Range(«a3»), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False).Row
LAnumRow = Range(Cells(4, 1), Cells(ActiveSheet.Rows.Count, 1).End(xlUp)).Find(What:=Anum, _
After:=Range(«a3»), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row…………….
Can anybody advise me what is the problem and how to solve? Thanks a lot in advance!
<input id=»819209f8-1f84-4663-9f1d-f683cd21d7fd_attachments» type=»hidden» />
Answers
-
Pls check the following:
1.Ensure that data starts with A3.
2.The After Argument of first method is not required.Because if not specified the first cell of range is taken.For second Find method use the range reference returned by First Find.
3.Use some error tracking if the find method fails.
Pls try the following
Sub FindtheLoosds()
Dim FAnumRow As Long, AnumRow As Long, LActNo As Long
Dim FirstRange As Range, SecondRange As Range
Range(«3:3»).Insert
LActNo = Range(«a4»).End(xlDown).Value
For anum = 1 To LActNo
On Error Resume Next
Set FirstRange = Range(«a4»)
Set FirstRange = Range(«a4», Cells(ActiveSheet.Rows.Count, 1).End(xlUp)).Find(What:=anum, _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
On Error GoTo 0
FAnumRow = FirstRange.Row
On Error Resume Next
Set SecondRange = Range(«a4»)
Set SecondRange = Range(«a4», Cells(ActiveSheet.Rows.Count, 1).End(xlUp)).Find(What:=anum, _
after:=FirstRange, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
On Error GoTo 0
LAnumRow = SecondRange.Row
Next anumEnd Sub
-
Marked as answer by
Wednesday, October 5, 2011 10:04 AM
-
Marked as answer by
-
With VBA code you usally check for nothing to see if the find method actual returned state. Here are some of my pointers
1) Check for nothing
Set c = Columns(«A»).find(what:=»abc»,lookin:=xlvalues, lookat:=xlwhole)
if not c is nothing then
‘your code here.
end if
2) Don’t use «AFTER» unless you need to. the default will start at the 1st cell. Puting «A3» for after the code won’t check A3 until the end of the find. the find method when it gets to the last cell wraps back to the first cell.
If you really want to use AFTER then make the AFTER the last cell in the range.
jdweng
-
Marked as answer by
Calvin_Gao
Wednesday, October 5, 2011 10:04 AM
-
Marked as answer by
Выдает ошибку при обработки поиска ячейки |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |