【问题标题】: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 年的

标签: excel dataset


【解决方案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 有什么
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多