Vba excel вставить кавычки в формулу

Двойные кавычки и кавычки «ёлочки» в коде VBA Excel. Коды символов кавычек и ввод кавычек «ёлочек» в редакторе VBA Excel с клавиатуры. Примеры.

Двойные кавычки

Двойные прямые кавычки ("Весна") обычно называют просто «двойные кавычки» или «прямые кавычки», так как в текстах они встречаются намного чаще одинарных прямых кавычек ('Весна').

В VBA Excel прямые кавычки являются специальными символами, обозначающими текст:

x = «Магазин Весна открыт»

Переменной x присваивается строка (текст): Магазин Весна открыт.

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

Пример добавления двойных прямых кавычек внутри текста из кода VBA Excel:

Sub Primer1()

Dim x As String

    x = «Магазин ««Весна»» открыт»

    Debug.Print x  ‘Магазин «Весна» открыт

    x = «Магазин « & Chr(34) & «Весна» & Chr(34) & » открыт»

    Debug.Print x  ‘Магазин «Весна» открыт

End Sub

Кавычки «ёлочки»

Двойные кавычки «ёлочки» обычно называют просто кавычки «ёлочки», так как одинарные ‹ёлочки› встречаются очень редко.

Двойные кавычки «ёлочки» не являются спецсимволами, поэтому в строках внутри процедур VBA Excel их можно использовать не только через функцию Chr по числовому коду символа, но и ввести с клавиатуры.

Ввод «ёлочек» с клавиатуры в редакторе VBA Excel осуществляется также с помощью числовых кодов символов открывающей и закрывающей кавычек:

  • числовой код открывающей кавычки («) — 171;
  • числовой код закрывающей кавычки (») — 187.

Сочетания клавиш для ввода «ёлочек» с клавиатуры:

  • Alt+0171 — ввод открывающей кавычки («);
  • Alt+0187 — ввод закрывающей кавычки (»).

Обратите внимание, что для ввода «ёлочек» с клавиатуры используется левая клавиша Alt, а числовой код набирается на цифровом блоке справа.

Пример добавления двойных кавычек «ёлочки» внутри текста из кода VBA Excel:

Sub Primer2()

Dim x As String

    x = «Магазин «Весна» открыт»

    Debug.Print x  ‘Магазин «Весна» открыт

    x = «Магазин « & Chr(171) & «Весна» & Chr(187) & » открыт»

    Debug.Print x  ‘Магазин «Весна» открыт

End Sub


I want to insert an if statement in a cell through vba which includes double quotes.

Here is my code:

Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"

Due to double quotes I am having issues with inserting the string. How do I handle double quotes?

Andrei Konstantinov's user avatar

asked Jan 26, 2012 at 20:18

user793468's user avatar

user793468user793468

4,87823 gold badges80 silver badges126 bronze badges

2

I find the easiest way is to double up on the quotes to handle a quote.

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0,"""",Sheet1!A1)" 

Some people like to use CHR(34)*:

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)" 

*Note: CHAR() is used as an Excel cell formula, e.g. writing «=CHAR(34)» in a cell, but for VBA code you use the CHR() function.

thomas's user avatar

answered Jan 26, 2012 at 20:21

Brain2000's user avatar

3

Another work-around is to construct a string with a temporary substitute character. Then you can use REPLACE to change each temp character to the double quote. I use tilde as the temporary substitute character.

Here is an example from a project I have been working on. This is a little utility routine to repair a very complicated formula if/when the cell gets stepped on accidentally. It is a difficult formula to enter into a cell, but this little utility fixes it instantly.

Sub RepairFormula()
Dim FormulaString As String

FormulaString = "=MID(CELL(~filename~,$A$1),FIND(~[~,CELL(~filename~,$A$1))+1,FIND(~]~, CELL(~filename~,$A$1))-FIND(~[~,CELL(~filename~,$A$1))-1)"
FormulaString = Replace(FormulaString, Chr(126), Chr(34)) 'this replaces every instance of the tilde with a double quote.
Range("WorkbookFileName").Formula = FormulaString

This is really just a simple programming trick, but it makes entering the formula in your VBA code pretty easy.

answered Feb 24, 2017 at 19:11

D Zeller's user avatar

D ZellerD Zeller

1811 silver badge2 bronze badges

All double quotes inside double quotes which suround the string must be changed doubled. As example I had one of json file strings : «delivery»: «Standard»,
In Vba Editor I changed it into «»»delivery»»: «»Standard»»,» and everythig works correctly. If you have to insert a lot of similar strings, my proposal first, insert them all between «» , then with VBA editor replace » inside into «». If you will do mistake, VBA editor shows this line in red and you will correct this error.

answered Jul 19, 2016 at 11:08

Sharunas Bielskis's user avatar

I have written a small routine which copies formula from a cell to clipboard which one can easily paste in Visual Basic Editor.

    Public Sub CopyExcelFormulaInVBAFormat()
        Dim strFormula As String
        Dim objDataObj As Object

        'Check that single cell is selected!
       If Selection.Cells.Count > 1 Then
            MsgBox "Select single cell only!", vbCritical
            Exit Sub
        End If

        'Check if we are not on a blank cell!
       If Len(ActiveCell.Formula) = 0 Then
            MsgBox "No Formula To Copy!", vbCritical
            Exit Sub
        End If

        'Add quotes as required in VBE
       strFormula = Chr(34) & Replace(ActiveCell.Formula, Chr(34), Chr(34) & Chr(34)) & Chr(34)

        'This is ClsID of MSFORMS Data Object
       Set objDataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        objDataObj.SetText strFormula, 1
        objDataObj.PutInClipboard
        MsgBox "VBA Format formula copied to Clipboard!", vbInformation

        Set objDataObj = Nothing

    End Sub

It is originally posted on Chandoo.org forums’ Vault Section.

answered Oct 20, 2017 at 4:53

shrivallabha.redij's user avatar

In case the comment by gicalle ever dies:

I prefer creating a global variable:

Public Const vbDoubleQuote As String = """" 'represents 1 double quote (")
Public Const vbSingleQuote As String = "'" 'represents 1 single quote (') 

