Как от столбцов отделяется набор данных, до запятой отделяется один? - PullRequest
0 голосов
/ 03 февраля 2019

Мне нужно разделить столбцы моего набора данных на запятую, как это сделать?Мне нужен набор данных, который выглядит следующим образом:

enter image description here

@ VBasic2008 вот что я получаю в середине листа: первый и второй рядмои попытки с вашей функцией CONCAT.В то время как мне нужно что-то вроде самой правой части изображения .... как 6,40,45,52.Не все значения объединены ..

enter image description here

Так что я сделал это с помощью функции CONCAT, но мне пришлось вручную вычислять это для каждого столбца, я показываю, как дляте, которые в конечном итоге нуждаются в помощи (обратите внимание, я использовал; вместо того, потому что мой Excel, кажется, не работает,)

enter image description here

и это, наконец, окончательныйoutput

enter image description here

Хорошо, но что, если у меня есть набор данных из 1000 столбцов?Этот процесс должен быть намного быстрее, чем этот.Это не оптимизировано.

Ответы [ 5 ]

0 голосов
/ 03 февраля 2019

Я написал несколько комментариев к вашему вопросу, которые могут быть трудными для подражания.Поэтому я решил сделать полное решение, которое на самом деле хитрость.

Обратите внимание, что Microsoft Excel пытается угадать структуру данных содержимого файла, если к файлу добавляется суффикс .csv (расширение).По этой причине всякий раз, когда вы открываете файл .csv, вы получаете данные в столбцах вместо a single columns с comma separated values.

. Чтобы достичь желаемого, сначала сохраните данные, как вФормат файла значений, разделенных запятыми (.csv).

Затем измените расширение вашего файла с .csv на, например .txt (текстовый файл), например: если ваше имя файла «data.csv»измените его на «data.txt».Пожалуйста, убедитесь, что вы видите расширение файла как csv, прежде чем изменить его, потому что в некоторых случаях вы не видите расширение файла;поэтому, когда вы переименовываете его, он остается csv файлом.

Примечание. Если вы не видите расширение файла, если вы работаете в Microsoft Windows, перейдите по этой ссылке . * 1020.*

После того, как вы переименуете файл в формат txt, вы можете открыть его в приложении Excel, перейдя на File -> Open ->, затем просмотрите файл txt.

Итак, вы получите то, что вам нужноодин.

Вам не нужно кодировать или использовать какие-либо функции для достижения этой цели, хотя вы можете сделать это, если хотите, поскольку это также хорошее решение.

0 голосов
/ 03 февраля 2019

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,",")
0 голосов
/ 03 февраля 2019

Какое расширение файла?.xls, .txt или .csv?

Если он находится в формате .xls, вы можете просто открыть файл в Excel, а затем использовать меню «Файл» -> «Сохранить как», а затем выбрать «Запятая, отделенная от типа файла».раскрывающийся список.

Если файл имеет расширение .csv и вы пытаетесь открыть его в Excel, то вы увидите столбцы, даже если в файле есть запятые.Чтобы убедиться, что если файл разделен запятыми, просто откройте блокнотом или другими текстовыми редакторами, чтобы увидеть значения, разделенные запятыми.

Если есть какой-либо другой разделитель, например двоеточие: или другой, и хотите заменить его запятой, простоиспользуйте функцию поиска и замены в блокноте.

0 голосов
/ 03 февраля 2019

Если вы ищете решение формулы

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

0 голосов
/ 03 февраля 2019

Это уже разделено запятыми, поэтому вам просто нужно переименовать его в файл .csv.

в проводнике Windows, перейти на ленту и перейти на вкладку «Вид» и включить «Файл»Расширения имени ».Перейдите к своему файлу, щелкните правой кнопкой мыши и переименуйте его в THEFILENAME.csv вместо THEFILENAME.xlsx

Теперь, когда вы открываете его в Excel, он должен иметь сетку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...