2015-02-16 5 views
0

У меня есть столбец из примерно 450 000 9-значных чисел, которые используются для определения вывода другого столбца. Почему процесс распознает девятизначные числа, начинающиеся с номера 3, но не 0?Проблема с форматированием номера VBA Excel

Sub Anything() 

Dim rng As Range, cl As Range 

Set rng = Range("Y2:Y" & Range("Y" & Rows.Count).End(xlUp).Row) 

For Each cl In rng.Cells 

    Dim outCell1 As Range 
    Set outCell1 = cl.Offset(0, 54) 


    Select Case Trim(cl.Value) 

     Case "001019147" 
      outCell1.Value = "thing1" 

     Case "311019147" 
      outCell1.Value = "thing2" 

Все ячейки в столбце содержат 9-разрядные числа и хотя есть около 450 000 клеток в колонке только около 2000 обрабатываются. Любой вход?

+0

наверняка тип данных кастинг проблема. система может отличать ваш cl.value с числовым типом данных, отбрасывающим 00. В excel наверху, если вы поместите 'OPTION STRICT', он покажет вам, происходит ли это, выкинув ошибку. Каков тип данных? Всегда ли это число? если это так, убедитесь, что обе стороны являются числовыми, специально литая их как таковые. – xQbert

+0

Моя догадка заключается в том, что «001019147» - это число, отображаемое с ведущими нулями, поэтому cl.Value действительно 1019147. –

+0

Excel действительно любит автоматическое создание ячеек. Ведущие нули особенно проблематичны. Трудно сказать, не зная, как вы отформатировали эти ячейки. – JRQ

ответ

0

Рассмотрим:

Select Case уравновешивания (cl.Text)

1

Для вашего select case заявления, попробуйте использовать

Select Case Val(Trim(cl.Value)) 

    Case 1019147 
     outCell1.Value = "thing1" 

    Case 311019147 
     outCell1.Value = "thing2" 

Это позволит вам иметь значения и/или несколько значений ,
, например.

Case 1 to 22 
Case 1,2,3,57,999 
Case 1 to 8,300,400 to 499 
+0

Использование функции «Val» здесь. Это обходит ведущую нулевую проблему, вы даже можете сохранить сравнение как строки, и она по-прежнему работает. – JRQ

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