Tinggalkan tanda kutip saat menyalin dari sel


90

Masalah :
Saat menyalin sel dari Excel di luar program, tanda kutip ganda ditambahkan secara otomatis.

Rincian :
Saya menggunakan Excel 2007 di mesin Windows 7. Jika saya memiliki sel dengan rumus berikut:

="1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2."

Output dalam sel (diformat sebagai angka) terlihat seperti ini di Excel:

1SOME NOTES FOR LINE 1.2SOME NOTES FOR LINE 2.

Baik dan bagus. Tetapi, jika saya menyalin sel ke program lain, seperti notepad, saya mendapatkan tanda kutip ganda yang mengganggu di awal dan akhir. Perhatikan tab yang dibuat oleh "CHAR (9)" disimpan, dan itu bagus.

"1  SOME NOTES FOR LINE 1.  2     SOME NOTES FOR LINE 2."

Bagaimana cara agar tanda kutip ganda tidak muncul saat saya menyalin ke program lain? Dengan kata lain, dapatkah saya mencegahnya ditambahkan secara otomatis saat sel disalin ke papan klip?


Sudahkah Anda mencoba mengubah format ke selain angka? Saya pikir saya telah melihat jalan keluarnya, tetapi saya tidak dapat membuka Excel pada saat ini, saya akan kembali dalam beberapa menit jika masih tidak ada jawaban.
AdamMc331

@ McAdam331 di pengaturan saya, jika formatnya seperti teks, sel akan menggantikan rumus, bukan hasil yang dihitung. Memformat sebagai angka tampaknya menimpa ini karena beberapa alasan.
Aaron Thomas

Mengapa Anda memilih untuk menggunakan rumus tersebut? Apakah karena Excel tidak mendukung cara mudah untuk memasukkan karakter tab? Saya sepertinya tidak bisa mengatasi ini juga, mungkin ada opsi selain Excel yang dapat Anda gunakan tetapi saya tidak yakin apa sifat proyek itu.
AdamMc331

Juga, ini mungkin merepotkan tetapi jika Anda membuka Excel dan mulai mengetik dalam sel (yang secara default diformat sebagai Umum) dan Anda memasukkan teks, itu akan menyalin tanpa tanda kutip. (Diuji menggunakan Excel 2013 dan Notepad ++) Apakah ini akan memengaruhi proyek Anda untuk hanya memasukkan 4 spasi alih-alih tab? Sekali lagi, sulit untuk mengatakannya tanpa mengetahui sisa masalahnya.
AdamMc331

1
@ McAdam331 sayangnya saya membutuhkan ini untuk bekerja persis seperti yang saya tulis di sini, minus tanda kutip ganda di depan dan di belakang. Harap jangan biarkan tab mengalihkan fokus pertanyaan ini - tab harus ada di sana.
Aaron Thomas

Jawaban:


29

Jika Anda mencoba menempelkan ke Word-Pad, Notepad ++ atau Word, Anda tidak akan mengalami masalah ini. Untuk menyalin nilai sel sebagai teks murni, untuk mencapai apa yang Anda gambarkan, Anda harus menggunakan makro:

Di buku kerja tempat Anda ingin menerapkan ini (atau di Personal.xls Anda jika Anda ingin menggunakan di beberapa buku kerja), letakkan kode berikut dalam modul standar:

Kode:

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

Untuk menambahkan modul standar ke proyek Anda (buku kerja), buka VBE dengan Alt+ F11dan kemudian klik kanan pada buku kerja Anda di kiri atas Jendela Proyek dan pilih Sisipkan> Modul. Tempel kode ke jendela modul kode yang akan terbuka di sebelah kanan.

Kembali ke Excel, buka Alat> Makro> Makro dan pilih makro yang disebut "CopyCellContents" lalu pilih Opsi dari dialog. Di sini Anda dapat menetapkan makro ke tombol pintas (misalnya seperti CTRL+ Cuntuk salinan normal) - Saya duluCTRL + Q.

Kemudian, ketika Anda ingin menyalin satu sel ke Notepad / di mana pun, cukup lakukan Ctrl + q (atau apa pun yang Anda pilih) lalu lakukan CTRL+V atau Edit> Tempel di tujuan yang Anda pilih.

Jawaban saya disalin (dengan beberapa tambahan) dari: di sini

