แปลงคอลัมน์เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค


129

ฉันมีหน้าที่สร้างแผ่นงาน Excel แบบง่ายที่ใช้จำนวนแถวที่ไม่ระบุในคอลัมน์ A เช่นนี้

1234
123461
123151
11321

และทำให้เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคในเซลล์อื่นที่ผู้ใช้สามารถคัดลอกและวางลงในโปรแกรมอื่นเช่น:

1234,123461,123151,11321

วิธีที่ง่ายที่สุดในการทำเช่นนี้คืออะไร?


8
ส่วนหนึ่งของการแก้ปัญหาอาจจะแก้ไขวางแบบพิเศษ Transpose เพื่อแปลงคอลัมน์เป็นแถว หากโปรแกรมอื่นยอมรับแท็บแทนที่จะเป็นเครื่องหมายจุลภาคคุณก็พร้อมหลังจากคัดลอกแถวใหม่แล้ว
Arjan

คุณจะทำตรงข้ามนี้ได้อย่างไร นำรายการที่คั่นด้วยเครื่องหมายจุลภาคและแปลงเป็นคอลัมน์เนื้อหาหรือไม่
stevvve

1
@stevvve ใช้คุณสมบัติข้อความเป็นคอลัมน์ในแท็บข้อมูล support.microsoft.com/en-us/kb/214261
เทรเวอร์

ฉันใช้โปรแกรมแก้ไขข้อความที่มีความสามารถในการแสดงออกปกติเช่น notepad ++ คัดลอกค่าคอลัมน์และวางในเครื่องมือแก้ไขค้นหาและแทนที่นิพจน์ทั่วไปค้นหา "\ r \ n" แทนที่ด้วย "," หากคุณต้องการแปลง CSV เป็นคอลัมน์ให้ค้นหา "," และแทนที่ด้วย "\ r \ n"
Junaling

คำตอบ:


145

สมมติว่าข้อมูลของคุณเริ่มต้นใน A1 ฉันจะใส่ต่อไปนี้ในคอลัมน์ B:

B1:

=A1

B2:

=B1&","&A2

จากนั้นคุณสามารถวางคอลัมน์ B2 ลงในคอลัมน์ทั้งหมด เซลล์สุดท้ายในคอลัมน์ B ควรเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคของคอลัมน์ A


8
นี่เป็นวิธีที่ดีสำหรับจำนวนแถวที่ จำกัด แต่ (ขึ้นอยู่กับหน่วยความจำที่มีอยู่) กระบวนการจะตัดสั้นถ้าคุณต่อกันเกินสองพันแถวทำให้ค่าผลลัพธ์ของคุณไม่สมบูรณ์ ระวัง.
samthebrand

การใช้ Excel 2013 บนคอมพิวเตอร์ Windows 10 Pro ที่มีประสิทธิภาพปัญหานี้ล้มเหลวหลังจาก 30-35 บรรทัดเท่านั้น ฉันต้องการมากกว่า 200 โซลูชันของ Michael Joseph ทำงานได้อย่างสมบูรณ์
Trialsman

75
  • คัดลอกคอลัมน์ใน Excel
  • เปิด Word
  • "วางแบบพิเศษ" เป็นข้อความเท่านั้น
  • เลือกข้อมูลใน Word (ข้อมูลที่คุณต้องการแปลงเป็นข้อความคั่นด้วย,) กดCtrl- H(ค้นหาและแทนที่)
  • ในช่อง "ค้นหาอะไร" ^p
  • ในประเภท "แทนที่ด้วย" ,
  • เลือก "แทนที่ทั้งหมด"

+1 เหมือนกับโซลูชัน "เป็นทางการ" ที่นี่โดย Microsoft: support.microsoft.com/kb/819964
Neo

วิธีแก้ปัญหาที่น่ารักมาก ... :-)
Saravanan

แค่เวทมนต์ที่บริสุทธิ์ :)
Sudheej


23

จริง ๆ แล้วฉันเพิ่งสร้างโมดูลใน VBA ซึ่งทำงานได้ทั้งหมด ใช้รายการที่อยู่ในช่วงของฉันและสร้างสตริงที่คั่นด้วยจุลภาคซึ่งส่งออกไปยังเซลล์ที่ฉันเลือก:

