vba에서 문자열에 큰 따옴표를 어떻게 넣습니까?


116

큰 따옴표를 포함하는 vba를 통해 셀에 if 문을 삽입하고 싶습니다.

내 코드는 다음과 같습니다.

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

큰 따옴표로 인해 문자열 삽입에 문제가 있습니다. 큰 따옴표는 어떻게 처리합니까?


직접적인 대답은 아니지만 그 문자열에 대해 확신합니까? 순환 참조이며 등호로 시작하지 않습니다.
JimmyPena

@JimmyPena 나는 그것이 아마도 예제 코드라고 생각합니다. 나는 관계없이, 편집을 제출하고있어
Farfromunique

답변:


182

가장 쉬운 방법은 견적을 처리하기 위해 따옴표를 두 배로 늘리는 것입니다.

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

어떤 사람들은 CHR (34) *를 사용하고 싶어합니다 :

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

* 참고 : CHAR ()는 Excel 셀 수식으로 사용됩니다 (예 : 셀에 "= CHAR (34)"작성). 그러나 VBA 코드의 경우 CHR () 함수를 사용합니다.


28
나는 전역 변수를 만드는 것을 선호합니다. Public Const vbDoubleQuote As String = "" "" '는 1 개의 큰 따옴표 ( ")를 나타냅니다. Public Const vbSingleQuote As String ="' " '은 1 개의 작은 따옴표 (')를 나타내며 다음과 같이 사용합니다. Shell" explorer.exe "& vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle

@gicalle의 대답은 정말 깔끔합니다. '작은 따옴표와 큰 따옴표의 수'에 대한 모든 혼란을 문서화 할 수있는 하나의 정의로 가져
옵니다

1
나는 세계 캐리지 리턴과 같은 일반적인 모든 일을 정의하는 모든 내 VBA 프로젝트의 정의 (내가 VBA 이외의 사용에 선택의 여지가 없을 때!), 따옴표 등을 많이 사용

11

또 다른 해결 방법은 임시 대체 문자로 문자열을 구성하는 것입니다. 그런 다음 REPLACE를 사용하여 각 임시 문자를 큰 따옴표로 변경할 수 있습니다. 임시 대체 문자로 물결표를 사용합니다.

다음은 제가 작업 한 프로젝트의 예입니다. 이것은 셀이 실수로 밟 혔을 때 매우 복잡한 수식을 복구하는 작은 유틸리티 루틴입니다. 셀에 입력하는 것은 어려운 공식이지만이 작은 유틸리티는 즉시 수정합니다.

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

이것은 정말 간단한 프로그래밍 트릭이지만 VBA 코드에 수식을 매우 쉽게 입력 할 수 있습니다.


8

문자열을 둘러싼 큰 따옴표 안의 모든 큰 따옴표는 두 배로 변경해야합니다. 예를 들어 json 파일 문자열 중 하나가 있습니다. "delivery": "Standard", Vba Editor에서 "" "delivery" ":" "Standard" ""로 변경했고 everythig가 올바르게 작동합니다. 비슷한 문자열을 많이 삽입해야하는 경우, 제 제안은 먼저 ""사이에 모두 삽입 한 다음 VBA 편집기로 "내부를" "로 바꿉니다. 실수하면 VBA 편집기가이 줄을 빨간색으로 표시하고 수정합니다. 이 오류.


5

나는 tabSF의 대답을 선호합니다. 귀하의 답변에 동일하게 구현하십시오. 여기에 내 접근 방식이 있습니다.

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

4

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

원래 Chandoo.org 포럼의 Vault 섹션 에 게시되었습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.