В Excel, как сделать объединение отображения между двумя столбцами - PullRequest
0 голосов
/ 27 апреля 2020

Я не знаю термина, описывающего ситуацию, поэтому просто составьте его

, например, например, есть два столбца

  Col A      Col B
----------------------
| date 1 | 2020-02-03|
| date 2 | 2020-03-12|
| date 3 | 2020-04-25|
======================

Я хотел бы иметь функцию для генерировать следующие результаты

      Col C
----------------------
| date 1 = 2020-02-03|
| date 1 = 2020-03-12|
| date 1 = 2020-04-25|
| date 2 = 2020-02-03|
| date 2 = 2020-03-12|
| date 2 = 2020-04-25|
| date 3 = 2020-02-03|
| date 3 = 2020-03-12|
| date 3 = 2020-04-25|
======================

это как объединенное объединение каждой строки из обоих значений столбца, но позволяет добавить дополнительную строку (например, =).

1 Ответ

1 голос
/ 28 апреля 2020

Разместите вашу первую таблицу следующим образом, т.е. добавьте заголовки столбцов. (это мой существующий код, для которого требуется заголовок столбца. Слишком ленив для его изменения, поэтому, пожалуйста, следуйте)

enter image description here

Измените значение paraVal ниже Sub будет диапазон вашей первой таблицы (включая заголовки) и запустите ее. Комбинация будет сгенерирована ниже вашей первой таблицы (поэтому убедитесь, что места достаточно для результата). Объедините полученные столбцы по-своему (например, TEXTJOIN, CONCAT ...)


Sub CombinationTable()

    Dim paraVal As Range
    Dim paraInfo() As Long
    Dim rowTtl As Long
    Dim colIdx As Long
    Dim repIdx As Long
    Dim colIdxG As Long
    Dim rowIdxG As Long
    Dim rowStartG As Long
    Dim rowEndG As Long
    Dim colCell1 As Range
    Dim colCellN As Range
    Dim repeat As Range

    Set paraVal = Range("F4", "G7")


    On Error GoTo 0
    With paraVal

        rowTtl = 1
        ReDim paraInfo(1 To .Columns.Count)
        For colIdx = 1 To .Columns.Count
            If IsEmpty(.Cells(.Rows.Count - 1, colIdx)) Then  ' .rows.count-1 = 1st value
                paraInfo(colIdx) = 0
            Else
                Set colCellN = .Cells(.Rows.Count, colIdx)
                Set colCell1 = colCellN.End(xlUp)
                paraInfo(colIdx) = colCellN.Row - colCell1.Row  ' no +1 bcoz last row is header, not value
                rowTtl = rowTtl * paraInfo(colIdx)
            End If
        Next colIdx

        rowStartG = .Row + .Rows.Count
        rowEndG = rowStartG + rowTtl - 1

        For colIdx = 1 To .Columns.Count
            If paraInfo(colIdx) > 0 Then
                rowTtl = rowTtl / paraInfo(colIdx)
                rowIdxG = rowStartG
                colIdxG = .Columns(colIdx).Column
                Set colCellN = .Columns(colIdx).Cells(.Columns(colIdx).Rows.Count).Offset(-paraInfo(colIdx)).Resize(paraInfo(colIdx))
                For Each colCell1 In colCellN.Cells
                    ActiveSheet.Range(ActiveSheet.Cells(rowIdxG, colIdxG), ActiveSheet.Cells(rowIdxG + rowTtl - 1, colIdxG)).Value = colCell1.Value
                    rowIdxG = rowIdxG + rowTtl
                Next colCell1
                Set repeat = ActiveSheet.Range(ActiveSheet.Cells(rowStartG, colIdxG), ActiveSheet.Cells(rowIdxG - 1, colIdxG))

                If colIdx > 1 Then
                    repeat.Copy Destination:=ActiveSheet.Range(ActiveSheet.Cells(rowIdxG, colIdxG), ActiveSheet.Cells(rowEndG, colIdxG))
                End If
            End If
        Next colIdx

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