Ubah kolom menjadi daftar yang dipisahkan koma

129

Saya memiliki tugas untuk membuat lembar Excel sederhana yang mengambil jumlah baris yang tidak ditentukan di Kolom A seperti ini:

1234
123461
123151
11321

Dan membuatnya menjadi daftar yang dipisahkan koma di sel lain sehingga pengguna dapat dengan mudah menyalin dan menempel ke program lain seperti:

1234,123461,123151,11321

Apa cara termudah untuk melakukan ini?

muncherelli
sumber
8
Bagian dari solusi mungkin Edit, Tempel Spesial, Transpose untuk mengubah kolom menjadi satu baris. Jika program lain menerima Tab daripada koma, maka Anda sudah siap setelah menyalin baris baru.
Arjan
Bagaimana Anda melakukan yang sebaliknya? Ambil daftar yang dipisahkan koma dan ubah menjadi kolom konten?
stevvve
1
@stevvve gunakan fitur Teks ke Kolom di tab data. support.microsoft.com/en-us/kb/214261
Trevor
Saya menggunakan editor teks yang mampu ekspresi reguler untuk ini, seperti notepad ++. Salin nilai kolom dan tempel di editor, cari dan ganti ekspresi reguler, temukan "\ r \ n" ganti dengan ",". Jika Anda ingin mengonversi CSV ke kolom, cari "," dan ganti dengan "\ r \ n"
junaling

Jawaban:

145

Dengan asumsi data Anda dimulai pada A1 saya akan memasukkan yang berikut ini di kolom B:

B1:

=A1

B2:

=B1&","&A2

Anda kemudian dapat menempelkan kolom B2 di seluruh kolom. Sel terakhir di kolom B sekarang harus menjadi daftar kolom A. yang dipisahkan koma

Sux2Lose
sumber
8
Ini bagus untuk jumlah baris yang terbatas, tetapi (tergantung pada memori yang tersedia?) Prosesnya akan terpotong jika Anda menggabungkan beberapa ribu baris, sehingga nilai output Anda tidak lengkap. Hati-hati.
samthebrand
Menggunakan Excel 2013 pada komputer Windows 10 Pro yang kuat, ini gagal setelah hanya 30-35 baris. Saya membutuhkan lebih dari 200. Solusi oleh Michael Joseph bekerja dengan sempurna.
Trialsman
75
  • Salin kolom di Excel
  • Buka Word
  • "Rekatkan khusus" sebagai teks saja
  • Pilih data dalam Word (yang Anda perlu konversi menjadi teks yang dipisahkan dengan ,), tekan Ctrl- H(Temukan & ganti)
  • Dalam jenis kotak "Temukan apa" ^p
  • Dalam jenis kotak "Ganti dengan" ,
  • Pilih "Ganti semua"
Michael Joseph
sumber
+1 Sama dengan solusi "resmi" di sini oleh Microsoft: support.microsoft.com/kb/819964
Neo
solusi yang sangat lucu ... :-)
Saravanan
hanya sulap murni :)
Sudheej
30

Jika Anda memiliki Office 365 Excel maka Anda dapat menggunakan TEXTJOIN ():

=TEXTJOIN(",",TRUE,A:A)

masukkan deskripsi gambar di sini

Scott Craner
sumber
23

Saya sebenarnya baru saja membuat modul dalam VBA yang melakukan semua pekerjaan. Dibutuhkan daftar berkisar saya dan membuat string dibatasi koma yang merupakan output ke sel pilihan saya:

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

Jadi di sel saya, saya hanya memasukkan =csvRange(A:A)dan memberi saya daftar yang dibatasi koma.

muncherelli
sumber
1
Ah .. cukup dekat dengan jawaban saya, tapi saya suka implementasi Anda.
mpeterson
10

Pendekatan alternatif adalah menyisipkan kolom Excel ke dalam alat di-browser ini:

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

Itu mengkonversi kolom teks ke daftar yang dipisahkan koma.

Karena pengguna menyalin dan menempel ke program lain, ini mungkin mudah bagi mereka.

matahari terbenam
sumber
7

Anda bisa melakukan sesuatu seperti ini. Jika Anda tidak berbicara tentang spreadsheet besar ini akan melakukan 'ok' ...

  • Alt-F11, Buat makro untuk membuat daftar (lihat kode di bawah)
  • Tetapkan ke tombol pintasan atau bilah alat
  • Pengguna menempelkan kolom nomor mereka ke kolom A, menekan tombol, dan daftar mereka masuk ke sel B1.

Berikut adalah kode makro 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

