Столкнулся с проблемой когда заполняешь массив числами рассчитанными на основе введенных данных в ТекстБоксе , а потом этот массив выводишь на рабочий лист с форматированием, то эти числа из массива имеют текстовый формат. Как сделать так, чтобы отформатированные числа из массива , выводились на лист в числовом формате , а не в текстовом?
Пример кода во вложении: Нужно запустить процедуру Test , ввести в текстбокс число 10 и нажать кнопку exit.
На картинке во втором столбце отображены числа из массива сформированного на основе данных из текстбокса (см. строка 10) . Эти данные перед выводом на лист были отформатированы , чтобы был формат 0,00 (см строку 20) И в итоге , во втором столбце получился текст в формате чисел с 2мя знаками после запятой, а не сами числа... А нужны именно числа.
Заранее спасибо!
[vba]
Код
Option Explicit
Private Sub CommandButton1_Click() Call sheetform Unload Me End Sub
Sub test() 'Заполняем массив случайными числами из текстбокса ReDim arrtest(1 To Val(Tb1.Text), 1 To 2)
For i = 1 To UBound(arrtest, 1) j = 1 arrtest(i, j) = i ' номер итерации 10 arrtest(i, j + 1) = Tb1.Value * 99 * Rnd ' случайное число полученное умножением числа введенного в текстбоксе на генератор Next i End Sub
' Выводим данные массива arrtest на новый лист после нажатия кнопки exit
Sub sheetform() Application.ScreenUpdating = False
'Создаем новый лист с помощью объектной переменной (в этом случае новый лист создается строго перед активным листом и нигде больше)
Dim SheetTest As Worksheet Dim Celltest As Range Dim currow As Integer ' переменная для счетчика строк
'вставляем названия ячеек на созданный лист ' Заголовки столбцов SheetTest.Cells(currow, 1) = "№ Периода" SheetTest.Cells(currow, 2) = "Тестовое случайное значение"
Call test ' вызываем процедуру заполнения массива arrtest случайными числами
' Заполняем лист данными из массива arrtest, куда мы предварительно внесли все расчетные значения ,ячейки таблицы For i = 1 To UBound(arrtest, 1) For j = 1 To UBound(arrtest, 2) SheetTest.Cells(currow + i, j) = arrtest(i, j) Next j Next i
20 ' Здесь форматируем второй столбец со случайными данными в формат чисел с двумя знаками после запятой. For Each Celltest In Range(Cells(currow + 1, UBound(arrtest, 2)), Cells(currow + 1 + UBound(arrtest, 1), UBound(arrtest, 2))) Celltest.Value = Format(Celltest.Value, "#,##0.00") ' форматируем ячейки в формат 0.00 Next
End Sub
[/vba]
Всем привет!
Столкнулся с проблемой когда заполняешь массив числами рассчитанными на основе введенных данных в ТекстБоксе , а потом этот массив выводишь на рабочий лист с форматированием, то эти числа из массива имеют текстовый формат. Как сделать так, чтобы отформатированные числа из массива , выводились на лист в числовом формате , а не в текстовом?
Пример кода во вложении: Нужно запустить процедуру Test , ввести в текстбокс число 10 и нажать кнопку exit.
На картинке во втором столбце отображены числа из массива сформированного на основе данных из текстбокса (см. строка 10) . Эти данные перед выводом на лист были отформатированы , чтобы был формат 0,00 (см строку 20) И в итоге , во втором столбце получился текст в формате чисел с 2мя знаками после запятой, а не сами числа... А нужны именно числа.
Заранее спасибо!
[vba]
Код
Option Explicit
Private Sub CommandButton1_Click() Call sheetform Unload Me End Sub
Sub test() 'Заполняем массив случайными числами из текстбокса ReDim arrtest(1 To Val(Tb1.Text), 1 To 2)
For i = 1 To UBound(arrtest, 1) j = 1 arrtest(i, j) = i ' номер итерации 10 arrtest(i, j + 1) = Tb1.Value * 99 * Rnd ' случайное число полученное умножением числа введенного в текстбоксе на генератор Next i End Sub
' Выводим данные массива arrtest на новый лист после нажатия кнопки exit
Sub sheetform() Application.ScreenUpdating = False
'Создаем новый лист с помощью объектной переменной (в этом случае новый лист создается строго перед активным листом и нигде больше)
Dim SheetTest As Worksheet Dim Celltest As Range Dim currow As Integer ' переменная для счетчика строк
'вставляем названия ячеек на созданный лист ' Заголовки столбцов SheetTest.Cells(currow, 1) = "№ Периода" SheetTest.Cells(currow, 2) = "Тестовое случайное значение"
Call test ' вызываем процедуру заполнения массива arrtest случайными числами
' Заполняем лист данными из массива arrtest, куда мы предварительно внесли все расчетные значения ,ячейки таблицы For i = 1 To UBound(arrtest, 1) For j = 1 To UBound(arrtest, 2) SheetTest.Cells(currow + i, j) = arrtest(i, j) Next j Next i
20 ' Здесь форматируем второй столбец со случайными данными в формат чисел с двумя знаками после запятой. For Each Celltest In Range(Cells(currow + 1, UBound(arrtest, 2)), Cells(currow + 1 + UBound(arrtest, 1), UBound(arrtest, 2))) Celltest.Value = Format(Celltest.Value, "#,##0.00") ' форматируем ячейки в формат 0.00 Next
Private Sub CommandButton1_Click() Call sheetform Unload Me End Sub
Sub test(ByRef arrtest#()) 'Заполняем массив случайными числами из текстбокса ReDim arrtest(1 To Val(Tb1.Text), 1 To 2)
For i = 1 To UBound(arrtest, 1) j = 1 arrtest(i, j) = i ' номер итерации arrtest(i, j + 1) = Round(Tb1.Value * 99 * Rnd, 2) ' случайное число полученное умножением числа введенного в текстбоксе на генератор Next i End Sub
' Выводим данные массива arrtest на новый лист после нажатия кнопки exit
Sub sheetform() Application.ScreenUpdating = False
'Создаем новый лист с помощью объектной переменной (в этом случае новый лист создается строго перед активным листом и нигде больше)
Dim SheetTest As Worksheet Dim Celltest As Range Dim currow As Integer ' переменная для счетчика строк Dim arrtest#() 'массива случайных чисел currow = 1
'вставляем названия ячеек на созданный лист ' Заголовки столбцов SheetTest.Cells(currow, 1) = "№ Периода" SheetTest.Cells(currow, 2) = "Тестовое случайное значение"
test arrtest ' вызываем процедуру заполнения массива arrtest случайными числами
' Заполняем лист данными из массива arrtest, куда мы предварительно внесли все расчетные значения ,ячейки таблицы With SheetTest.Cells(currow + 1, 1).Resize(UBound(arrtest, 1), UBound(arrtest, 2)) .Columns(2).NumberFormat = "#,##0.00" .Value = arrtest End With End Sub
[/vba]
[vba]
Код
Option Explicit
Private Sub CommandButton1_Click() Call sheetform Unload Me End Sub
Sub test(ByRef arrtest#()) 'Заполняем массив случайными числами из текстбокса ReDim arrtest(1 To Val(Tb1.Text), 1 To 2)
For i = 1 To UBound(arrtest, 1) j = 1 arrtest(i, j) = i ' номер итерации arrtest(i, j + 1) = Round(Tb1.Value * 99 * Rnd, 2) ' случайное число полученное умножением числа введенного в текстбоксе на генератор Next i End Sub
' Выводим данные массива arrtest на новый лист после нажатия кнопки exit
Sub sheetform() Application.ScreenUpdating = False
'Создаем новый лист с помощью объектной переменной (в этом случае новый лист создается строго перед активным листом и нигде больше)
Dim SheetTest As Worksheet Dim Celltest As Range Dim currow As Integer ' переменная для счетчика строк Dim arrtest#() 'массива случайных чисел currow = 1
'вставляем названия ячеек на созданный лист ' Заголовки столбцов SheetTest.Cells(currow, 1) = "№ Периода" SheetTest.Cells(currow, 2) = "Тестовое случайное значение"
test arrtest ' вызываем процедуру заполнения массива arrtest случайными числами
' Заполняем лист данными из массива arrtest, куда мы предварительно внесли все расчетные значения ,ячейки таблицы With SheetTest.Cells(currow + 1, 1).Resize(UBound(arrtest, 1), UBound(arrtest, 2)) .Columns(2).NumberFormat = "#,##0.00" .Value = arrtest End With End Sub
Sub Repair_Value() ' в выделенных ячейках исправить экспортированные как текст данные чтобы нормально опознались числа Dim rArea As Range On Error Resume Next ActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select If Err Then Exit Sub With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual: End With For Each rArea In Selection.Areas rArea.FormulaLocal = rArea.FormulaLocal Next rArea With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlAutomatic: End With End Sub
[/vba]
Попробуйте так: [vba]
Код
Sub Repair_Value() ' в выделенных ячейках исправить экспортированные как текст данные чтобы нормально опознались числа Dim rArea As Range On Error Resume Next ActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select If Err Then Exit Sub With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual: End With For Each rArea In Selection.Areas rArea.FormulaLocal = rArea.FormulaLocal Next rArea With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlAutomatic: End With End Sub