Vba excel значение ячейки как текст

I have a «duration» column in an Excel sheet. Its cell format always changes — I want convert the duration from minutes to seconds, but because of the cell formatting it always gives me different answers.

I was thinking that before doing the conversion I could convert that cell format to text so that it will consider that as text value and not try to auto-format it.

Currently I am copying all data into Notepad and then saving it back to the Excel sheet to remove all of the previous format. Is there a way to automate setting a cell’s formatting to text using VBA?

Teamothy's user avatar

Teamothy

1,9903 gold badges15 silver badges24 bronze badges

asked Nov 25, 2011 at 6:10

Code Hungry's user avatar

Code HungryCode Hungry

3,87022 gold badges66 silver badges95 bronze badges

1

To answer your direct question, it is:

Range("A1").NumberFormat = "@"

Or

Cells(1,1).NumberFormat = "@"

However, I suggest changing the format to what you actually want displayed. This allows you to retain the data type in the cell and easily use cell formulas to manipulate the data.

answered Nov 25, 2011 at 20:03

Justin Self's user avatar

0

One point: you have to set NumberFormat property BEFORE loading the value into the cell. I had a nine digit number that still displayed as 9.14E+08 when the NumberFormat was set after the cell was loaded. Setting the property before loading the value made the number appear as I wanted, as straight text.

OR:

Could you try an autofit first:

Excel_Obj.Columns("A:V").EntireColumn.AutoFit

Teamothy's user avatar

Teamothy

1,9903 gold badges15 silver badges24 bronze badges

answered Apr 22, 2015 at 19:56

Dan McSweeney's user avatar

1

Well this should change your format to text.

Worksheets("Sheetname").Activate
Worksheets("SheetName").Columns(1).Select 'or Worksheets("SheetName").Range("A:A").Select
Selection.NumberFormat = "@"

answered Nov 25, 2011 at 20:02

Jon's user avatar

JonJon

4333 gold badges6 silver badges24 bronze badges

1

for large numbers that display with scientific notation set format to just ‘#’

answered Feb 21, 2019 at 18:08

Mark Freeman's user avatar

To prevent Scientific Notation

With Range(A:A)
    .NumberFormat = "@"
    .Value = .Formula
End With

Stefano Sansone's user avatar

answered Mar 14, 2022 at 13:02

Defgha's user avatar

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

Здравствуйте, уважаемые. Подскажите код, который преобразует числа, в текст (не путать число прописью).
Это нужно для автофильтра, что бы фильтровать например — содержит 123.

Изменено: agregator03.10.2016 12:28:42

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Вариант: добавить ведущий апостроф.

 

МатросНаЗебре

Пользователь

Сообщений: 5516
Регистрация: 05.02.2014

#3

03.10.2016 12:35:49

Код
    For Each c In Selection.Cells
        c.NumberFormat = "@"
        c.Value = c.Text
    Next

Прикрепленные файлы

  • Книга1.xlsm (16.14 КБ)

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

#4

03.10.2016 12:37:47

Выполнить обратное действие чем в

Код
Sub ЧислоИзОбласти()
    With ActiveSheet.Range("C1:C10")
        arr = .Value
        .NumberFormat = "General"
        .Value = arr
    End With
End Sub

Как написать текстовый формат?

Excel всемогущий.

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

#5

03.10.2016 17:08:53

Диапазон «A2:A36700» большой и если перебирать каждую ячейку, то слишком долго выполняется (хотя и работает). Можно ли сделать макрос наподобие этого, т.к. этот не работает. (Формат ячеек меняет на текстовый, но числа остаются числами.)

Кросс

Код
Sub ЧислоВтекстИзОбласти()
    With ActiveSheet.Range("A2:A36700")
        arr = .Value
        .NumberFormat = "@"
        .Value = arr
    End With
End Sub

Прикрепленные файлы

  • Пример.xlsx (61.74 КБ)

Изменено: agregator03.10.2016 17:27:08

Excel всемогущий.

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#6

03.10.2016 20:55:28

Код
Sub ЧислоВтекстИзОбласти()
    Dim arr(), i&, j&
    
    With ActiveSheet.Range("A2:A36700")
        arr = .Value
        For i = 1 To UBound(arr, 1)
            For j = 1 To UBound(arr, 2)
                arr(i, j) = CStr(arr(i, j))
            Next j
        Next i
        .NumberFormat = "@"
        .Value = arr
    End With
End Sub

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

#7

03.10.2016 21:28:37

pashulka на программерс ответил так:

Код
With Range("A2:A36700")
     .NumberFormat = "@"
     .Value = .Formula
End With

Думаю тут в явном виде не помешает. Я например о такой тонкости не знал…

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Hugo, впору сказать «краткость — сестра таланта». Спасибо. Взял на заметку.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