Pastikan untuk mengatur format sel B1 menjadi 'teks' atau Anda akan mendapatkan nomor yang berantakan. Saya yakin Anda dapat melakukan ini di VBA juga, tetapi saya tidak yakin bagaimana saat ini, dan perlu kembali bekerja. ;)

mpeterson
sumber
7

Gunakan vi, atau vim untuk menempatkan koma di akhir setiap baris:

%s/$/,/

Untuk menjelaskan perintah ini:

  • % berarti melakukan tindakan (yaitu, menemukan dan mengganti) ke semua baris
  • s menunjukkan substitusi
  • /memisahkan argumen (yaitu, s/find/replace/options)
  • $ mewakili akhir suatu garis
  • , adalah teks pengganti dalam kasus ini
Breathwork
sumber
Sepakat. Bahkan tidak dekat.
muncherelli
Tidak setuju dengan komentar karena konteks. Seseorang dengan akun pengguna super yang memposting di sini sering kali adalah tipe yang menggunakan vim.
uniquegeek
Saya tetapi menggunakan ViM dan berpikir ide dasar bermanfaat. Saya akhirnya memecahkan masalah dengan menggunakan ide dan editor teks sederhana.
Nigini
2

Anda bisa menggunakan panduan How-To Geek tentang mengubah baris menjadi kolom dan membalikkannya. Kemudian ekspor data sebagai csv (koma-deliminated format), dan Anda memiliki daftar dipisahkan koma plaintext! Anda dapat menyalin dari notepad dan mengembalikannya ke excel jika diinginkan. Juga, jika Anda menginginkan spasi setelah koma, Anda dapat melakukan fitur cari & ganti, ganti "," dengan ",". Semoga itu bisa membantu!

Duall
sumber
Mengekspor ke CSV melampaui apa yang dapat dilakukan pengguna ini. Saya membutuhkannya untuk menjadi point dan klik dalam excel.
muncherelli
2

muncherelli, saya menyukai jawaban Anda, dan saya men-tweak-nya :). Hanya hal kecil, ada kalanya saya menarik data dari selembar dan menggunakannya untuk query database. Saya menambahkan parameter "textQualify" opsional yang membantu membuat daftar terpisah koma yang dapat digunakan dalam kueri.

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
mitch
sumber
1

Saya memperbaiki sub generatecsv () untuk menangani lembar excel yang berisi banyak daftar dengan garis kosong yang memisahkan judul masing-masing daftar dan daftar dari judul mereka. contoh

list title 1

item 1
item 2

list title 2

item 1
item 2

dan menggabungkannya tentu saja menjadi beberapa baris, 1 per daftar.

alasannya, saya meminta klien mengirimi saya beberapa kata kunci dalam format daftar untuk situs web mereka berdasarkan subjek, membutuhkan cara untuk memasukkan kata kunci ini ke halaman web dengan mudah. Jadi memodifikasi rutin dan muncul dengan yang berikut, saya juga mengubah nama variabel menjadi nama yang bermakna:

    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
domba roger
sumber
1

Jawaban Sux2Lose adalah metode yang saya sukai, tetapi tidak berfungsi jika Anda berurusan dengan lebih dari beberapa ribu baris, dan dapat merusak baris yang lebih sedikit lagi jika komputer Anda tidak memiliki banyak memori yang tersedia.

Praktik terbaik dalam hal ini mungkin menyalin kolom, membuat buku kerja baru, melewati khusus dalam A1buku kerja baru dan Transposesehingga kolom sekarang menjadi baris. Kemudian simpan buku kerja sebagai .csv. CSV Anda sekarang pada dasarnya adalah daftar yang dipisahkan koma teks biasa yang dapat Anda buka di editor teks.

Catatan: Ingatlah untuk memindahkan kolom ke baris sebelum menyimpan sebagai csv. Kalau tidak, Excel tidak akan tahu untuk menempel koma di antara nilai-nilai.

samthebrand
sumber
-1

Salah satu cara termudah adalah dengan menggunakan aplikasi web zamazin.co untuk jenis tugas yang memisahkan koma. Cukup isi data kolom dan tekan tombol convert untuk membuat daftar yang dipisahkan koma. Anda bahkan dapat menggunakan beberapa pengaturan lain untuk meningkatkan output yang diinginkan.

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

masukkan deskripsi gambar di sini

Hakan
sumber
Ini sekarang di delim.co
Phil
-2

Gunakan =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)pada sel yang ingin Anda tampilkan hasilnya.

Johnny
sumber
3
Ini adalah solusi manual yang tidak dapat dihitung.
Daniel Hári