Как я могу "выровнять правильно" результаты функции Excel "текст в Столбцы"?

если я использую функцию Text to Columns для следующих данных, используя"; " в качестве разделителя:

фу;бар;qux;баз;тосты;


quux;джем;фасоль;

я закончу с результатами "выравнивание по левому краю" в результирующей сетке ячеек:

 |foo   |bar   |qux   |baz   |toast |
 |quux  |jam   |beans |      |      |

однако, я хочу, чтобы они были "по правому краю":

 |foo   |bar   |qux   |baz   |toast |
 |      |      |quux  |jam   |beans |

как я могу это сделать?

Примечание: я знаю, что "по правому краю" возможно, это неправильный термин, подразумевающий

|   foo|   bar|   qux|   baz| toast| 
|  quux|   jam| beans|      |      |

но это не то, что я ищу. Так что, если кто-то может предложить лучший термин для того, что я описываю, пожалуйста, сделайте это.

дополнение: в качестве альтернативного подхода, если кто-нибудь знает способ использовать Excel для перестановки ячеек таким образом, что

 |a   |b   |c   |d   |    |    |    |    |    |
 |n   |m   |o   |p   |q   |    |    |    |    |
 |e   |f   |g   |h   |i   |j   |k   |l   |    |
 |n   |m   |o   |p   |q   |    |    |    |    |
 |x   |    |    |    |    |    |    |    |    |

становится

 |    |    |    |    |    |a   |b   |c   |d   |
 |    |    |    |    |n   |m   |o   |p   |q   |
 |    |e   |f   |g   |h   |i   |j   |k   |l   |
 |    |    |    |    |n   |m   |o   |p   |q   |
 |    |    |    |    |    |    |    |    |x   |

тогда это тоже сработает.

11
задан hBy2Py
28.01.2023 23:07 Количество просмотров материала 3063
Распечатать страницу

3 ответа

следующие формулы позволят быстро преобразовать ваши данные в форму, которую Text-to-Columns будет легко разобрать по правому краю, как вы описываете:

Excel snip

D5 формула (добавляет точку с запятой, если отсутствует):

=IF(RIGHT(B5,1)<>";",B5&";",B5)

G5 формула (добавляет необходимое количество точек с запятой):

=REPT(";",5-(LEN(D5)-LEN(SUBSTITUTE(D5,";",""))))&D5

копирование результатов с последующей вставкой специальных значений должно позволить себе сырье, подходящее для текста в Столбцы преобразование.

решение зависит от фиксированного максимального количества столбцов; здесь пять. Формула G5 можно обобщить, добавив "количество столбцов для генерации" ячейки в другом месте листа и сославшись на эту новую ячейку вместо жестко закодированной 5 значение.

кроме того, если вы гарантируете, что данные всегда будут иметь конечную точку с запятой, промежуточный шаг D5:D7 это излишний.

изменить: за наблюдение Some_Guy в комментариях, метод также будет работать, если все строки построены в отсутствие конечная точка с запятой.

4
отвечен hBy2Py 2023-01-30 06:55

Как указано, нет, это не стандартная функция text to columns или есть неотъемлемый способ сделать это в excel, о котором я знаю. Однако этот VBA сделает это за вас ( при условии, что между заполненными ячейками нет пробелов) -

Sub test()
Dim lrow As Integer
lrow = Cells(Rows.Count, "A").End(xlUp).Row

Dim lcol As Integer
lcol = Cells("1", Columns.Count).End(xlToLeft).Column

Dim lfcol As Integer
Dim dif As Integer
For i = 1 To lrow
    lfcol = Cells(i, Columns.Count).End(xlToLeft).Column
    dif = lcol - lfcol
    For j = lfcol To 1 Step -1
        If dif = 0 Then Exit For
        If Not Cells(i, j) Is Nothing Then
            Cells(i, j + dif) = Cells(i, j)
            Cells(i, j) = vbNullString
        End If
    Next
Next
End Sub
2
отвечен Raystafarian 2023-01-30 09:12

вот еще одна процедура VBA, чтобы сделать это.  Текст в Столбцы, затем выберите прямоугольный диапазон, в который вы помещаете данные (т. е. столбцы A - (max fields) × rows) и запустите этот макрос.  См.как добавить VBA в MS Office? для учебных материалов.

Sub Copy_Right()
    For Each rr In Selection.Rows
        For cn = Selection.Columns.Count To 1 Step -1
            If Len(rr.Cells(1, cn)) > 0 Then Exit For
        Next cn
        ' cn is now the (relative) column number of the last cell in this row
        ' that contains (non-blank) data.
        my_offset = Selection.Columns.Count - cn
        ' my_offset is how many columns to the right we need to move.
        ' If my_offset = 0, the row is full of data (or, at least,
        ' the last column contains data; there may be blank cells
        ' to its left), so there’s nowhere to move it.
        ' If cn = 0, the row is empty, so there’s nothing to move.
        If cn = 0 Or my_offset = 0 Then
            ' Nothing to do.
        Else
            For cn = Selection.Columns.Count To 1 Step -1
                If cn > my_offset Then
                    ' Copy data to the right.
                    rr.Cells(1, cn) = rr.Cells(1, cn - my_offset)
                Else
                    ' Set the cells on the left to blank.
                    rr.Cells(1, cn) = ""
                End If
            Next cn
        End If
    Next rr
End Sub

этой будет обрабатывать пустые ячейки (например,the;quick;;fox;) правильно.  В противном случае различия между этим ответом и другим просто произвольные личные предпочтения, и другие кто-то может быть выше меня в том, чего я не понимаю.

2
отвечен Scott 2023-01-30 11:29

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

format
import
microsoft-excel
microsoft-excel-2010
vba
Вверх