Chuyển đổi một cột thành một danh sách được phân tách bằng dấu phẩy


129

Tôi có nhiệm vụ tạo một bảng Excel đơn giản có số lượng hàng không xác định trong Cột A như sau:

1234
123461
123151
11321

Và biến chúng thành một danh sách được phân tách bằng dấu phẩy trong một ô khác mà người dùng có thể dễ dàng sao chép và dán vào một chương trình khác như vậy:

1234,123461,123151,11321

cách dễ nhất để làm điều này là gì?


8
Một phần của giải pháp có thể là Chỉnh sửa, Dán Đặc biệt, Chuyển đổi để chuyển đổi cột thành một hàng. Nếu chương trình khác chấp nhận Tab thay vì dấu phẩy, thì tất cả bạn đã được đặt sau khi sao chép hàng mới.
Arjan

Làm thế nào để bạn làm ngược lại với điều này? Lấy một danh sách được phân tách bằng dấu phẩy và chuyển đổi nó thành một cột nội dung?
stevvve

1
@stevvve sử dụng tính năng Chuyển văn bản thành Cột trong tab dữ liệu. support.microsoft.com/en-us/kb/214261
Trevor

Tôi sử dụng bất kỳ trình soạn thảo văn bản có khả năng biểu thức chính quy nào cho việc này, như notepad ++. Sao chép các giá trị cột và dán nó vào trình chỉnh sửa, tìm kiếm và thay thế biểu thức thông thường, tìm "\ r \ n" thay thế bằng ",". Nếu bạn muốn chuyển đổi CSV để cột, tìm "" và thay thế bằng '\ r \ n'
junaling

Câu trả lời:


145

Giả sử dữ liệu của bạn bắt đầu trong A1 tôi sẽ đặt phần sau vào cột B:

B1:

=A1

B2:

=B1&","&A2

Sau đó, bạn có thể dán cột B2 xuống toàn bộ cột. Ô cuối cùng trong cột B bây giờ sẽ là một danh sách được phân tách bằng dấu phẩy của cột A.


8
Điều này rất tốt cho một số lượng hàng hạn chế, nhưng (tùy thuộc vào bộ nhớ khả dụng?), Quá trình sẽ bị cắt ngắn nếu bạn kết nối vượt quá vài nghìn hàng, khiến giá trị đầu ra của bạn không đầy đủ. Hãy cẩn thận.
samthebrand

Sử dụng Excel 2013 trên máy tính Windows 10 Pro mạnh mẽ, điều này đã thất bại chỉ sau 30 - 35 dòng. Tôi cần hơn 200. Giải pháp của Michael Joseph đã hoạt động hoàn hảo.
Trialsman

75
  • Sao chép cột trong Excel
  • Mở từ
  • "Dán đặc biệt" dưới dạng văn bản
  • Chọn dữ liệu trong Word (dữ liệu bạn cần chuyển đổi thành văn bản được phân tách bằng ,), nhấn Ctrl- H(Tìm & thay thế)
  • Trong loại hộp "Tìm gì" ^p
  • Trong loại hộp "Thay thế bằng" ,
  • Chọn "Thay thế tất cả"

+1 Tương tự như giải pháp "chính thức" tại đây của Microsoft: support.microsoft.com/kb/819964
Neo

giải pháp rất dễ thương ... :-)
Saravanan

chỉ là ma thuật thuần túy :)
Sudheej

30

Nếu bạn có Office 365 Excel thì bạn có thể sử dụng TEXTJOIN ():

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

nhập mô tả hình ảnh ở đây


23

Tôi thực sự chỉ cần tạo một mô-đun trong VBA để thực hiện tất cả công việc. Nó lấy danh sách có phạm vi của tôi và tạo một chuỗi được phân cách bằng dấu phẩy, được xuất vào ô mà tôi chọn:

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

Vì vậy, trong ô của tôi, tôi chỉ cần đặt =csvRange(A:A)và nó đưa cho tôi danh sách được phân cách bằng dấu phẩy.


1
Ah .. khá gần với câu trả lời của tôi, nhưng tôi thích cách thực hiện của bạn.
mpeterson

10

Một cách tiếp cận khác là dán cột Excel vào công cụ trong trình duyệt này:

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

Nó chuyển đổi một cột văn bản thành một danh sách được phân tách bằng dấu phẩy.

Vì người dùng đang sao chép và dán vào một chương trình khác, điều này có thể dễ dàng đối với họ.


7

Bạn có thể làm một cái gì đó như thế này. Nếu bạn không nói về một bảng tính lớn, nó sẽ hoạt động 'ok' ...

  • Alt-F11, Tạo một macro để tạo danh sách (xem mã bên dưới)
  • Gán nó vào phím tắt hoặc nút thanh công cụ
  • Người dùng dán cột số của họ vào cột A, nhấn nút và danh sách của họ sẽ vào ô B1.

Đây là mã macro 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