Всем большое спасибо за ответы.

 

ikariya

Пользователь

Сообщений: 13
Регистрация: 25.06.2019

Господа, а не подскажете,что делать, если указанный код сохраняет числа с дробной частью заменяя запятую точкой. Ну, т.е. было 55555,5, стало  55555.5.
Можно это как-то без отдельной команды исправить?
Спасибо!

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#11

25.06.2019 18:47:20

Замените в #7 строку 3 на

Код
.Value = .FormulaLocal

Владимир

В приложении Excel все данные как правило находятся в ячейках на листах, с которыми макросы работают как с базой данных. Поэтому, начинающему программисту VBA важно понимать как читать значения из ячейки Excel в переменные или массивы и, наоборот, записывать какие-либо значения на лист в ячейки.

Обращение к конкретной ячейке

Прежде чем читать или записывать значение в ячейке, нужно определиться с тем, как можно указать какая именно ячейка нам необходима.

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

  • С помощью Range
  • С помощью Cells

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

Workbooks("Книга1.xls").Sheets("Лист1").Range("A3") ' Обратиться к ячейке A3
Workbooks("Книга1.xls").Sheets("Лист1").Cells(3, 1) ' Обратиться к ячейке в 3-й строке и 1-й колонке (A3)

Однако, как правило, полный путь редко используется, т.к. макрос работает с Книгой, в которой он записан и часто на активном листе. Поэтому путь к ячейке можно сократить и написать просто:

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Range("A1")
Cells(1, 1)

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

With Workbooks("Книга1").Sheets("Лист2")
  ' Вывести значение ячейки A1, которая находится на Листе2
  MsgBox .Range("A1")
  ' Вывести значение ячейки B1, которая находится на Листе2
  MsgBox .Range("B1")
End With

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Application.ActiveCell ' полная запись
ActiveCell ' краткая запись

Чтение значения из ячейки

Есть 3 способа получения значения ячейки, каждый из которых имеет свои особенности:

  • Value2 — базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 — самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
  • Value — значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
  • Text — визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде «число месяц прописью год», то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде «#####» то Text вернет вам не само значение, а эти самые «решетки».

По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат «14 марта 2001 г.». Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

MsgBox Cells(1, 1)        ' выведет 01.03.2018
MsgBox Cells(1, 1).Value  ' выведет 01.03.2018
MsgBox Cells(1, 1).Value2 ' выведет 43160
MsgBox Cells(1, 1).Text   ' выведет 01 марта 2018 г.

Dim d As Date
d = Cells(1, 1).Value2    ' числовое представление даты преобразуется в тип Date
MsgBox d                  ' выведет 01.03.2018

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат «Денежный» с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

MsgBox Range("C1")        ' выведет 123,4568
MsgBox Range("C1").Value  ' выведет 123,4568
MsgBox Range("C1").Value2 ' выведет 123,456789
MsgBox Range("C1").Text   ' выведет 123,457р.

Dim c As Currency
c = Range("C1").Value2    ' значение преобразуется в тип Currency
MsgBox c                  ' выведет 123,4568

Dim d As Double
d = Range("C1").Value2    ' значение преобразуется в тип Double
MsgBox d                  ' выведет 123,456789

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка «Type mismatch». Как определить тип значения в ячейке, рассказано в следующей статье.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Dim s As String
Dim i As Integer
s = Range("B1").Value2 ' успех
i = Range("B1").Value2 ' ошибка

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Запись значения в ячейку

Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

Пример 8: Записать в ячейку A1 активного листа значение 123,45

Range("A1") = 123.45
Range("A1").Value = 123.45
Range("A1").Value2 = 123.45

Все три строки запишут в A1 одно и то же значение.

Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

Cells(2, 1) = #3/1/2018#
Cells(2, 1).Value = #3/1/2018#
Cells(2, 1).Value2 = #3/1/2018#

В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

Визуальное отображение значения на экране будет зависеть от того, какой формат ячейки выбран на листе.

Функции преобразования типов данных в VBA Excel. Наименования функций, синтаксис, типы возвращаемых данных, диапазоны допустимых значений выражения-аргумента.

Синтаксис функций преобразования

Выражение (аргумент) – это любое строковое или числовое выражение, возвращающее значение, входящее в диапазон допустимых значений для аргумента. Выражение может быть представлено переменной или другой функцией.

Если аргумент, переданный в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.

Функции преобразования типов

Наименования функций преобразования типов, типы возвращаемых данных, диапазоны допустимых значений для аргумента:

