ไม่ต้องใส่เครื่องหมายคำพูดเมื่อคัดลอกจากเซลล์


95

ปัญหา :
เมื่อคัดลอกเซลล์จาก Excel ภายนอกโปรแกรมเครื่องหมายคำพูดคู่จะถูกเพิ่มโดยอัตโนมัติ

รายละเอียด :
ฉันใช้ Excel 2007 บนเครื่อง Windows 7 ถ้าฉันมีเซลล์ที่มีสูตรต่อไปนี้:

="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.

ดีและดี แต่ถ้าฉันคัดลอกเซลล์ไปยังโปรแกรมอื่นเช่น notepad ฉันจะได้รับเครื่องหมายอัญประกาศคู่ที่น่ารำคาญในตอนต้นและตอนท้าย สังเกตว่าแท็บที่สร้างโดย "CHAR (9)" จะถูกเก็บไว้ซึ่งเป็นสิ่งที่ดี

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

ฉันจะป้องกันไม่ให้เครื่องหมายอัญประกาศคู่นี้ปรากฏขึ้นได้อย่างไรเมื่อฉันคัดลอกไปยังโปรแกรมอื่น กล่าวอีกนัยหนึ่งฉันสามารถป้องกันไม่ให้เพิ่มโดยอัตโนมัติเมื่อเซลล์ถูกคัดลอกไปยังคลิปบอร์ดได้หรือไม่


คุณลองเปลี่ยนรูปแบบเป็นอย่างอื่นที่ไม่ใช่ตัวเลขหรือยัง ฉันคิดว่าฉันได้เห็นวิธีต่างๆแล้ว แต่ฉันไม่สามารถเปิด Excel ได้ในเวลาที่แน่นอนฉันจะกลับมาในอีกไม่กี่นาทีหากยังไม่มีคำตอบ
AdamMc331

@ McAdam331 ในการตั้งค่าของฉันหากรูปแบบเป็นข้อความเซลล์จะแยกสูตรไม่ใช่ผลลัพธ์จากการคำนวณ การจัดรูปแบบเป็นตัวเลขดูเหมือนจะแทนที่สิ่งนี้ด้วยเหตุผลบางประการ
Aaron Thomas

ทำไมคุณถึงเลือกใช้สูตรนี้? เป็นเพราะ Excel ไม่รองรับวิธีง่ายๆในการแทรกอักขระแท็บหรือไม่? ฉันดูเหมือนจะไม่สามารถแก้ไขปัญหานี้ได้อาจมีตัวเลือกอื่นนอกเหนือจาก Excel ที่คุณสามารถใช้ได้ แต่ฉันไม่แน่ใจว่าลักษณะของโครงการคืออะไร
AdamMc331

นอกจากนี้อาจเป็นเรื่องยุ่งยาก แต่ถ้าคุณเปิด Excel และเริ่มพิมพ์ในเซลล์ (ซึ่งโดยค่าเริ่มต้นจะถูกจัดรูปแบบเป็นทั่วไป) และคุณป้อนข้อความมันจะคัดลอกโดยไม่มีเครื่องหมายอัญประกาศ (ทดสอบโดยใช้ Excel 2013 และ Notepad ++) จะมีผลกับโปรเจ็กต์ของคุณไหมที่ต้องใส่ 4 ช่องว่างแทนแท็บ อีกครั้งยากที่จะพูดโดยไม่ทราบปัญหาที่เหลือ
AdamMc331

1
@ McAdam331 น่าเสียดายที่ฉันต้องการให้สิ่งนี้ทำงานได้ตรงตามที่ฉันใส่ไว้ที่นี่ลบเครื่องหมายคำพูดคู่นำหน้าและต่อท้าย โปรดอย่าปล่อยให้แท็บหลุดไปจากจุดสำคัญของคำถามนี้ - ต้องอยู่ที่นั่น
Aaron Thomas

คำตอบ:


33

หากคุณลองวางลงใน 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

ในการเพิ่มโมดูลมาตรฐานลงในโครงการของคุณ (สมุดงาน) ให้เปิด VBE ด้วยAlt+ F11จากนั้นคลิกขวาที่สมุดงานของคุณในหน้าต่างโครงการด้านซ้ายบนแล้วเลือกสิ่งที่ใส่เข้าไป> โมดูล วางรหัสลงในหน้าต่างโมดูลรหัสซึ่งจะเปิดขึ้นทางด้านขวา