and using it like so:

Shell "explorer.exe " & vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus

Thanks to mirabeau @ Mrexcel for original script.

What the original code does
Sums every range in the K column and adds total to end

What I want it to do
Replace the sum with a sumif that sums only the cells meeting the criterion cell, unless the criterion cell containts «Bloomingdales*». Then the entire range should be summed.

The issue
I am checking if formula cell.offset(-4,-10) equals the exception. I am however having troubles mixing variables and strings and even variables and variables. Ideally, it should check if e = Store or if e = «Bloomingdales*». Either the code won’t execute, or I only get it to display «e=store», where Excel can’t interpret the VBA variables.

My attempt:

Sub addups()
Dim e As Range, f As Range, g As Range, u As String, x As Range, Store As String
Set e = Columns("K").Rows(2) 'any column and/or start row you like
If e = "" Then Set e = e.End(4)
Do
Set g = e
If e.Offset(1) <> "" Then Set e = e.End(4)
u = Range(g, e).Address(0, 0)
Set f = e.Offset(1)
Set e = e.End(4)
Set x = f.Offset(-4, -10)
Store = "Bloomingdales*"
f.Formula = "=IF("& x &" = "&Store&",Sum(" & u & "),Sumif(A:A," & x.Address & ", K:K))"'Error
Loop Until e.Row = Rows.Count
End Sub

Please let me know if you need more info. Cheers!

Чтобы в строку VBA записать символ кавычек, приходится использовать код символа кавычек Chr(34) или дублировать символ кавычек. В итоге получается громоздкий код вида

'запись формулы в ячейку Excel
c.FormulaLocal = "=ГИПЕРССЫЛКА(""[C:Книга.xls]"")"
'или
c.FormulaLocal="=ГИПЕРССЫЛКА(" & Chr(34) & "[C:w.xls]" & Chr(34) & ")"

Для заключения строк в кавычки можно использовать функцию

'заключает текст в двойные кавычки (способ 1)
Public Function Quotes(text As String) As String
  Quotes = Chr(34) & text & Chr(34)
End Function
'заключает текст в двойные кавычки (способ 2)
Public Function Quotes(text As String) As String
  Quotes = """" & text & """"
End Function
...
c.FormulaLocal = "=ГИПЕРССЫЛКА(" & Quotes("[C:Книга.xls]") & ")"

Запись опубликована в рубрике программирование с метками VBA. Добавьте в закладки постоянную ссылку.

Добавить кавычки во все строки диапазона

scaels1

Дата: Вторник, 31.03.2015, 00:21 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 19


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Добрый день.
Помогите пожалуйста составить макрос, который решит несложную задачу.
На листе есть диапазон А1:А100
ячейка может быть пустой или с текстовыми данными.
Задача: значение каждой не пустой ячейки взять в кавычки. т.е. было в А1 — вариант текста 1, а после обработки станет «вариант текста 1» и так пройтись по всем ячейкам диапазона. т.е. надо добавить кавычки в начало и в конец каждой не пустой ячейки. Если ячейка пустая, тогда туда добавлять ничего не надо.
Спасибо
[moder]Вообще-то, несмотря на то, что все понятно, примерчик все равно нужен. Кстати, а текст не может начинаться или заканчиваться на кавычку?

 