EDIT : (dari komentar)

Jika Anda tidak menemukan Perpustakaan Microsoft Forms 2.0 dalam daftar referensi, Anda dapat mencoba

  • mencari FM20.DLL sebagai gantinya (terima kasih @Peter Smallwood)
  • mengklik Jelajahi dan memilih C:\Windows\System32\FM20.dll (32 bit Windows) (terima kasih @JWhy)
  • mengklik Jelajahi dan memilih C:\Windows\SysWOW64\FM20.dll (pada 64-bit)

1
Sepertinya VBA adalah satu-satunya solusi untuk ini - terima kasih atas masukannya.
Aaron Thomas

1
Jika Anda tidak dapat melihat lib Microsoft Forms dalam daftar referensi, maka telusuri FM20.DLL
Peter Smallwood

15
Saya masih mendapatkan tanda kutip jika saya menempelkan ke Notepad ++.
Kat

1
@monkeyintern Saya pikir saya memiliki beberapa baris teks dalam satu sel, dan membaginya menjadi satu baris per sel biarkan saya mengatasinya.
Kat

2
@ user3616725 Versi yang diperbarui mungkin telah mengubah perilaku ini, tetapi versi Word dan Notepad ++ (pada tanggal posting komentar ini) tempelkan tanda kutip ini saat memilih sel tunggal atau ganda.
Tony

81

Saya baru saja mengalami masalah ini dan membungkus setiap sel dengan CLEANfungsi yang memperbaikinya untuk saya. Itu seharusnya relatif mudah dilakukan dengan melakukan =CLEAN(, memilih sel Anda, lalu mengisi kolom secara otomatis. Setelah saya melakukan ini, tempel ke Notepad atau program lain tidak lagi memiliki tanda kutip ganda.


20
Jawaban yang bagus untuk menghapus tanda kutip tambahan, tetapi sayangnya itu juga menghapus karakter tab ... yang, dalam pertanyaan, ingin saya simpan. Terima kasih atas masukannya!
Aaron Thomas

Ini berhasil untuk saya, saya tidak peduli dengan tab - sebenarnya saya ingin semuanya dan karakter baris baru dihapus.
Cody

19
Ini menghapus semua karakter ASCII di bawah 32. Jadi baris baru juga.
NeplatnyUdaj

1
Inilah jawaban sebenarnya.
Tyler Murry

10
Ini bukan solusi yang baik karena menghapus semua karakter khusus.
Paul

26

Pertama paste ke Word, kemudian Anda bisa paste ke notepad dan akan muncul tanpa tanda kutip


Terima kasih atas masukannya, tetapi saya tidak dapat menandai ini sebagai solusi yang baik. Selain itu, ini adalah duplikat dari solusi yang telah ditawarkan untuk pertanyaan ini, lihat stackoverflow.com/a/24913557/2658159 .
Aaron Thomas

4
Terima kasih, saya menyukai solusi ini. Cepat dan mudah
Bajal

Meningkatkan yang ini ... dalam kasus saya, masalah saya adalah, untuk jenis permintaan tertentu yang saya terima, data datang dalam file Excel dan saya perlu menempelkannya ke dalam kotak teks biasa. Ketika saya melakukan itu, saya mendapatkan kutipannya. Saya telah menggunakan editor teks untuk menghapus kutipan tambahan (kutipan itu juga dikutip .. mengganggu!). Mencari solusi sederhana, saya menemukan menempelkan ke Word terlebih dahulu berfungsi karena tanda kutip tambahan hilang. Seandainya saya bisa meningkatkan ini 10x :)
Carnix

Ini akan menghapus karakter tab. Setidaknya saat menggunakan kata, tidak yakin tentang wordpad
Matthew Lueder

Ini adalah solusi terbaik bahkan untuk saat ini.
zygimantus

6

Jika Anda ingin memilih beberapa sel dan menyalin nilainya ke clipboard tanpa semua tanda kutip yang mengganggu, kode berikut mungkin berguna. Ini adalah peningkatan dari kode yang diberikan di atas dari user3616725.

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

Saya pikir ini adalah jawaban terbaik sejauh ini.
posfan12