กลับไปที่ Excel ไปที่ Tools> Macro> Macros แล้วเลือกมาโครชื่อ "CopyCellContents" จากนั้นเลือกตัวเลือกจากกล่องโต้ตอบ ที่นี่คุณสามารถกำหนดแมโครเพื่อคีย์ลัด (เช่นเช่นCTRL+ Cสำเนาปกติ) - ผมใช้+CTRLQ

จากนั้นเมื่อคุณต้องการคัดลอกเซลล์เดียวไปยัง Notepad / ที่ใดก็ตามเพียงแค่กด Ctrl + q (หรืออะไรก็ได้ที่คุณเลือก) จากนั้นทำเครื่องหมายCTRL+ Vหรือแก้ไข> วางในปลายทางที่คุณเลือก

คำตอบของฉันถูกคัดลอก (มีส่วนเพิ่มเติมเล็กน้อย) จาก: ที่นี่

แก้ไข : (จากความคิดเห็น)

ถ้าคุณไม่พบ Microsoft Forms 2.0 Library ในรายการอ้างอิงคุณสามารถลองได้

  • มองหา FM20.DLL แทน (ขอบคุณ @Peter Smallwood)
  • คลิกเรียกดูและเลือกC:\Windows\System32\FM20.dll(Windows 32 บิต) (ขอบคุณ @JWhy)
  • คลิกเรียกดูและเลือกC:\Windows\SysWOW64\FM20.dll (บน 64 บิต)

1
ดูเหมือนว่า VBA จะเป็นทางออกเดียวสำหรับสิ่งนี้ - ขอบคุณสำหรับอินพุต
Aaron Thomas

1
หากคุณไม่เห็น Microsoft Forms lib ในรายการข้อมูลอ้างอิงให้เรียกดู FM20.DLL
Peter Smallwood

15
ฉันยังคงได้รับคำพูดหากวางลงใน Notepad ++

1
@monkeyintern ฉันคิดว่าฉันมีข้อความหลายบรรทัดในเซลล์เดียวและแยกออกเป็นบรรทัดเดียวต่อเซลล์ให้ฉันแก้ไขมันได้
Kat

2
@ user3616725 เวอร์ชันที่อัปเดตอาจมีการเปลี่ยนแปลงลักษณะการทำงานนี้ แต่ Word และ Notepad ++ เวอร์ชันปัจจุบัน (ณ วันที่โพสต์ของความคิดเห็นนี้) จะวางเครื่องหมายคำพูดเหล่านี้เมื่อเลือกเซลล์เดียวหรือหลายเซลล์
Tony

84

