2015-08-27 2 views
0

Я новичок в excel ... Я пытаюсь создать функцию, которая принимает текстовую строку в качестве параметра, обрезает ее (т. Е. Удаляет лишние пробелы в end и в начале), ищет первое вхождение строки в диапазоне (на другой электронной таблице) и возвращает фактическое содержимое этой ячейки. Я написал код ниже, но, тем не менее, я его настраиваю, это никогда возвращает что-нибудь !! Любая помощь будет высоко оценена!кодирование функции excel VBA для поиска строки в диапазоне

Примечание: на сайте я нашел несколько примеров «подлодки», которые делают подобные вещи, но когда я пытаюсь преобразовать их в «функции», они никогда не работают ...

Public Function Find_First2(FindString As String) As String 

    Dim Rng As Range 

    If Trim(FindString) <> "" Then 
     With Sheets("Sheet1").Range("A:A") 
      Set Rng = .Find(What:=FindString, _ 
          After:=.Cells(.Cells.Count), _ 
          LookIn:=xlValues, _ 
          LookAt:=xlPart, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlNext, _ 
          MatchCase:=False) 

      If Not Rng Is Nothing Then 
       Find_First2 = Rng.Value 
      Else 
       Find_First2 = "" 
      End If 
     End With 
    End If 

End Function 
+0

Я пробовал функцию, и это сработало, странный вопрос, может быть, но вы уверены, что у вас есть макросы? В противном случае вы могли бы предоставить дополнительную информацию о том, что может быть вашей текстовой строкой, и о том, какие ценности вы хотите сравнить и найти? – DragonSamu

ответ

0

Вы проверяете эта обрезка не очистит всю строку, но вы все еще используете ее как есть. Я изменил несколько вещей, но я не понимаю, что это должно делать. Вы ищете строку, и если вы ее найдете, вы вернете ту же строку? В любом случае, вот код. Я тестировал его, и он работает. Он будет выглядеть в колонке A листа Feuil1 прямо сейчас. Модифицируйте в соответствии с вашими потребностями.

Sub test() 
    MsgBox Find_First2("aa") 
End Sub 

Public Function Find_First2(FindString As String) As String 

    Dim Rng As Range 
    Dim TrimString As String 

    TrimString = Trim(FindString) 

    If TrimString <> "" Then 
     With Sheets("Feuil1").Range("A:A") 'This is what you need to modify 
      Set Rng = .Find(What:=TrimString, _ 
          After:=.Cells(.Cells.Count), _ 
          LookIn:=xlValues, _ 
          LookAt:=xlPart, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlNext, _ 
          MatchCase:=False) 

      If Not Rng Is Nothing Then 
       Find_First2 = Rng.Value 
       MsgBox ("Found at: " & Rng.Address) 
      Else 
       Find_First2 = "" 
      End If 
     End With 
    End If 

End Function 
+0

Добавьте точку остановки в код в начале функции, а когда вы ее вызываете, нажмите F8 для отладки по строкам. Скажите мне, какая часть «Если он войдет». ИЛИ добавить msgbox "Ничего не найдено!" до Find_First = "". Если вы получите сообщение, это означает, что он не нашел его, а не он не работает. –

+0

О, я думаю, вы пишете код в листе, а не в модуле. Может ли это так? Смотрите это: http://www.cpearson.com/excel/writingfunctionsinvba.aspx Когда я пишу этот точный код, который я разместил в модуле, Excel распознает функцию, когда я набираю ее в ячейке (аналогично другим функциям). Я пишу '= Find_First2 (« aa »)' в любой данной ячейке и всплывает сообщение msgbox, говорящее «Найдено по адресу: $ A $ 8», потому что там я написал 'aa'. Затем в ячейке написано 'aa', в котором я написал функцию. –

+0

Спасибо! Sub работает отлично! Однако, когда я пытаюсь использовать эту функцию в своей электронной таблице, она ничего не возвращает. Я, вероятно, месил что-то фундаментальное ... У меня есть список строк в столбце, а в следующем столбце я хотел бы активировать Find_Firt2 для каждой из этих строк (т. Е. Вернуть полный контент ячейки моей базы данных, содержащей первое появление каждой строки). Обычно у меня есть «aa» в первом столбце (например, в ячейке A5), и я пишу «= Find_First2 (A5)» в ячейке B5 ... он возвращает пробел – wwhoami