2016-06-17 3 views
1

Я ищу простой Excel VBA или формулу, которая может преобразовать целую строку в Excel из «числа, хранящегося в виде текста», в фактическое число для причин vlookup.Excel - Как программно преобразовать «число, сохраненное как текст» в число?

Может ли кто-нибудь указать мне правильное направление?

+0

Для преобразования на месте vba - единственный путь. С формулой вам нужно будет поместить формулу в другую ячейку. '= Значение (A1)' –

+0

Как правило, используйте INDEX (MATCH()) над VLOOKUP, поскольку он ведет себя гораздо более предсказуемым образом. – ti7

ответ

2

Лучший подход

Вы должны использовать INDEX(MATCH) вместо VLOOKUP, потому что VLOOKUP ведет себя непредсказуемым образом, что вызывает ошибки, такие, как тот, который вы, вероятно, испытывающего.

INDEX (<return array> , MATCH (<lookup value> , <lookup array> , 0)) 

INDEX MATCH example

Использование 0 в качестве последнего аргумента MATCH означает, что матч должен быть точным
Here некоторые более подробной информации о INDEX(MATCH) -ную

Дополнительная

Добавить +0, чтобы преобразовать значение в число.
Это может быть (опасно) продлено с IFERROR() превратить нечисловой текст в ноль:

=A2+0
=IFERROR(A2+0,0)

Для обратного, вы можете сцеплять пустую строку &"", чтобы заставить значение быть строка.

Примечания

Если 0 не используется в качестве последнего аргумента MATCH, он найдет все виды неожиданных «спичек» .. и хуже, он может найти другое значение, даже если точное совпадение присутствует.

Часто бывает полезно выполнить дополнительную работу, чтобы определить, есть ли дубликаты в столбце поиска MATCH, иначе будет найдено первое найденное значение (см. Пример).

Справка с MATCH исходит от here, в частности, логики соответствия 3-го аргумента.

+1

Я использовал логику Index Match до того, как просто так не стал. Плохо дайте i t назад! благодаря! Я искал способ конвертировать столбец на место, но я думаю, что это сработает. – DeFlanko

0

Я нашел это, но есть ли у кого-нибудь формула?

Sub macro() 
    Range("F:F").Select 'specify the range which suits your purpose 
    With Selection 
     Selection.NumberFormat = "General" 
     .Value = .Value 
    End With 
End Sub 

http://www.ozgrid.com/forum/showthread.php?t=64027

+0

Как сказал Скотт, формула может делать это только в других ячейках, поскольку она не может ссылаться на ячейку, в которой хранится формула. Ключевое слово: круговая ссылка. Но вы можете сделать это без VBA. Выберите столбец F, вызовите «Данные» - «Текст в столбцы», шаг за шагом мастера, на шаге 3 выберите формат данных «Общие» для всего столбца. –

0

Попробуйте это:

Sub ConvertToNumber() 
    Application.ScreenUpdating = False 
    Dim cl As Range 
    For Each cl In Selection.Cells 
     cl.Value = CInt(cl.Value) 
    Next cl 
    Application.ScreenUpdating = True 
End Sub 

Чтобы его использовать, просто выберите соответствующий блок ячеек с помощью мыши, а затем запустить макрос (Alt + F8, чтобы воспитывать диалоговое окно). Он будет проходить через каждую ячейку в выбранном диапазоне и преобразовывать любое значение, которое он удерживает, в число.

0

Я написал пользовательскую функцию vlookup, которая не заботится о форматах данных. Поместите это в модуль в VBA и использовать = VLOOK вместо = ВПР

Public Function VLook(sValue As String, rDest As Range, iColNo As Integer) 

' custom vlookup that's insensitive to data formats 

Dim iLastRow As Long 
Dim wsDest As Worksheet 

Set wsDest = Sheets(rDest.Parent.Name) 

iLastRow = wsDest.Range(wsDest.Cells(100000, rDest.Column).Address).End(xlUp).Row 

If iLastRow < rDest.Row + rDest.Rows.Count Then 
    For X = rDest.Column To rDest.Column + rDest.Columns.Count 
     If wsDest.Cells(100000, X).End(xlUp).Row > iLastRow Then iLastRow = wsDest.Cells(100000, X).End(xlUp).Row 
    Next X 
End If 

sValue = UCase(Application.Clean(Trim(sValue))) 

For X = rDest.Row To iLastRow 

    If UCase(Application.Clean(Trim(wsDest.Cells(X, rDest.Column)))) = sValue Then 
     VLookDM = wsDest.Cells(X, rDest.Column + iColNo - 1) 
     Exit For 
    End If 

Next X 

End Function 
0

Самый простой способ, которым я могу думать, используя встроенную функцию = VALUE (TEXT_TO_CONVERT_TO_STRING).

Смежные вопросы