ฉันเพิ่งมีปัญหานี้และการห่อแต่ละเซลล์ด้วยCLEANฟังก์ชันได้รับการแก้ไขให้ฉัน สิ่งนี้น่าจะทำได้ค่อนข้างง่ายโดย=CLEAN(เลือกเซลล์ของคุณจากนั้นกรอกข้อมูลในคอลัมน์ที่เหลือโดยอัตโนมัติ หลังจากทำสิ่งนี้แล้วการวางลงใน Notepad หรือโปรแกรมอื่น ๆ จะไม่มีเครื่องหมายคำพูดซ้ำกันอีกต่อไป


22
คำตอบที่ดีสำหรับการลบเครื่องหมายคำพูดพิเศษ แต่น่าเสียดายที่มันลบอักขระแท็บ ... ซึ่งในคำถามฉันต้องการเก็บไว้ ขอบคุณสำหรับข้อมูล!
Aaron Thomas

สิ่งนี้ใช้ได้ผลสำหรับฉันฉันไม่สนใจแท็บ - อันที่จริงฉันต้องการให้พวกเขาทั้งหมดและตัวละครขึ้นบรรทัดใหม่ก็ถูกลบออกไป
Cody

19
มันจะลบอักขระ ASCII ทั้งหมดที่ต่ำกว่า 32 บรรทัดใหม่เช่นกัน
NeplatnyUdaj

1
นี่คือคำตอบที่แท้จริง
Tyler Murry

11
นี่ไม่ใช่วิธีแก้ปัญหาที่ดีเนื่องจากจะลบอักขระพิเศษทั้งหมด
พอล

26

ก่อนอื่นให้วางลงใน Word จากนั้นคุณสามารถวางลงในแผ่นจดบันทึกและจะปรากฏโดยไม่มีเครื่องหมายคำพูด


ขอบคุณสำหรับข้อมูล แต่ฉันไม่สามารถทำเครื่องหมายว่านี่เป็นวิธีแก้ปัญหาที่ดีได้ Plus มันซ้ำของการแก้ปัญหาที่ได้รับแล้วนำเสนอให้กับคำถามนี้ให้ดูstackoverflow.com/a/24913557/2658159
Aaron Thomas

4
ขอบคุณฉันชอบโซลูชันนี้ ง่ายและรวดเร็ว
Bajal

ในกรณีของฉันปัญหาของฉันคือสำหรับคำขอประเภทใดประเภทหนึ่งที่ฉันได้รับข้อมูลจะอยู่ในไฟล์ Excel และฉันจำเป็นต้องวางลงในกล่องข้อความธรรมดา เมื่อฉันทำเช่นนั้นฉันจะได้รับคำพูด ฉันใช้โปรแกรมแก้ไขข้อความเพื่อลบเครื่องหมายคำพูดพิเศษ (มันอ้างคำพูดเกินไป .. น่ารำคาญ!) กำลังมองหาวิธีง่ายๆฉันพบว่าการวางลงใน Word ก่อนใช้ได้ผลเนื่องจากเครื่องหมายคำพูดพิเศษหายไป หวังว่าฉันจะ
โหวตให้คะแนน

การดำเนินการนี้จะลบอักขระแท็บ อย่างน้อยเมื่อใช้ word ไม่แน่ใจเกี่ยวกับ wordpad
Matthew Lueder

นี่เป็นทางออกที่ดีที่สุดสำหรับวันนี้
zygimantus

6

หากคุณต้องการเลือกเซลล์หลายเซลล์และคัดลอกค่าไปยังคลิปบอร์ดโดยไม่มีเครื่องหมายคำพูดที่น่ารำคาญเหล่านี้รหัสต่อไปนี้อาจเป็นประโยชน์ นี่คือการปรับปรุงโค้ดที่ให้ไว้ด้านบนจาก 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

ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดแล้ว
posfan12

2
ดูคำตอบของฉันตามคำตอบนี้ที่แก้ไขข้อบกพร่องต่อไปนี้: 1. แปลงเซลล์ว่างเป็นสตริงว่างกับ "0" 2. ต่อท้ายแท็บ (ASCII 9) เทียบกับ CR (ASCII 13) หลังแต่ละเซลล์ 3. ต่อท้าย CR (ASCII 13) + LF (ASCII 10) (เทียบกับ CR (ASCII 13)) หลังแต่ละแถว หมายเหตุ: คุณยังไม่สามารถคัดลอกอักขระที่ฝังอยู่ภายในเซลล์ที่จะทำให้ออกจากฟิลด์เป้าหมายที่คุณวางเซลล์นั้นลงใน (เช่นแท็บหรือ CR เมื่อวางลงในหน้าต่างแก้ไขตารางการเข้าถึงหรือ SSMS)
ทอม

^ แก้ไขข้อผิดพลาดของคอมไพเลอร์ "ไม่ได้กำหนดตัวแปร" ด้วย (สำหรับตัวแปร "CR")
ทอม

4

วิธีแก้ปัญหาของฉันเมื่อฉันกดปัญหาคำพูดคือการตัดการคืนค่าขนส่งจากท้ายข้อความของเซลล์ เนื่องจากการส่งคืนค่าขนส่งเหล่านี้ (แทรกโดยโปรแกรมภายนอก) Excel จึงเพิ่มเครื่องหมายคำพูดให้กับสตริงทั้งหมด


4
เครื่องหมายคำพูดอาจเป็นผลมาจาก CR / LF ในสูตร (ไม่จำเป็นต้องอยู่ที่ส่วนท้าย) หรือแท็บในคำถามดั้งเดิมของชุดข้อความนี้ (char (9))
Turbo

คุณทำให้ชีวิตฉันง่ายขึ้นจริงๆ
dE ที่มา

3

ปัญหาที่เป็นไปได้เกี่ยวกับคำตอบจาก "user3616725":
ฉันใช้ Windows 8.1 และดูเหมือนว่าจะมีปัญหากับรหัส VBA ที่เชื่อมโยงจากคำตอบที่ยอมรับจาก "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

รายละเอียด:
เรียกใช้โค้ดด้านบนและวางคลิปบอร์ดลงในเซลล์ใน Excel ฉันได้รับสองสัญลักษณ์ที่ประกอบด้วยสี่เหลี่ยมที่มีเครื่องหมายคำถามอยู่ด้านในดังนี้: ⍰⍰ การวางลงใน Notepad จะไม่แสดงอะไรเลย

การแก้ไข:
หลังจากการค้นหาสำหรับค่อนข้างบางเวลาผมพบอีก VBA สคริปต์จากผู้ใช้ "Nepumuk" ซึ่งทำให้การใช้ API นี่คือรหัสของเขาที่ได้ผลสำหรับฉันในที่สุด:

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 แรกจากด้านบนให้เปลี่ยน Sub "Beispiel ()" จาก:

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

ถึง:

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

และเรียกใช้ผ่านเมนูมาโครของ Excel เช่นคำแนะนำจาก "user3616725" จากคำตอบที่ยอมรับ:

กลับไปที่ Excel ไปที่ Tools> Macro> Macros แล้วเลือกมาโครชื่อ "CopyCellContents" จากนั้นเลือก Options จากกล่องโต้ตอบ ที่นี่คุณสามารถกำหนดมาโครให้กับคีย์ลัด (เช่น Ctrl + c สำหรับสำเนาปกติ) - ฉันใช้ Ctrl + q

จากนั้นเมื่อคุณต้องการคัดลอกเซลล์เดียวไปยัง Notepad / ทุกที่เพียงแค่กด Ctrl + q (หรืออะไรก็ได้ที่คุณเลือก) จากนั้นกด Ctrl + v หรือ Edit> Paste ในปลายทางที่คุณเลือก


แก้ไข (21 พฤศจิกายน 2015):
@ ความคิดเห็นจาก "dotctor":
ไม่จริงจังนี่ไม่ใช่คำถามใหม่! ในความคิดของฉันมันเป็นส่วนเสริมที่ดีสำหรับคำตอบที่ยอมรับเนื่องจากคำตอบของฉันช่วยแก้ปัญหาที่คุณสามารถเผชิญได้เมื่อใช้รหัสจากคำตอบที่ยอมรับ ถ้าฉันจะมีชื่อเสียงมากขึ้นฉันจะสร้างความคิดเห็น
@ ความคิดเห็นจาก "Teepeemm":
ใช่คุณพูดถูกคำตอบที่ขึ้นต้นด้วยชื่อ "ปัญหา:" ทำให้เข้าใจผิด เปลี่ยนเป็น: "ปัญหาที่เป็นไปได้เกี่ยวกับคำตอบจาก" user3616725 ":" ตามความคิดเห็นฉันคงจะเขียนได้กระชับกว่านี้มาก


ฉันคิดว่านี่เป็นคำตอบที่ถูกต้อง (แม้ว่าการเปิดด้วยProblemจะทำให้ดูเหมือนว่าคุณมีปัญหาใหม่) และความคิดเห็นถูก จำกัด ไว้ที่ 600 อักขระดังนั้นสิ่งนี้จะยาวเกินไป
Teepeemm

วิเศษมาก! ขอบคุณ! ปัญหาเดียวที่ดูเหมือนจะใช้ได้กับเซลล์เดียวเท่านั้น จะปรับปรุงเพื่ออนุญาตช่วงการคัดลอกได้หรือไม่?
NeplatnyUdaj

3

"หากคุณต้องการเลือกหลายเซลล์และคัดลอกค่าไปยังคลิปบอร์ดโดยไม่มีเครื่องหมายคำพูดที่น่ารำคาญเหล่านั้น" ( โดยไม่มีข้อบกพร่องในโซลูชันหลายเซลล์ของ Peter Smallwood) "รหัสต่อไปนี้อาจเป็นประโยชน์" นี่คือการปรับปรุงโค้ดที่ให้ไว้ข้างต้นจาก Peter Smallwood (ซึ่ง "เป็นการเพิ่มประสิทธิภาพของโค้ดที่ระบุไว้ข้างต้นจาก user3616725") ซึ่งจะแก้ไขข้อบกพร่องต่อไปนี้ในโซลูชันของ Peter Smallwood:

  • หลีกเลี่ยง "ไม่ได้กำหนดตัวแปร" ข้อผิดพลาดของคอมไพเลอร์ (สำหรับ "CR" - "clibboardFieldDelimiter" ที่นี่)
  • แปลง Empty Cell เป็น String ว่างเทียบกับ "0"
  • ต่อท้ายแท็บ (ASCII 9) เทียบกับ CR (ASCII 13) หลังแต่ละเซลล์
  • ต่อท้าย CR (ASCII 13) + LF (ASCII 10) (เทียบกับ CR (ASCII 13)) หลังแต่ละแถว

หมายเหตุ: คุณยังไม่สามารถคัดลอกอักขระที่ฝังอยู่ภายในเซลล์ที่จะทำให้ออกจากฟิลด์เป้าหมายที่คุณวางเซลล์นั้นลงใน (เช่นแท็บหรือ CR เมื่อวางลงในหน้าต่างแก้ไขตารางการเข้าถึงหรือ 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

หากต้องการเว้นบรรทัดเมื่อวางในแผ่นจดบันทึกให้แทนที่บรรทัดนี้ในมาโคร:

strTemp = ActiveCell.Value

โดย:

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

0

โปรดใช้สูตรด้านล่างนี้

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

และคุณจะได้รับสิ่งที่คุณต้องการ ;-)


2
นี่เป็นการหลอกลวง แต่จะลบการจัดรูปแบบของฉัน (บรรทัดและแท็บใหม่)
Gabriel G

0

คุณสามารถทำได้ในแมโคร Excel ผ่าน VBA โดยส่งผลลัพธ์ไปยังไฟล์:

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

0
  • หากสูตรมีหลายบรรทัด (หมายถึงมีตัวแบ่งบรรทัดในสูตร) ​​การคัดลอกวางจะทำงานในลักษณะนั้น
  • หากสามารถลบหลายบรรทัดจะไม่มีเครื่องหมายคำพูดปรากฏขึ้นขณะคัดลอกวาง
  • อื่นใช้ฟังก์ชันCLEANตามที่ @greg ในคำตอบก่อนหน้ากล่าว

0

หมายเหตุ: สาเหตุของอัญประกาศคือเมื่อข้อมูลย้ายจาก excel ไปยังคลิปบอร์ดจะเป็นไปตามมาตรฐาน CSV อย่างสมบูรณ์ซึ่งรวมถึงค่าการอ้างอิงที่มีแท็บบรรทัดใหม่ ฯลฯ (และอักขระเครื่องหมายอัญประกาศคู่จะถูกแทนที่ด้วยอักขระเครื่องหมายคำพูดคู่สองตัว)

ดังนั้นอีกวิธีหนึ่งโดยเฉพาะอย่างยิ่งในกรณีของ OP เมื่อแท็บ / บรรทัดใหม่เกิดจากสูตรคือการใช้อักขระอื่นสำหรับแท็บและผลตอบแทนที่ยาก ฉันใช้ ascii Unit Separator = char (31) สำหรับแท็บและ ascii Record Separator = char (30) สำหรับบรรทัดใหม่

จากนั้นการวางลงในโปรแกรมแก้ไขข้อความจะไม่เกี่ยวข้องกับกฎ CSV เพิ่มเติมและคุณสามารถค้นหาอย่างรวดเร็วและแทนที่เพื่อแปลงกลับอีกครั้ง

หากแท็บ / บรรทัดใหม่ฝังอยู่ในข้อมูลคุณสามารถค้นหาและแทนที่ใน excel เพื่อแปลงได้

ไม่ว่าจะใช้สูตรหรือเปลี่ยนข้อมูลสิ่งสำคัญในการเลือกตัวคั่นคือห้ามใช้อักขระที่สามารถอยู่ในข้อมูลจริง นี่คือเหตุผลที่ฉันแนะนำตัวอักษร ascii ระดับต่ำ


-1

นอกจากนี้ยังสามารถลบเครื่องหมายอัญประกาศคู่เหล่านี้ได้โดยวางผลลัพธ์ของคุณในฟังก์ชัน "Clean"

ตัวอย่าง:

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

ผลลัพธ์จะถูกวางโดยไม่มีเครื่องหมายอัญประกาศคู่ในโปรแกรมอื่น ๆ เช่น Notepad ++


นี่คือคำตอบที่ซ้ำกัน CLEAN ยังตัดบรรทัดใหม่แท็บ ฯลฯ
posfan12
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.