2016-10-03 3 views
1

Я работал в функции, которая дает мне столбец, в котором он находит одно значение. У меня возникли проблемы с его выполнением ... Но я сделал это!У метода поиска есть проблемы с небольшими столбцами ширины?

ОШИБКА, верьте или нет, заключалось в том, что метод Find имеет проблемы с поиском значений в ячейках, ширина которых слишком мала ... Может быть, это так глупо?

Это вызов ..

Private Sub CommandButton3_Click() 

Direccion = BuscarCol(2) 
MsgBox "the cell address is " & Direccion 

End Sub 

И это функция ...

Function BuscarCol(Fecha As Integer) As String 
Dim RangoFech As Range 
With Sheets("REGISTRO").Range("A1:IN1") 
Set RangoFech = .Find(What:=Fecha, LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False) 
    If Not RangoFech Is Nothing Then 
     BuscarCol = ConvertToLetter(RangoFech.Column) 

End If 
End With 
End Function 

О, и у меня есть еще один для преобразования чисел столбца с буквами, но это никогда не было проблема ..

Function ConvertToLetter(iCol As Integer) As String 
Dim iAlpha As Integer 
Dim iRemainder As Integer 
iAlpha = Int(iCol/27) 
iRemainder = iCol - (iAlpha * 26) 
If iAlpha > 0 Then 
    ConvertToLetter = Chr(iAlpha + 64) 
End If 
If iRemainder > 0 Then 
    ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64) 
End If 
End Function 

Итак ... вы можете мне сказать, правильно ли это? У метода поиска есть эта проблема?

+0

Обратите внимание, что функция 'ConvertToLetter' не работает для некоторых значений, например, попробуйте 53, 79, 80 ([см. Этот ответ] (http://stackoverflow.com/a/12797190/445425) для надежного решения) –

ответ

4

Если вы выберете «Искать»: «Значения» в поле «Найти», он будет находить только видимые значения. Если столбец скрыт, он не найдет его. Если столбец слишком узкий, чтобы отобразить значение, и вместо него отобразит ###, он не найдет его. Даже если вы отформатируете ячейку как ;;;, чтобы эффективно скрыть значение, она не найдет ее.

Если вы выберете Look in: Формулы, он найдет его во всех этих случаях.

Но если у вас есть формула, которая производит значение, и это значение не существует в тексте формулы, оно не найдет его. Так =200+22 находится в клетке, и вы ищете 222

  • В Values: только найти его, если он виден
  • В формулах: Не считаю

Это кажется странным дизайнерским решением , Моя теория заключается в том, что алгоритм использует свойство Range.Text. Это свойство возвращает то, что видно в ячейках, например ### для узких столбцов, а не .Value или .Value2.