I’ve been working with SQL and Excel Macros, but I don’t know how to add text to a cell.
I wish to add the text "01/01/13 00:00" to cell A1. I can’t just write it in the cell because the macro clears the contents of the sheet first and adds the information afterwards.
How do I do that in VBA?
asked Dec 16, 2013 at 13:43
2
Range("$A$1").Value = "'01/01/13 00:00" will do it.
Note the single quote; this will defeat automatic conversion to a number type. But is that what you really want? An alternative would be to format the cell to take a date-time value. Then drop the single quote from the string.
answered Dec 16, 2013 at 13:44
BathshebaBathsheba
231k33 gold badges359 silver badges477 bronze badges
3
You could do
[A1].Value = "'O1/01/13 00:00"
if you really mean to add it as text (note the apostrophe as the first character).
The [A1].Value is VBA shorthand for Range("A1").Value.
If you want to enter a date, you could instead do (edited order with thanks to @SiddharthRout):
[A1].NumberFormat = "mm/dd/yyyy hh:mm;@"
[A1].Value = DateValue("01/01/2013 00:00")
answered Dec 16, 2013 at 13:47
FlorisFloris
45.7k6 gold badges70 silver badges122 bronze badges
7
You need to use Range and Value functions.
Range would be the cell where you want the text you want
Value would be the text that you want in that Cell
Range("A1").Value="whatever text"
answered Mar 7, 2016 at 10:21
GarryGarry
611 silver badge1 bronze badge
You can also use the cell property.
Cells(1, 1).Value = "Hey, what's up?"
Make sure to use a . before Cells(1,1).Value as in .Cells(1,1).Value, if you are using it within With function. If you are selecting some sheet.
enamoria
8762 gold badges11 silver badges29 bronze badges
answered Dec 19, 2018 at 6:40
AnSo
Пользователь
Сообщений: 15
Регистрация: 20.03.2017
Всем привет!
Есть ячейка A1, в которой содержатся строки с разным форматированием (см. вложение):
3. Жирный текст
2. Красный текст
1. Обычный текст
Как с помощью VBA в ячейку, в начало, добавить еще одну строку обычного текста, чтобы существующее форматирование не нарушилось, т.е. 3-я строка осталась жирной, 2-я Красной, а 1-я осталась без форматирования?
Уточнение: приведенное форматирование текста внутри ячейки это просто пример, т.е. на самом деле оно может быть произвольным.
Если я делаю так:
| Код |
|---|
Cells(1, 1).FormulaR1C1 = "4. Обычный текст" & Chr(10) & Cells(1, 1).FormulaR1C1 |
то форматирование нарушается, становиться одинаковым для всей ячейки (т.е. для всего текста внутри ячейки).
РЕШЕНИЕ №1 от Alec Perle, в ответе #12:
Ограничение: работает только если в ячейке содержится не более 255 символов.
| Код |
|---|
ActiveCell.Characters(0, 0).Insert "Дополнительная строка" & Chr(10) |
РЕШЕНИЕ №2 от БМВ, в ответе #11:
Ограничения:
1. В процессе вставки подменяются некоторые цвета текста внутри ячейки, например стандартный зеленый #00B050.
2. Если на листе используется условное форматирование, то после вставки целевая ячейка исключается из диапазонов существующих условий условного форматирования.
| Код |
|---|
Sub insertText() sXml = Cells(1, 1).Value(xlRangeValueXMLSpreadsheet) sXml = Application.Trim(Replace$(Replace$(Replace$(sXml, vbCrLf, " "), vbLf, " "), vbCr, " ")) s = "Type=""String"" xmlns=""http://www.w3.org/TR/REC-html40"">" p = InStr(sXml, s) + Len(s) sXml = Left(sXml, p - 1) & "<Font html:Color=""#000000"">4. Обычный текст </Font>" & Mid(sXml, p, 32768) Cells(1, 1).Value(xlRangeValueXMLSpreadsheet) = sXml End Sub |
ОГРОМНОЕ СПАСИБО: Alec Perle (Решение1), БМВ (Решение 2), Jack Famous (комментарий про MID) и конечно автору первоисточника — ZVI.
Результат того, что мне было нужно в ответе #27.
Прикрепленные файлы
- cell.jpg (12.47 КБ)
Изменено: AnSo — 18.10.2019 09:41:35
Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.
Обращение к ячейке по адресу
Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.
В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:
|
Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Range(«C5») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, 3) Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, «C») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).[C5] |
Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.
Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:
|
ActiveCell Range(«A1») Cells(1, 1) Cells(1, «A») [A1] |
Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».
Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:
|
‘по основному имени листа Лист2.Cells(2, 7) ‘по имени ярлыка Sheets(«Имя ярлыка»).Cells(3, 8) |
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.
Обращение к ячейке по индексу
К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.
Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.
Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.
По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):
Обращение к ячейке Range("A1:C3").Cells(5) соответствует выражению Range("B2").
Обращение к ячейке по имени
Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.
Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range("Итого").
Запись информации в ячейку
Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:
|
Cells(2, 4).Value = 15 Cells(2, 4) = 15 Range(«A1») = «Этот текст записываем в ячейку» ActiveCell = 28 + 10*36 |
Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».
Чтение информации из ячейки
Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:
|
Sub Test() Dim a1 As Integer, a2 As Integer, a3 As Integer Range(«A3») = 6 Cells(2, 5) = 15 a1 = Range(«A3») a2 = Cells(2, 5) a3 = a1 * a2 MsgBox a3 End Sub |
Точно также можно обмениваться информацией между ячейками:
|
Cells(2, 2) = Range(«A4») |
Очистка значения ячейки
Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля. пустой строки или Empty:
|
Cells(10, 2).ClearContents Range(«D23») = 0 ActiveCell = «» Cells(5, «D») = Empty |
For example Microsoft VBA:
ActiveCell = ActiveCell & <Some Text i want to add with option Size = 20>
How i can implement that description inside «<>» brackets
pnuts
58k11 gold badges85 silver badges137 bronze badges
asked Feb 24, 2014 at 22:56
You want to change the ActiveCell.Characters().Font property
Dim CurrentText, SomeText
Dim CurrentTextLen, SomeTextLen
CurrentText = ActiveCell.Value
CurrentTextLen = Len(CurrentText)
SomeText = "Some Text i want to add with option Size = 20"
SomeTextLen = Len(SomeText)
ActiveCell.Value = CurrentText & SomeText
With ActiveCell.Characters(Start:=CurrentTextLen + 1, Length:=SomeTextLen).Font
.Size = 20
End With
For this, you need to know where your <> text starts (i.e. the length of the ActiveCell current contents, plus one)
You will also need the length of your <> text (i.e. the length of the <> text)
answered Feb 24, 2014 at 23:13
marlenunezmarlenunez
6164 silver badges9 bronze badges
|
39 / 14 / 1 Регистрация: 11.05.2010 Сообщений: 139 |
|
|
1 |
|
Как дописать значение в ячейку19.04.2011, 14:17. Показов 9336. Ответов 4
Необходимо последовательно добавлять записи в одну ячейку, оставляя в ней старые данные. Другими словами нужно просто постоянно дописывать её содержимое. Имеется ли такая функция?
0 |
|
Заблокирован |
||||
|
19.04.2011, 15:15 |
2 |
|||
1 |
|
39 / 14 / 1 Регистрация: 11.05.2010 Сообщений: 139 |
|
|
19.04.2011, 15:21 [ТС] |
3 |
|
а по другому больше нельзя?
0 |
|
Заблокирован |
||||
|
19.04.2011, 15:53 |
4 |
|||
|
Вот так можно добавлять, сохраняя форматирование текста (например, цвет):
1 |
|
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
|
19.04.2011, 18:50 |
5 |
|
что-то опробовал, нифига было красным в ячейке, дописалось, всё красное!!
0 |