Function csvRange(myRange As Range)
    Dim csvRangeOutput
    Dim entry as variant
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & entry.Value & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

ดังนั้นในเซลล์ของฉันฉันเพิ่งใส่=csvRange(A:A)แล้วมันให้รายการที่คั่นด้วยจุลภาค


1
อ่า .. ใกล้กับคำตอบของฉันมาก แต่ฉันชอบการนำไปใช้
mpeterson

10

วิธีอื่นในการวางคอลัมน์ Excel ลงในเครื่องมือในเบราว์เซอร์นี้

convert.town/column-to-comma-separated-list

มันจะแปลงคอลัมน์ของข้อความเป็นรายการคั่นด้วยเครื่องหมายจุลภาค

เนื่องจากผู้ใช้กำลังคัดลอกและวางโปรแกรมอื่นอยู่แล้วนี่อาจเป็นเรื่องง่ายสำหรับพวกเขา


7

คุณสามารถทำอะไรเช่นนี้ หากคุณไม่ได้พูดถึงสเปรดชีตขนาดใหญ่สิ่งนี้จะทำงานได้ 'ตกลง' ...

  • Alt-F11, สร้างมาโครเพื่อสร้างรายการ (ดูรหัสด้านล่าง)
  • กำหนดให้ปุ่มทางลัดหรือแถบเครื่องมือ
  • ผู้ใช้วางคอลัมน์ของตัวเลขลงในคอลัมน์ A กดปุ่มและรายการของพวกเขาจะเข้าสู่เซลล์ B1

นี่คือรหัสแมโคร VBA:

Sub generatecsv() 

Dim i As Integer
Dim s As String

i = 1

Do Until Cells(i, 1).Value = ""
    If (s = "") Then
        s = Cells(i, 1).Value
    Else
        s = s & "," & Cells(i, 1).Value
    End If
    i = i + 1 
Loop

Cells(1, 2).Value = s

End Sub

อย่าลืมตั้งค่ารูปแบบของเซลล์ B1 เป็น 'ข้อความ' มิฉะนั้นคุณจะได้รับหมายเลขที่สับสน ฉันแน่ใจว่าคุณสามารถทำได้ใน VBA เช่นกัน แต่ฉันไม่แน่ใจว่าในขณะนี้และต้องกลับไปทำงาน ;)


7

ใช้ vi หรือ vim เพื่อวางคอมม่าที่ท้ายบรรทัดแต่ละบรรทัด:

%s/$/,/

เพื่ออธิบายคำสั่งนี้:

  • % หมายถึงการกระทำ (เช่นค้นหาและแทนที่) กับทุกบรรทัด
  • s หมายถึงการทดแทน
  • /แยกอาร์กิวเมนต์ออก (เช่นs/find/replace/options)
  • $ แสดงถึงจุดสิ้นสุดของบรรทัด
  • , เป็นข้อความแทนที่ในกรณีนี้

ตกลง ไม่ได้ใกล้เคียง.
muncherelli

ไม่เห็นด้วยกับความคิดเห็นเนื่องจากบริบท คนที่มีบัญชี superuser ซึ่งโพสต์ที่นี่มักเป็นประเภทที่ใช้ vim
uniquegeek

ฉันใช้ ViM และคิดว่าความคิดพื้นฐานนั้นมีประโยชน์ ฉันสิ้นสุดการแก้ปัญหาโดยใช้ความคิดและโปรแกรมแก้ไขข้อความอย่างง่าย
Nigini

2

คุณสามารถใช้คำแนะนำของ How-To Geek ในการเปลี่ยนแถวเป็นคอลัมน์และย้อนกลับได้ จากนั้นส่งออกข้อมูลเป็น csv (รูปแบบที่คั่นด้วยเครื่องหมายจุลภาค) และคุณมีรายการที่คั่นด้วยเครื่องหมายจุลภาคธรรมดา! คุณสามารถคัดลอกจากแผ่นจดบันทึกและนำกลับไปใช้ excel ได้หากต้องการ นอกจากนี้หากคุณต้องการช่องว่างหลังเครื่องหมายจุลภาคคุณสามารถทำการค้นหาและแทนที่คุณสมบัติแทนที่ "," ด้วย "," หวังว่าจะช่วย!