2
Lihat Jawaban saya berdasarkan Jawaban ini yang memperbaiki bug berikut dengannya: 1. Ubah Sel Kosong menjadi String kosong vs. "0". 2. Tambahkan Tab (ASCII 9) vs. CR (ASCII 13) setelah setiap Sel. 3. Tambahkan CR (ASCII 13) + LF (ASCII 10) (vs. CR (ASCII 13)) setelah setiap Baris. CATATAN: Anda masih tidak dapat menyalin karakter yang disematkan di dalam Sel yang akan menyebabkan keluarnya bidang target tempat Anda Menempelkan Sel itu (yaitu Tab atau CR saat Menempelkan ke Jendela Akses Edit Tabel atau SSMS).
Tom

^ Juga memperbaiki Kesalahan Penyusun "Variabel tidak ditentukan" (untuk Variabel "CR").
Tom

4

Solusi saya ketika saya menekan masalah tanda kutip adalah menghapus kereta kembali dari akhir teks sel saya. Karena carriage return ini (disisipkan oleh program eksternal), Excel menambahkan tanda kutip ke seluruh string.


4
Kutipan mungkin juga merupakan hasil CR / LF di dalam rumus (tidak harus di akhir), atau tab seperti di pertanyaan asli utas ini (karakter (9)).
Turbo

Anda benar-benar membuat hidup saya mudah
Sumber dE

3

Kemungkinan masalah terkait dengan jawaban dari "user3616725":
Saya menggunakan Windows 8.1 dan sepertinya ada masalah dengan kode VBA tertaut dari jawaban yang diterima dari "user3616725":

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

Detail:
Menjalankan kode di atas dan menempelkan clipboard ke dalam sel di Excel Saya mendapatkan dua simbol yang terdiri dari kotak dengan tanda tanya di dalamnya, seperti ini: ⍰⍰. Menempelkan ke Notepad bahkan tidak menampilkan apa pun.

Solusi:
Setelah mencari beberapa lama saya menemukan skrip VBA lain dari pengguna "Nepumuk" yang menggunakan API Windows . Inilah kodenya yang akhirnya berhasil untuk saya:

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

Untuk menggunakannya dengan cara yang sama seperti kode VBA pertama dari atas, ubah Sub "Beispiel ()" dari:

Public Sub Beispiel()
    Call StringToClipboard("Hallo ...")
End Sub

Untuk:

Sub CopyCellContents()
    Call StringToClipboard(ActiveCell.Value)
End Sub

Dan jalankan melalui menu makro Excel seperti yang disarankan dari "user3616725" dari jawaban yang diterima:

Kembali ke Excel, buka Alat> Makro> Makro dan pilih makro yang disebut "CopyCellContents" lalu pilih Opsi dari dialog. Di sini Anda dapat menetapkan makro ke tombol pintas (misalnya seperti Ctrl + c untuk salinan normal) - Saya menggunakan Ctrl + q.

Kemudian, ketika Anda ingin menyalin satu sel ke Notepad / di mana pun, cukup lakukan Ctrl + q (atau apa pun yang Anda pilih) dan kemudian lakukan Ctrl + v atau Edit> Tempel di tujuan yang Anda pilih.


Sunting (21 November 2015):
@ komentar dari "dotctor":
Tidak, ini benar-benar bukan pertanyaan baru! Menurut pendapat saya, ini adalah tambahan yang bagus untuk jawaban yang diterima karena jawaban saya menjawab masalah yang dapat Anda hadapi saat menggunakan kode dari jawaban yang diterima. Jika saya ingin memiliki reputasi lebih, saya akan membuat komentar.
@ komentar dari "Teepeemm":
Ya, Anda benar, jawaban yang diawali dengan judul "Masalah:" menyesatkan. Diubah menjadi: "Kemungkinan masalah terkait dengan jawaban dari" user3616725 ":". Sebagai komentar saya pasti akan menulis jauh lebih kompak.


Saya pikir ini berfungsi sebagai jawaban yang valid (meskipun membuka dengan Masalah membuatnya tampak seperti Anda memiliki masalah baru). Dan komentar dibatasi hingga 600 karakter, jadi ini pasti akan terlalu panjang untuk itu.
Teepeemm

Hebat! Terima kasih! Satu-satunya masalah tampaknya hanya berfungsi untuk satu sel. Bisakah itu ditingkatkan entah bagaimana untuk memungkinkan rentang penyalinan?
NeplatnyUdaj