Функция Тип данных Диапазон значений аргумента
CBool Boolean Любое допустимое строковое или числовое выражение.
CByte Byte От 0 до 255.
CCur Currency От -922 337 203 685 477,5808 до 922 337 203 685 477,5807.
CDate Date Любое допустимое выражение даты.
CDbl Double От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений.
CDec Decimal 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001.
CInt Integer От -32 768 до 32 767, дробная часть округляется.
CLng Long От -2 147 483 648 до 2 147 483 647, дробная часть округляется.
CSng Single От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений.
CStr String Результат, возвращаемый функцией CStr, зависит от аргумента Выражение.
CVar Variant Диапазон совпадает с типом Double  для числовых значений и с типом  String  для нечисловых значений.

Дополнительно для VBA7:

Функция Тип данных Диапазон значений аргумента
CLngLng LongLong От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, дробная часть округляется. Действительно только для 64-разрядных платформ.
CLngPtr LongPtr От -2 147 483 648 до 2 147 483 647 для 32-разрядных платформ, от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 для 64-разрядных платформ, дробная часть округляется в обоих типах систем.

Примеры преобразования типов

Функция CBool

Функция CBool используется для преобразования выражений в тип данных Boolean.

Dim a

a = CBool(10) ‘Результат: True

a = CBool(0) ‘Результат: False

a = CBool(«True») ‘Результат: True

a = CBool(«Test») ‘Результат: Error

Dim a, b, c

a = «Test1»

b = «Test2»

c = CBool(a = b) ‘Результат: False

c = CBool(a <> b) ‘Результат: True

Функция CByte

Функция CByte используется для преобразования выражений в тип данных Byte.

Dim a, b, c

a = 654

b = 3.36

c = a / b ‘Результат: 194,642857142857

c = CByte(c) ‘Результат: 195

c = a * b ‘Результат: 2197,44

c = CByte(c) ‘Результат: Error

Функция CCur

Функция CCur используется для преобразования выражений в тип данных Currency.

Dim a, b, c

a = 254.6598254

b = 569.2156843

c = a + b ‘Результат: 823,8755097

c = CCur(a + b) ‘Результат: 823,8755

Функция CDate

Функция CDate используется для преобразования выражений в тип данных Date. Она распознает форматы даты в соответствии с национальной настройкой системы.

Dim a As String, b As Date, c As Double

a = «28.01.2021»

b = CDate(a) ‘Результат: #28.01.2021#

c = CDbl(b) ‘Результат: 44224

Dim a

a = CDate(44298.63895) ‘Результат: #12.04.2021 15:20:05#

a = CDate(44298) ‘Результат: #12.04.2021#

a = CDate(0.63895) ‘Результат: #15:20:05#

Функция CDbl

Функция CDbl используется для преобразования выражений в тип данных Double.

Dim a As String, b As String, c As Double

a = «45,3695423»

b = «548955,756»

c = CDbl(a) + CDbl(b) ‘Результат: 549001,1255423

Примечание
Eсли основной язык системы – русский, при записи в редакторе VBA Excel дробного числа в виде текста, ставим в качестве разделителя десятичных разрядов – запятую. Проверьте разделитель по умолчанию для своей национальной системы:
MsgBox Application.DecimalSeparator

Функция CDec

Функция CDec используется для преобразования выражений в тип данных Decimal.

Dim a As String, b As Double, c

a = «5,9228162514264337593543950335»

b = 5.92281625142643

c = CDec(a) CDec(b) ‘Результат: 0,0000000000000037593543950335

Dim a As Double, b As String, c

a = 4.2643E14

b = CStr(a) ‘Результат: «4,2643E-14»

c = CDec(a) ‘Результат: 0,000000000000042643

Функция CInt

Функция CInt используется для преобразования выражений в тип данных Integer.

Dim a As String, b As Integer

a = «2355,9228»

b = CInt(a) ‘Результат: 2356

Функция CLng

Функция CLng используется для преобразования выражений в тип данных Long.

Dim a As Date, b As Long

a = CDate(44298.63895) ‘Результат: #12.04.2021 15:20:05#

b = CLng(a) ‘Результат: 44299

a = CDate(b) ‘Результат: #13.04.2021#

Функция CSng

Функция CSng используется для преобразования выражений в тип данных Single.

Dim a As String, b As Single

a = «3,2365625106»

b = CSng(a) ‘Результат: 3,236562

Функция CStr

Функция CStr используется для преобразования выражений в тип данных String.

Dim a As Single, b As String

a = 5106.23

b = CStr(a) ‘Результат: «5106,23»

Функция CVar

Функция CVar используется для преобразования выражений в тип данных Variant.

Dim a As Double, b As String, c

a = 549258.232546

b = «Новое сообщение»

c = CVar(a) ‘Результат: 549258,232546 (Variant/Double)

c = CVar(b) ‘Результат: «Новое сообщение» (Variant/String)