การส่งออกเป็น CSV เป็นสิ่งที่เกินกว่าที่ผู้ใช้รายนี้จะทำได้ ฉันต้องการที่จะเป็นจุดและคลิกภายใน excel
muncherelli

2

muncherelli ฉันชอบคำตอบของคุณแล้วฉันก็ปรับมัน :) มีเพียงเล็กน้อยที่มีบางครั้งที่ฉันดึงข้อมูลจากชีตและใช้มันเพื่อค้นหาฐานข้อมูล ฉันเพิ่มพารามิเตอร์ "textQualify" ซึ่งเป็นตัวเลือกที่ช่วยสร้างรายการที่คั่นด้วยเครื่องหมายจุลภาคที่สามารถใช้งานได้ในแบบสอบถาม

Function csvRange(myRange As Range, Optional textQualify As String)
    'e.g. csvRange(A:A)  or csvRange(A1:A2,"'") etc in a cell to hold the string
    Dim csvRangeOutput
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & textQualify & entry.Value & textQualify & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

1

ฉันปรับปรุง generatecsv () ย่อยเพื่อจัดการแผ่นงาน Excel ที่มีหลายรายการโดยมีบรรทัดว่างคั่นทั้งชื่อเรื่องของแต่ละรายการและรายการจากชื่อเรื่อง ตัวอย่าง

list title 1

item 1
item 2

list title 2

item 1
item 2

และรวมพวกเขาของหลักสูตรเป็นหลายแถว 1 ต่อรายการ

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

    Sub generatecsv()

      Dim dataRow As Integer
      Dim listRow As Integer
      Dim data As String

      dataRow = 1: Rem the row that it is being read from column A otherwise known as 1 in vb script
      listRow = 1: Rem the row in column B that is getting written

      Do Until Cells(dataRow, 1).Value = "" And Cells(dataRow + 1, 1).Value = ""
        If (data = "") Then
          data = Cells(dataRow, 1).Value
        Else
          If Cells(dataRow, 1).Value <> "" Then
            data = data & "," & Cells(dataRow, 1).Value
          Else
            Cells(listRow, 2).Value = data
            data = ""
            listRow = listRow + 1
          End If
        End If
        dataRow = dataRow + 1
      Loop

      Cells(listRow, 2).Value = data

    End Sub

1

คำตอบของ Sux2Loseเป็นวิธีที่ฉันชอบ แต่มันไม่ได้ผลถ้าคุณจัดการกับแถวมากกว่าสองพันแถวและอาจแตกแถวน้อยลงถ้าคอมพิวเตอร์ของคุณมีหน่วยความจำไม่เพียงพอ

แนวปฏิบัติที่ดีที่สุดในกรณีนี้อาจเป็นการคัดลอกคอลัมน์สร้างสมุดงานใหม่พิเศษในอดีตA1ของสมุดงานใหม่และTransposeเพื่อให้คอลัมน์เป็นแถว .csvแล้วบันทึกสมุดงานเป็น ตอนนี้ csv ของคุณเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคแบบข้อความธรรมดาที่คุณสามารถเปิดในโปรแกรมแก้ไขข้อความ

หมายเหตุ:อย่าลืมแปลงคอลัมน์เป็นแถวก่อนบันทึกเป็น csv มิฉะนั้น Excel จะไม่รู้ว่าจะใส่เครื่องหมายจุลภาคระหว่างค่าหรือไม่


-1

หนึ่งในวิธีที่ง่ายที่สุดคือการใช้ zamazin.co แอพพลิเคชั่นเว็บสำหรับการแยกงานคอมม่าเหล่านี้ เพียงกรอกข้อมูลคอลัมน์และกดปุ่มแปลงเพื่อสร้างรายการคั่นด้วยเครื่องหมายจุลภาค คุณสามารถใช้การตั้งค่าอื่น ๆ เพื่อปรับปรุงผลลัพธ์ที่ต้องการ

http://zamazin.co/comma-separator-tool

ป้อนคำอธิบายรูปภาพที่นี่


นี่คือตอนนี้ที่delim.co
Phil

-2

ใช้=CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)ในเซลล์ที่คุณต้องการแสดงผลลัพธ์


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