Ответить

Nic70y

Дата: Вторник, 31.03.2015, 00:47 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

текст не может начинаться или заканчиваться на кавычку?

[vba]

Код

    Range(«a1:a100″).Replace What:=»»»»»», Replacement:=»»»»

[/vba]остальное не скажу :( т.к.

примерчик все равно нужен


ЮMoney 41001841029809

Сообщение отредактировал Nic70yВторник, 31.03.2015, 00:49

 

Ответить

Goblinax

Дата: Вторник, 31.03.2015, 02:28 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

1)ставим в клетку В1 кавчку.
2)в клетке С1 пишем =B1&A1&B1 получается клетка а1 в кавчках.
3) протягиваем эту формулу до низу. копируем и вставляем весь получившийся столбик как значение вместо столбика А(копировать как, галочка как значение) , затем удаляем все кроме столика А.
4) выделяем весь столбик А. жмем сонтр+Н. делаем в верхней строке пишем «» в нижней ничего. жмем «заменить все»
5) профит)

 

Ответить

МВТ

Дата: Вторник, 31.03.2015, 07:16 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 476


Репутация:

137

±

Замечаний:
0% ±


Excel 2007

Небольшое изменение в формуле:

Код

=ЕСЛИ(A1=»»;»»;$B$1&B1&$B$1)

Это позволит ставить кавычку только в первой ячейке и не убирать кавычки через Ctrl-H. Можно вообще не задействовать третий столбец:

Код

=ЕСЛИ(A1=»»;»»;»»»»&A1&»»»»)

. Но если вы настаиваете именно на макросе, вот он[vba]

Код

Sub QQ()
For I = 1 To Cells(Rows.Count, 1).End(xlUp).Row
With Cells(I, 1)
If .Value <> «» And Left(.Value, 1) <> «»»» And Right(.Value, 1) <> «»»» Then .Value = «»»» & .Value & «»»»
End With
Next I
End Sub

[/vba]
UPD Подправил макрос с учетом замечания уважаемого Nic70y

Сообщение отредактировал МВТВторник, 31.03.2015, 07:39

 

Ответить

Nic70y

Дата: Вторник, 31.03.2015, 07:42 |
Сообщение № 5

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

Хулиганы! Наотвечали все таки!
МВТ, не хватаетт.е. ЛЕВБ и ПРАВБ
[moder]Действительно. Ну и ладно, хулиганы наотвечали, а я поскрываю.


ЮMoney 41001841029809

Сообщение отредактировал _Boroda_Вторник, 31.03.2015, 09:49

 

Ответить

МВТ

Дата: Вторник, 31.03.2015, 07:55 |
Сообщение № 6

Группа: Проверенные

Ранг: Обитатель

Сообщений: 476


Репутация:

137

±

Замечаний:
0% ±


Excel 2007

Nic70y, простите великодушно не доглядел. Вначале сделал формулу, потом макрос, потом подправил макрос с учетом вашего комментария, а формулу — запамятовал. Спешу исправить оплошность:

Код

=ЕСЛИ(ИЛИ(A1=»»;ЛЕВСИМВ(A1;1)=»»»»;ПРАВСИМВ(A1;1)=»»»»); «»;»»»»&A1&»»»»)

 

Ответить

Nic70y

Дата: Вторник, 31.03.2015, 08:06 |
Сообщение № 7

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

такой вариант;

Код

=ПОДСТАВИТЬ(«»»»&A1&»»»»;»»»»»»;»»»»)

МВТ, а макрос Ваш я стырю. Мой получился не такой красивый :( (не покажу)
так правильнее:

Код

=ЕСЛИ(A1=»»;»»;ПОДСТАВИТЬ(«»»»&A1&»»»»;»»»»»»;»»»»))


ЮMoney 41001841029809

Сообщение отредактировал Nic70yВторник, 31.03.2015, 08:14

 

Ответить

scaels1

Дата: Вторник, 31.03.2015, 19:38 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 19


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

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

К сообщению приложен файл:

2313422.xlsx
(10.1 Kb)

 

Ответить

wild_pig

Дата: Вторник, 31.03.2015, 23:17 |
Сообщение № 9

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

[vba]

Код

Sub uuu()
     Dim Cel As Range
     For Each Cel In Range(«A1:A» & Cells(Rows.Count, 1).End(xlUp).Row)
         If Cel <> «» Then Cel.Value = Chr(34) & Cel.Value & Chr(34)
     Next
End Sub

[/vba]

 

Ответить

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