Страницы: 1
RSS
Excel преобразует нумерацию №п.п. в десятичную дробь
 
Почему код ниже преобразует текстовое значение в числовое:
код ниже выводит Должен выводить
I
1
1,1
0,2
0,3
0,4
2
I
1
1.1
1.2
1.3
1.4
2
т.е. заменяет точку на запятую, причем принудительный перевод в текстовый режим не срабатывает, хоть сколько вложи cstr, как только VBA увидит, к примеру связку "1.1" он сразу в ячейке ее сделает как 1,1
Код
Sub Протянуть_нумерацию()
On Error Resume Next
Dim Ch, Lh, Nh, P
Dim CRed, CBlue, CDBlue, Cwhite
Ch = 0
Nh = 0
Lh = 0
P = 0
CRed = RGB(255, 200, 180)
CBlue = RGB(221, 235, 247)
CDBlue = RGB(184, 204, 228)
Cwhite = RGB(255, 255, 255)
For i = 15 To 20
Application.StatusBar = i
If Cells(i, "D").Interior.Color = CDBlue Then
Nh = Nh + 1
Ch = WorksheetFunction.Roman(Nh)
Cells(i, "D") = Ch
Else
If Cells(i, "D").Interior.Color = Cwhite Then
Lh = Lh + 1
Cells(i, "D") = Lh
Else
If Cells(i, "D").Interior.Color = CBlue Then

    If Cells(i, "D").Interior.Color <> Cells(i - 1, "D").Interior.Color Then _
    Cells(i, "D") = CStr(Cells(i - 1, "D")) & "." & CStr(Right(Cells(i - 1, "D"), 1)) Else
    Cells(i, "D") = CStr(Left(Cells(i - 1, "D"), Len(Cells(i - 1, "D")) - 3)) & "." & _
    CStr(Right(Cells(i - 1, "D"), 1) + 1)
End If
End If
End If
Next
Application.StatusBar = False
End Sub
 
Цитата
olege1983 написал:
Почему код ниже преобразует текстовое значение в числовое
Разбирается в этой теме, пункт 4.4
Владимир
 
Получилось так:
Код
Sub text()
    Dim str1
    str1 = "1" & "." & "1"
    'Сначала задаем текстовый формат
    Worksheets("Лист1").Range("A1").NumberFormat = "@"
    'Потом записываем занчение
    Worksheets("Лист1").Range("A1") = str1
End Sub
 
добавил пробел после точки. С виду работает, но как только доходит до трехзначных чисел происходит нечто странное, строки
If Cells(i, "D").Interior.Color <> Cells(i - 1, "D").Interior.Color Then _    Cells(i, "D") = CStr(Cells(i - 1, "D")) & "." & CStr(Right(Cells(i - 1, "D"), 1)) Else
   Cells(i, "D") = CStr(Left(Cells(i - 1, "D"), Len(Cells(i - 1, "D")) - 3)) & "." & _
   CStr(Right(Cells(i - 1, "D"), 1) + 1)
начинает работать неправильно, когда цвет ячеек не равен друг другу, но ексель думает что они равны и принимает значение False., таким образом вместо 100. 1 выводит .1
 
Цитата
olege1983 написал:
к примеру связку "1.1" он сразу в ячейке ее сделает как 1,1
Поставьте апостроф в начале данного «числа» ("'" & "1.1"), на пример:
Код
Option Explicit

Sub aaa()
    Dim a, b, i&
    
    a = Array("1.1", "0.2", "0.3", "0.4", "0.9", "1.44", "5.25")
    ReDim b(UBound(a), 0)
    
    For i = 0 To UBound(a)
        b(i, 0) = "'" & a(i)
    Next
    
    Range("A1").Resize(i, 1).Value = b
End Sub
Страницы: 1
Наверх