셀에서 복사 할 때 따옴표를 생략
문제 :
프로그램 외부에서 Excel에서 셀을 복사 할 때 큰 따옴표가 자동으로 추가됩니다.
세부 정보 :
Windows 7 컴퓨터에서 Excel 2007을 사용하고 있습니다. 다음 수식을 사용하는 셀이있는 경우 :
="1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2."
셀의 출력 (숫자 형식)은 Excel에서 다음과 달라집니다.
1SOME NOTES FOR LINE 1.2SOME NOTES FOR LINE 2.
좋아요. 그러나 메모장과 같은 다른 프로그램에 셀을 복사하면 처음과 끝에 성가신 큰 따옴표가 표시됩니다. "CHAR (9)"에 의해 생성 된 탭이 유지됩니다.
"1 SOME NOTES FOR LINE 1. 2 SOME NOTES FOR LINE 2."
다른 프로그램으로 복사 할 때 꼭 큰 따옴표가 순서대로 해야합니까? 즉, 셀이 클립 보드에 복사 될 때 자동으로 추가하지 않도록 할 수 있습니까?
Word-Pad, Notepad ++ 또는 Word에 없으려고하면 문제가 발생하지 않습니다. 셀 값을 순수 텍스트로 비용 비용 설명하는 내용을 얻을 수 있습니다.
적용하려는 통합 문서 (또는 여러 통합 문서에서 사용하려는 경우 Personal.xls)에서 다음 코드를 표준 모듈에 배치합니다.
암호 :
Sub CopyCellContents()
'create a reference in the VBE to Microsft Forms 2.0 Lib
' do this by (in VBA editor) clicking tools - > references and then ticking "Microsoft Forms 2.0 Library"
Dim objData As New DataObject
Dim strTemp As String
strTemp = ActiveCell.Value
objData.SetText (strTemp)
objData.PutInClipboard
End Sub
프로젝트 (통합 문서)에 표준 모듈을 추가 비용 Alt+로 VBE를 연 F11다음 왼쪽 상단의 프로젝트 창에서 통합 문서를 마우스 오른쪽 버튼으로 클릭하고 삽입> 모듈을 선택합니다. 오른쪽에 열리는 코드 모듈 창에 코드를 넣습니다.
Excel로 돌아가서 도구> 매크로> 매크로로 이동하고 "CopyCellContents"라는 매크로를 선택한 다음 대화 상자에서 옵션을 선택합니다. 여기에 바로 가기 키에 매크로를 수 있습니다 (예를 들어 같은 CTRL+ C일반 복사)-내가 사용 CTRL+를 Q.
그런 다음 선택한 셀을 메모장 / 어디서나 선택한 항목에서 Ctrl + q (또는 선택한 항목)를 수행 한 다음 선택한 대상에서 CTRL+ V또는 편집> 넣기를 수행하십시오.
내 대답은 (몇 가지 추가로) 복사 : 여기
편집 : (댓글에서)
참조 목록에서 Microsoft Forms 2.0 Library를 찾지 못한 경우 다음을 시도해.
- 대신 FM20.DLL을 찾고 있습니다. (@Peter Smallwood에게 감사드립니다)
- 찾아보기를 클릭하고 선택
C:\Windows\System32\FM20.dll
(32 비트 Windows) (@ JWhy에게 감사) - 찾아보기를 클릭하고 선택
C:\Windows\SysWOW64\FM20.dll
(64 비트)
방금이 문제 나는가 있었고 각-cell을 CLEAN
기능 현관으로 감싸서 해결 했습니다. 을 수행하고 =CLEAN(
셀을 선택한 다음 나머지 열을 자동으로 채우면 쉽게 수행 할 수 있습니다 . 이렇게 한 후 메모장이나 다른 프로그램에 넣을 때 더 이상 따옴표가 붙지 않습니다.
먼저 메모장에 기입하면 다음 메모장에 기입하면 따옴표없이 표시됩니다.
여러 셀 을 선택 하고 해당 값을 클립 보드에 복사 하려는 경우 다음 코드가 유용 할 수 있습니다. 이 사용자는 위에있는 코드를 개선 한 것입니다.
Sub CopyCells()
'Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
'Then set a keyboard shortcut to the CopyCells Macro (eg Crtl T)
Dim objData As New DataObject
Dim cell As Object
Dim concat As String
Dim cellValue As String
CR = ""
For Each cell In Selection
If IsNumeric(cell.Value) Then
cellValue = LTrim(Str(cell.Value))
Else
cellValue = cell.Value
End If
concat = concat + CR + cellValue
CR = Chr(13)
Next
objData.SetText (concat)
objData.PutInClipboard
End Sub
따옴표 문제가 발생했을 때 내 해결은 내 셀의 텍스트 끝에서 캐리지 리턴을 제거하는 것이 었습니다. 그만큼 캐리지 리턴 (외부 프로그램에 삽입 됨) 때문에 Excel은 전체 확장에 따옴표를 추가했습니다.
"user3616725"의 답변과 관련하여 가능한 문제 :
Windows 8.1의 임이며 "user3616725"의 승인 된 답변에서 링크 된 VBA 코드에 문제가있는 것입니다.
Sub CopyCellContents()
' !!! IMPORTANT !!!:
' CREATE A REFERENCE IN THE VBE TO "Microsft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
' DO THIS BY (IN VBA EDITOR) CLICKING TOOLS -> REFERENCES & THEN TICKING "Microsoft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
Dim objData As New DataObject
Dim strTemp As String
strTemp = ActiveCell.Value
objData.SetText (strTemp)
objData.PutInClipboard
End Sub
세부 정보 :
위의 코드를 실행하고 클립 보드를 Excel의 셀에 포함면 내부에 물음표가 사각형으로 이루어진 두 개의 기호가 나타납니다. ⍰⍰. 메모장에 넣어도 아무것도 표시되지 않습니다.
솔루션 :
오랫동안 검색 한 후 "Nepumuk"사용자로부터 Windows API를 사용하는 또 다른 VBA 펼쳐보기를 찾았습니다 . 마침내 나를 위해 일한 그의 코드는 다음과 될 수 있습니다.
Option Explicit
Private Declare Function OpenClipboard Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Long, _
ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32.dll" ( _
ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32.dll" ( _
ByVal lpStr1 As Any, _
ByVal lpStr2 As Any) As Long
Private Const CF_TEXT As Long = 1&
Private Const GMEM_MOVEABLE As Long = 2
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
Private Sub StringToClipboard(strText As String)
Dim lngIdentifier As Long, lngPointer As Long
lngIdentifier = GlobalAlloc(GMEM_MOVEABLE, Len(strText) + 1)
lngPointer = GlobalLock(lngIdentifier)
Call lstrcpy(ByVal lngPointer, strText)
Call GlobalUnlock(lngIdentifier)
Call OpenClipboard(0&)
Call EmptyClipboard
Call SetClipboardData(CF_TEXT, lngIdentifier)
Call CloseClipboard
Call GlobalFree(lngIdentifier)
End Sub
위의 첫 번째 VBA 코드와 같은 방식으로 사용하는 비용 하위 "Beispiel ()"을 다음과 같이 변경합니다.
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
에 :
Sub CopyCellContents()
Call StringToClipboard(ActiveCell.Value)
End Sub
그리고 수락 된 답변에서 "user3616725"에서 제안한 것처럼 Excel 매크로 메뉴를 통해 실행됩니다.
Excel로 돌아가서 도구> 매크로> 매크로로 이동하고 "CopyCellContents"라는 매크로를 선택한 다음 대화 상자에서 옵션을 선택합니다. 여기에서 바로 가기 키에 매크로를 할당 할 수 있습니다. (예 : 일반 복사의 경우 Ctrl + c)-저는 Ctrl + q를 사용했습니다.
그런 다음 선택한 셀을 메모장 / 어디서나 선택한 항목에서 Ctrl + q (또는 선택한 항목)를 수행 한 다음 선택한 대상에서 Ctrl + v 또는 편집> 해당 항목을 수행합니다.
편집 (2015 년 11 월 21 일) :
"dotctor"의 @
새로운 질문 : 아니요, 진지하게 아닙니다! 내 답변은 수락 된 답변의 코드를 사용할 때 직면 할 수있는 문제를 해결하기 때문에 수락 된 답변에 대한 좋은 추가입니다. 더 많은 평판을 얻으면 댓글을 달았을 것입니다.
@ "Teepeemm"의 게임 :
예, 맞습니다. 제목 "문제는"로 시작하는 문제는 잘못된 것입니다. 변경 : ""user3616725 "의 답변과 관련하여 가능한 문제 :". 공연로서 나는 훨씬 더 간결하게 범한 것입니다.
" 여러 셀 을 선택 하고 모든 성가신 따옴표없이 클립 보드에 값을 복사 할 결과"( Peter Smallwood의 다중 셀 솔루션의 버그 없이 ) "다음 코드가 유용 할 수 있습니다." 이것은 Peter Smallwood ( "user3616725에서 위에 코드의 향상")에서 위에있는 코드의 향상입니다. 이 Peter Smallwood의 솔루션에서 다음 버그를 수정합니다.
- "존재하지 않는 정의되지 않음"컴파일러 오류 방지 ( "CR"- "clibboardFieldDelimiter"여기에서)
- 빈 셀을 빈 이동 대 "0"으로 변환합니다.
- 각 셀 목록 탭 (ASCII 9)과 CR (ASCII 13)을 추가합니다.
- 각 행에 CR (ASCII 13) + LF (ASCII 10) (vs. CR (ASCII 13))를 추가합니다.
참고 : 해당 셀을 넣는 대상 필드 (예 : Access 또는 SSMS의 테이블 편집 창에 넣을 때 Tab 또는 CR)을 종료하는 셀 유전자 포함 된 문자를 여전히 복사 할 수 없습니다.
Option Explicit
Sub CopyCellsWithoutAddingQuotes()
' -- Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
' -- NOTE: You may have to temporarily insert a UserForm into your VBAProject for it to show up.
' -- Then set a Keyboard Shortcut to the "CopyCellsWithoutAddingQuotes" Macro (i.e. Crtl+E)
Dim clibboardFieldDelimiter As String
Dim clibboardLineDelimiter As String
Dim row As Range
Dim cell As Range
Dim cellValueText As String
Dim clipboardText As String
Dim isFirstRow As Boolean
Dim isFirstCellOfRow As Boolean
Dim dataObj As New dataObject
clibboardFieldDelimiter = Chr(9)
clibboardLineDelimiter = Chr(13) + Chr(10)
isFirstRow = True
isFirstCellOfRow = True
For Each row In Selection.Rows
If Not isFirstRow Then
clipboardText = clipboardText + clibboardLineDelimiter
End If
For Each cell In row.Cells
If IsEmpty(cell.Value) Then
cellValueText = ""
ElseIf IsNumeric(cell.Value) Then
cellValueText = LTrim(Str(cell.Value))
Else
cellValueText = cell.Value
End If ' -- Else Non-empty Non-numeric
If isFirstCellOfRow Then
clipboardText = clipboardText + cellValueText
isFirstCellOfRow = False
Else ' -- Not (isFirstCellOfRow)
clipboardText = clipboardText + clibboardFieldDelimiter + cellValueText
End If ' -- Else Not (isFirstCellOfRow)
Next cell
isFirstRow = False
isFirstCellOfRow = True
Next row
clipboardText = clipboardText + clibboardLineDelimiter
dataObj.SetText (clipboardText)
dataObj.PutInClipboard
End Sub
메모장에 넣을 때 줄 바꿈을 유지하려는 매크로에서 다음 줄을 바꿉니다.
strTemp = ActiveCell.Value
으로 :
strTemp = Replace(ActiveCell.Value, Chr(10), vbCrLf)
아래 공식을 사용하십시오
=Clean("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")
그리고 당신은 당신이 원하는 것을 얻을 것이다 ;-)
결과를 "Clean"기능에 배치하여 다음과 같은 큰 따옴표를 제거 할 수도 있습니다.
예 : = CLEAN ( "1"& CHAR (9) & "줄 1에 대한 몇 가지 메모"& CHAR (9) & "2"& CHAR (9) & "줄 2에 대한 몇 가지 참고")
출력은 메모장 ++와 같은 다른 프로그램에 큰 따옴표없이 넣습니다.
VBA를 통해 Excel 매크로 에서이 작업을 수행하여 결과를 파일로 보낼 수 있습니다.
Sub SimpleVBAWriteToFileWithoutQuotes()
Open "c:\TEMP\Excel\out.txt" For Output As #1
Print #1, Application.ActiveSheet.Cells(2, 3)
Close #1
End Sub
파일 이름과 내용을 여러 파일로 가져 오려면 출력 주위에 큰 따옴표를 사용하지 않는 짧은 스 니펫이 있습니다.
Sub DumpCellDataToTextFilesWithoutDoubleQuotes()
' this will work for filename and content in two different columns such as:
' filename column data column
' 101 this is some data
' 102 this is more data
Dim rngData As Range
Dim strData As String
Dim strTempFile As String
Dim strFilename As String
Dim i As Long
Dim intFilenameColumn As Integer
Dim intDataColumn As Integer
Dim intStartingRow As Integer
intFilenameColumn = 1 ' the column number containing the filenames
intDataColumn = 3 ' the column number containing the data
intStartingRow = 2 ' the row number to start gathering data
For i = intStartingRow To Range("A1", Range("A1").End(xlDown)).Rows.Count
' copy the data cell's value
Set rngData = Application.ActiveSheet.Cells(i, intDataColumn)
' get the base filename
strFilename = Application.ActiveSheet.Cells(i, intFilenameColumn)
' assemble full filename and path
strTempFile = "w:\TEMP\Excel\" & strFilename & ".txt"
' write to temp file
Open strTempFile For Output As #1
Print #1, rngData
Close #1
Next i
' goto home cell
Application.ActiveSheet.Cells(1, 1).Select
Range("A1").ClearOutline
End Sub
참고 URL : https://stackoverflow.com/questions/24910288/leave-out-quotes-when-copying-from-cell
'IT' 카테고리의 다른 글
{} 문을 사용하여 내부에서 반환을 호출하는 것이 좋은 방법입니까? (0) | 2020.10.08 |
---|---|
Multiprocessing Queue, Pool 및 Locking을 사용하는 단순한 예 (0) | 2020.10.08 |
Kotlin : 공개 get private set var (0) | 2020.10.08 |
C ++ 읽기 및 쓰기는 int 원자입니까? (0) | 2020.10.08 |
objc_exception_throw에 중단 점을 추가하는 방법은 무엇입니까? (0) | 2020.10.08 |