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

Posted

技术标签:

【中文标题】如何从列分隔的数据集到逗号分隔的数据集?【英文标题】:How from Columns separated dataset, to a comma separated one? 【发布时间】:2019-06-27 04:28:10 【问题描述】:

我需要将我的数据集的列分隔成逗号分隔我如何做到这一点?我需要一个如下所示的数据集:

@VBasic2008 这是我在工作表中间得到的:第一行和第二行是我对你的函数 CONCAT 的尝试。虽然我需要像图像最右边的部分......像6,40,45,52。并非所有值都合并了..

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

这是最终的输出

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

【问题讨论】:

您的意思是您有一个 Excel 电子表格,其中您的数据被分隔成列,并且您想将其转换为逗号分隔值?如果这是您的意图,您可以将其保存为 .csv 文件格式。您可以通过转到文件 --> 另存为 --> 选择文件格式为任何 CSV 来执行此操作,即 CSV UTF-8 (.csv)。那么你应该得到你想要的。 我试过这个,设置 csv 用逗号文件分隔,但是当我打开文件时它看起来一样.. Excel 尝试猜测数据结构并通过文件扩展名将逗号分隔的值转换为列。如果您不希望将数据转换为列,您只需将文件扩展名从 .csv 重命名为 .txt 即可。然后用 Excel 打开磁贴,你肯定会得到你想要的。 你用的是什么版本的excel? Textjoin 这样做 我有 2016 年的 【参考方案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

【讨论】:

【参考方案2】:

我已经就您的问题写了几篇 cmet,这可能很难理解。所以我决定做一个完整的解决方案,这实际上是一个技巧。

请注意,如果文件以.csv(扩展名)为后缀,Microsoft Excel 会尝试猜测文件内容的数据结构。因此,每当您打开 .csv 文件时,您都会在列中获取数据,而不是 a single columnscomma separated values

为了达到您想要的效果,首先,将您的数据保存为逗号分隔值 (.csv) 文件格式。

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

注意:如果您没有看到文件扩展名,如果您使用的是 Microsoft Windows,请关注此link。

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

你去那里得到你想要的。

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

我需要一个看起来像我发布的图片中的文件,我拥有的文件有列而不是逗号【参考方案4】:

文件的扩展名是什么? .xls、.txt 还是 .csv?

如果是 .xls 文件,您只需在 Excel 中打开文件,然后使用文件->另存为菜单,然后从文件类型下拉菜单中选择逗号分隔。

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

如果有任何其他分隔符,如冒号 : 或其他,并且想用逗号替换,那么只需使用记事本中的查找和替换选项。

【讨论】:

我的原始文件是一个 .xlsx 我将​​它转换为一个 .csv 文件,但我总是在列中可视化我的数据集。我怎样才能做到这一点?谢谢【参考方案5】:

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,",")

【讨论】:

我试过这个,但它给了我合并列的所有值,而我需要有相同的列结构但用逗号分隔,所以我可以使用这个像 R 这样的程序中的数据集。我更新了我的帖子,让你看看我使用 CONCAT 有什么

以上是关于如何从列分隔的数据集到逗号分隔的数据集?的主要内容,如果未能解决你的问题,请参考以下文章

LIBRECALC 将单元格内容分隔到新行(逗号分隔),但复制其他内容

处理依赖于 Spark 数据集中另一列的逗号分隔列

Pyspark处理数据中带有列分隔符的数据集

SAS:如何创建(日期变量)数据集

Microsoft Access SQL 逗号分隔值

如何:在 MySQL 工作台中将记录集导出为分号分隔的 csv 文件?