Функции преобразования типов данных используются в тексте процедур VBA Excel для того, чтобы указать, что результатом выполнения той или иной операции должны стать данные определенного типа, отличающегося от типа, заданного по умолчанию.


voidex

168 / 6 / 3

Регистрация: 05.07.2013

Сообщений: 62

1

Как преобразовать число в текст (на подобии =текст() )

06.05.2014, 10:17. Показов 50639. Ответов 10

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Нужно какую нибудь функцию VBA, которая бы выполняла то же самое что и =текст() (тесть преобразования чего либо в ячейке в текст)

Попробовал записать макрос используя эту функцию получилось следующее:

Visual Basic
1
 ActiveCell.FormulaR1C1 = "=TEXT(RC[-1],0)"

не совсем то

Чтото на подобии

Visual Basic
1
2
3
4
    
Sub m_1()
Columns("A").NumberFormat = "0.00"
End Sub

Спасибо.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

06.05.2014, 10:29

2

Зачем?
Есть ведь фукнции листа, тот же TRIM() например.
Хотя непонятно зачем



0



168 / 6 / 3

Регистрация: 05.07.2013

Сообщений: 62

06.05.2014, 10:31

 [ТС]

3

Вроде удлаось использовать ActiveCell.FormulaR1C1 = «=TEXT(RC[-1],0)» как было нужно, но если кто знает функции vba поделитесь



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

06.05.2014, 10:33

4

Лучший ответ Сообщение было отмечено voidex как решение

Решение

В VBA есть cstr()



1



voidex

168 / 6 / 3

Регистрация: 05.07.2013

Сообщений: 62

06.05.2014, 11:15

 [ТС]

5

Кстати как не странно cstr не хочет преобразовывать в текст ,тоесть excel не смещает текст влево и не появляется зеленый треугольничек, говорящий о том, что это число форматированное как тест

Visual Basic
1
2
3
4
 Sub test()
myvalue = Cells(5, 1)
Cells(3, 3) = CStr(myvalue)
End Sub

Добавлено через 14 минут
И еще такой вопрос, можно ли как то задать длину поля в excel, как в access? тоесть например 1 знак или 5 итд..
Просто excel сохраняет по умолчанию 9 как я посмотрел



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

06.05.2014, 11:23

6

Лучший ответ Сообщение было отмечено voidex как решение

Решение

cstr() преобразовывает в текст — а эксель преобразовывает назад. Он ведь не дурак — видит что это число.
Тогда перед тем, как писать это «тексточисло» в ячейку — сделайте ей текстовый формат.
Я спрашивал зачем — не ответите?

Visual Basic
1
2
3
4
5
Sub test()
    myvalue = Cells(5, 1)
    Cells(3, 3).NumberFormat = "@"
    Cells(3, 3) = CStr(myvalue)
End Sub



1



168 / 6 / 3

Регистрация: 05.07.2013

Сообщений: 62

06.05.2014, 11:32

 [ТС]

7

Из сапа выгружается excel файл, его нужно будет отформатировать макросом и сохранить 2003 офисов в dbf, а после загружать в старую программу которая читает только дбф файлы, поэтому нужно чтобы поля были в текстовом формате, еще не уверен насчет длины полей тк пока что не проверили
Если все получится, то это упростит жизнь многим людям
______________

Спасибо, теперь заработало, гораздо лучше вариант чем FormulaR1C1 = «=TEXT(RC[-1],0)»



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

06.05.2014, 11:40

8

В dbf есть текстовые и нетекстовые числовые поля? Я правда не в курсе…
Если сохранять в dbf как есть — получается не то?
Ну если что — задать столбцу текстовый формат, выгрузить в него массив текстовых чисел. Их можно получить или перекладыванием в текстовый массив (текстового типа), или индивидуально преобразовав каждый элемент массива.



0



168 / 6 / 3

Регистрация: 05.07.2013

Сообщений: 62

06.05.2014, 11:41

 [ТС]

9

И как я понимаю @ — текстовй формат
а какие еще есть «знаки» для numberforma?

просто исходя из
Integer %
Long &
Single !
Double #
String $
Currency @
не вяжется)



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

06.05.2014, 11:48

10

Включите рекордер, позадавайте форматов, выключите. И смотрите код.



1



4 / 4 / 0

Регистрация: 14.04.2012

Сообщений: 11

21.07.2016, 21:20

11

я делаю так: Cells(3, 3).value=»‘» & Cells(3, 3).value



0



Понравилась статья? Поделить с друзьями:
  • Vba excel запрос к запросу
  • Vba excel запрос значения
  • Vba excel запрос ввода данных
  • Vba excel запрет редактирования ячеек
  • Vba excel значение ячейки как строка