3

"Jika Anda ingin Memilih beberapa Sel dan Salin nilainya ke Papan Klip tanpa semua tanda kutip yang mengganggu" ( tanpa bug dalam solusi multi-Sel Peter Smallwood) "kode berikut mungkin berguna." Ini adalah peningkatan dari kode yang diberikan di atas dari Peter Smallwood (yang "merupakan peningkatan dari kode yang diberikan di atas dari pengguna3616725"). Ini memperbaiki bug berikut dalam solusi Peter Smallwood:

  • Menghindari Kesalahan Penyusun "Variabel tidak ditentukan" (untuk "CR" - "clibboardFieldDelimiter" di sini)
  • Ubah Sel Kosong menjadi String kosong vs. "0".
  • Tambahkan Tab (ASCII 9) vs. CR (ASCII 13) setelah setiap Sel.
  • Tambahkan CR (ASCII 13) + LF (ASCII 10) (vs. CR (ASCII 13)) setelah setiap Baris.

CATATAN: Anda masih tidak dapat menyalin karakter yang disematkan di dalam Sel yang akan menyebabkan keluarnya bidang target tempat Anda Menempelkan Sel itu (yaitu Tab atau CR saat Menempelkan ke Jendela Akses Edit Tabel atau SSMS).


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

0

Untuk mempertahankan jeda baris saat menempelkan di notepad, ganti baris ini di makro:

strTemp = ActiveCell.Value

oleh:

strTemp = Replace(ActiveCell.Value, Chr(10), vbCrLf)

0

Silakan gunakan rumus di bawah ini

=Clean("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")

dan Anda akan mendapatkan apa yang Anda inginkan ;-)


2
Ini berhasil, tetapi menghapus pemformatan saya (Garis dan tab baru)
Gabriel G

0

Anda bisa melakukan ini di makro Excel melalui VBA, mengirimkan hasilnya ke file:

Sub SimpleVBAWriteToFileWithoutQuotes()
    Open "c:\TEMP\Excel\out.txt" For Output As #1
    Print #1, Application.ActiveSheet.Cells(2, 3)
    Close #1
End Sub

Dan jika Anda ingin mendapatkan nama file dan konten menjadi beberapa file, berikut adalah cuplikan singkat yang menghindari tanda kutip ganda di sekitar output.

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

0
  • Jika rumus memiliki multi baris (artinya ada baris baru dalam rumus) maka salin tempel akan berfungsi seperti itu
  • jika dapat menghapus multi baris maka tidak akan muncul tanda kutip saat copy paste.
  • lain gunakan fungsi CLEAN seperti yang dikatakan oleh @greg di jawaban sebelumnya

0

Catatan: Penyebab tanda kutip adalah saat data berpindah dari excel ke clipboard, ia sepenuhnya mematuhi standar CSV yang mencakup nilai kutipan yang mencakup tab, baris baru, dll (dan karakter tanda kutip ganda diganti dengan dua karakter tanda kutip ganda)

Jadi pendekatan lain, terutama seperti dalam kasus OP ketika tab / baris baru karena rumus, adalah menggunakan karakter alternatif untuk tab dan pengembalian keras. Saya menggunakan ascii Unit Separator = char (31) untuk tab dan ascii Record Separator = char (30) untuk baris baru.

Kemudian menempelkan ke editor teks tidak akan melibatkan aturan CSV tambahan dan Anda dapat melakukan pencarian cepat dan mengganti untuk mengubahnya kembali.

Jika tab / baris baru disematkan dalam data, Anda dapat melakukan pencarian dan mengganti di excel untuk mengubahnya.

Baik menggunakan rumus atau mengubah data, kunci untuk memilih pemisah adalah jangan pernah menggunakan karakter yang bisa ada dalam data sebenarnya. Inilah mengapa saya merekomendasikan karakter ascii level rendah.


-1

Anda juga dapat menghapus tanda kutip ganda ini dengan menempatkan hasil Anda pada fungsi "Bersihkan".

Contoh:

=CLEAN("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")

Keluaran akan ditempelkan tanpa tanda kutip ganda pada program lain seperti Notepad ++.


Ini adalah jawaban duplikat. CLEAN juga
menghapus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.