Đảm bảo đặt định dạng của ô B1 thành 'văn bản' hoặc bạn sẽ nhận được một số bị rối. Tôi chắc chắn bạn cũng có thể làm điều này trong VBA nhưng tôi không chắc vào lúc này và cần phải quay lại làm việc. ;)


7

Sử dụng vi hoặc vim để chỉ cần đặt dấu phẩy ở cuối mỗi dòng:

%s/$/,/

Để giải thích lệnh này:

  • % có nghĩa là thực hiện hành động (nghĩa là tìm và thay thế) cho tất cả các dòng
  • s chỉ ra sự thay thế
  • /phân tách các đối số (nghĩa là s/find/replace/options)
  • $ đại diện cho sự kết thúc của một dòng
  • , là văn bản thay thế trong trường hợp này

Đã đồng ý. Thậm chí không gần gũi.
muncherelli

Không đồng ý với ý kiến ​​vì bối cảnh. Một số người có tài khoản superuser đăng bài ở đây thường là loại sử dụng vim.
duy nhất

Tôi nhưng sử dụng ViM và nghĩ rằng ý tưởng cơ bản là hữu ích. Tôi đã kết thúc việc giải quyết vấn đề bằng cách sử dụng ý tưởng và một trình soạn thảo văn bản đơn giản.
Nigini

2

Bạn có thể sử dụng hướng dẫn của How-To Geek để biến một hàng thành một cột và chỉ cần đảo ngược nó. Sau đó xuất dữ liệu dưới dạng csv (định dạng được phân cách bằng dấu phẩy) và bạn có danh sách dấu phẩy được phân tách bằng dấu phẩy! Bạn có thể sao chép từ notepad và đưa nó trở lại excel nếu bạn muốn. Ngoài ra, nếu bạn muốn có một khoảng trắng sau dấu phẩy, bạn có thể thực hiện tính năng tìm kiếm & thay thế, thay thế "," bằng ",". Mong rằng sẽ giúp!


Xuất sang CSV vượt quá những gì người dùng này có thể làm. Tôi cần nó là điểm và nhấp vào trong excel.
muncherelli

2

muncherelli, tôi thích câu trả lời của bạn, và tôi đã tinh chỉnh nó :). Chỉ là một điều nhỏ, có những lúc tôi lấy dữ liệu từ một trang tính và sử dụng nó để truy vấn cơ sở dữ liệu. Tôi đã thêm một tham số "textQualify" tùy chọn giúp tạo danh sách được phân tách bằng dấu phẩy có thể sử dụng trong truy vấn.

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

Tôi đã cải thiện phụ Generatecsv () để xử lý một bảng excel chứa nhiều danh sách với các dòng trống tách biệt cả tiêu đề của mỗi danh sách và danh sách từ các tiêu đề của chúng. thí dụ

list title 1

item 1
item 2

list title 2

item 1
item 2

và kết hợp chúng thành nhiều hàng, 1 cho mỗi danh sách.

Lý do, tôi đã có một khách hàng gửi cho tôi nhiều từ khóa ở định dạng danh sách cho trang web của họ dựa trên chủ đề, cần một cách để đưa các từ khóa này vào các trang web một cách dễ dàng. Vì vậy, đã sửa đổi thói quen và đưa ra các điều sau đây, tôi cũng đã thay đổi tên biến thành tên có ý nghĩa:

    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

Câu trả lời của Sux2Lose là phương pháp ưa thích của tôi, nhưng nó không hoạt động nếu bạn xử lý hơn một vài nghìn hàng và có thể phá vỡ thậm chí ít hàng hơn nếu máy tính của bạn không có nhiều bộ nhớ khả dụng.

Thực hành tốt nhất trong trường hợp này có lẽ là sao chép cột, tạo sổ làm việc mới, quá khứ đặc biệt trong A1sổ làm việc mới và Transposedo đó cột hiện là một hàng. Sau đó lưu sổ làm việc như một .csv. Bây giờ csv của bạn về cơ bản là một danh sách được phân tách bằng dấu phẩy mà bạn có thể mở trong trình chỉnh sửa văn bản.

Lưu ý: Hãy nhớ chuyển cột thành một hàng trước khi lưu dưới dạng csv. Nếu không, Excel sẽ không biết dán dấu phẩy giữa các giá trị.


-1

Một trong những cách dễ nhất là sử dụng ứng dụng web zamazin.co cho các loại tác vụ phân tách dấu phẩy này. Chỉ cần điền dữ liệu cột và nhấn nút chuyển đổi để tạo danh sách được phân tách bằng dấu phẩy. Bạn thậm chí có thể sử dụng một số cài đặt khác để cải thiện đầu ra mong muốn.

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

nhập mô tả hình ảnh ở đây


Bây giờ là tại delim.co
Phil

-2

Sử dụng =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)trên ô mà bạn muốn hiển thị kết quả.


3
Đây là một giải pháp thủ công không thể đánh giá được.
Daniel Hári
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.