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

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

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

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

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



답변

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

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 () 함수를 사용합니다.


답변

또 다른 해결 방법은 임시 대체 문자로 문자열을 구성하는 것입니다. 그런 다음 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 코드에 수식을 매우 쉽게 입력 할 수 있습니다.


답변

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


답변

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

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


답변

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 섹션 에 게시되었습니다 .


답변