如何从以列分隔的数据集到以逗号分隔的一个?

时间:2019-02-03 01:14:49

标签: excel dataset

我需要将数据集的列分成逗号分隔,我该怎么做?我需要一个看起来像这样的数据集:

enter image description here

@ VBasic2008是我在表单中间看到的内容:第一行和第二行是我对函数CONCAT的尝试。虽然我需要像图像中最右边的部分……像6,40,45,52。并非所有值都已合并。.

enter image description here

所以我使用CONCAT函数做到了这一点,但是我必须手动计算每一列,以显示最终需要帮助的那些列(请注意,我使用;而不是因为我的excel似乎无法使用,)

enter image description here

这终于是最终的输出

enter image description here

好的,但是如果我有1000列的数据集怎么办?这个过程需要比这快得多。尚未优化。

5 个答案:

答案 0 :(得分:1)

如果您正在寻找公式解决方案

TEXTJOIN(", ", TRUE, Range)

其中Range是期​​望值的列跨度


Option Explicit

Sub CSV()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")

Dim LR As Long, xRow As Range
LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

Application.ScreenUpdating = False
    For Each xRow In ws.Range("A1:A" & LR)
        xRow.Offset(0, 6).Value = WorksheetFunction.TextJoin(", ", True, xRow.Resize(1, 6))
    Next xRow
Application.ScreenUpdating = True

End Sub

enter image description here

答案 1 :(得分:0)

这已经用逗号分隔,因此您只需将其重命名为.csv文件。

在Windows资源管理器中,转到功能区,然后转到“视图”选项卡并启用“文件扩展名”。 导航到您的文件,右键单击并将其重命名为THEFILENAME.csv而不是THEFILENAME.xlsx

现在,当您在excel中打开它时,它应该具有网格。

答案 2 :(得分:0)

文件的扩展名是什么? .xls,.txt或.csv?

如果文件位于.xls中,则只需在Excel中打开文件,然后使用“文件”->“另存为”菜单,然后从文件类型下拉列表中选择“逗号分隔”即可。

如果文件扩展名为.csv,并且您尝试在Excel中打开它,那么即使文件中带有逗号,您也会看到列。要验证文件是否用逗号分隔,只需用记事本或其他文本编辑器打开以查看逗号分隔的值即可。

如果还有其他分隔符,例如冒号:或其他,并且想要用逗号替换,则只需在记事本中使用“查找并替换”选项即可。

答案 3 :(得分:0)

CONCAT Excel UDF

我是前一段时间写的。 在VBE中添加一个模块,并将以下代码复制到其中。

代码

'*******************************************************************************
' Purpose:        Concatenates the values of cells of a specified range.
'                 Read only. String.
' Syntax:         CONCAT(Range, Separator, Row0Column1)
' Inputs:
'   Range         A valid range in any open workbook. Required.
'   Separator     A string to be used as a separator between the values.
'                 Default is the space character. Optional.
'   Row0Column1   If 0 it concatenates by row, if 1 then by column.
'                 Default is 0. Optional.
' Returns:        A string containing all the values of the specified range.
'*******************************************************************************
Function CONCAT(ByVal Range As Range, Optional Separator As String = _
    " ", Optional Row0Column1 As Long = 0) As String

'***************************************
  ' Variables
  Dim xdRowStart As Long, xdRowEnd As Long, xdRowCounter As Long
  Dim xdColumnStart As Long, xdColumnEnd As Long, _
      xdColumnCounter As Long
  Dim xdSep As String, xdString As String, xdCheckEmptyString As String
  Dim xdWS As Worksheet

'***************************************
  ' Values
  xdString = ""
  xdSep = Separator
  Set xdWS = Range.Worksheet
  xdRowStart = Range.Row
  xdRowEnd = xdRowStart + Range.Rows.count - 1
  xdColumnStart = Range.Column
  xdColumnEnd = xdColumnStart + Range.Columns.count - 1

'***************************************
  ' Determine concatenated direction: by row or by column
  Select Case Row0Column1
    Case 0
      GoTo ConcatenateByRow
    Case 1
      GoTo ConcatenateByColumn
    Case Else
      MsgBox "Row0Column1:" & vbCr _
        & "Ommit or use 0 for Concatenating by Row." & vbCr _
        & "Use 1 for Concatenating by Column."
      GoTo ConcatenateFinal
  End Select

'***************************************
  ' Concatenate by Row:
ConcatenateByRow:
  For xdRowCounter = xdRowStart To xdRowEnd
    For xdColumnCounter = xdColumnStart To xdColumnEnd
      If xdString = "" Then 'xdString is empty; all cells were empty so far
        xdCheckEmptyString = xdWS.Cells(xdRowCounter, xdColumnCounter)
        If xdCheckEmptyString <> "" Then 'Cell is not empty
          xdString = xdCheckEmptyString
        End If
       Else 'xdString is not empty
        xdCheckEmptyString = xdWS.Cells(xdRowCounter, xdColumnCounter)
        If xdCheckEmptyString <> "" Then 'Cell is not empty
          xdString = xdString & xdSep & xdCheckEmptyString
        End If
      End If
    Next xdColumnCounter
  Next xdRowCounter
  GoTo ConcatenateFinal

'***************************************
  ' Concatenate by Column:
ConcatenateByColumn:
  For xdColumnCounter = xdColumnStart To xdColumnEnd
    For xdRowCounter = xdRowStart To xdRowEnd
      If xdString = "" Then 'xdString is empty; all cells were empty so far
        xdCheckEmptyString = xdWS.Cells(xdRowCounter, xdColumnCounter)
        If xdCheckEmptyString <> "" Then 'Cell is not empty
          xdString = xdCheckEmptyString
        End If
       Else 'xdString is not empty
         xdCheckEmptyString = xdWS.Cells(xdRowCounter, xdColumnCounter)
         If xdCheckEmptyString <> "" Then 'Cell is not empty
           xdString = xdString & xdSep & xdCheckEmptyString
         End If
      End If
    Next xdRowCounter
  Next xdColumnCounter
  GoTo ConcatenateFinal

'***************************************
ConcatenateFinal:
  CONCAT = xdString
End Function
'*******************************************************************************

在Excel中的用法

=CONCAT($A1:$G1,",")并复制下来:

=CONCAT($A2:$G2,",")

答案 4 :(得分:0)

关于您的问题,我已经写了几条评论,这些评论可能很难理解。因此,我决定提供一个完整的解决方案,这实际上是一个技巧。

请注意,如果文件带有后缀.csv(扩展名),Microsoft Excel将尝试猜测文件内容的数据结构。因此,每当您打开.csv文件时,您都将数据获取到列中,而不是使用a single columns来复制comma separated values

为了实现所需的功能,首先,将数据保存为逗号分隔值(.csv)文件格式。

然后将文件扩展名从.csv更改为.txt(文本文件),例如: 如果您的文件名为“ data.csv”,请将其更改为“ data.txt”。更改文件扩展名之前,请确保将其视为csv,因为在某些情况下您看不到文件扩展名。因此,当您重命名它时,它仍然是一个csv文件。

注意:如果没有看到文件扩展名,或者在Microsoft Windows上,请遵循此link

将文件重命名为txt文件格式后,您可以通过以下方法在Excel应用程序中打开文件:转到File -> Open ->,然后浏览txt文件。

去那里,得到你想要的东西。

您不需要编写代码或使用任何函数来实现这一目标,尽管您可以选择这样做,因为这也是一个很好的解决方案。