Как получить первые две строки текста из перенесенной ячейки? - PullRequest
7 голосов
/ 27 марта 2012

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

wrapedtext1

wrappedtext2

wrappedtext3

wrappedtext4

Мне нужны только первые две строки как wrapedtext1wrappedtext2. Возможно ли это?

Ответы [ 4 ]

5 голосов
/ 28 марта 2012

Мне нужно только получить первые две строки как wrapedtext1wrappedtext2. Возможно ли это?

Да, это возможно возможно, но есть НЕТ ПРОСТОГО способа достичь этого. Есть много факторов, которые вы должны учитывать.

1) Высота строки в пикселях

2) Тип и размер шрифта

3) Межстрочный интервал

4) Объединена ли ячейка?

5) Является ли ячейка в состоянии автоподбора

6) Весь текст в обычном режиме или содержит жирный, курсив, подчеркивание и т. Д. И т. Д.

Рассмотрим этот снимок

enter image description here

Например, высота строки в пикселях может быть получена из

Debug.Print Range("A1").Height * (24 / 18)

Размер шрифта в приведенном выше случае может быть достигнут из этого

Debug.Print Range("A1").Font.Size

Но проблема в том, что произойдет в приведенном ниже сценарии?

enter image description here

По-моему, было бы слишком сложно добиться того, чего вы хотите. Лучше всего было бы использовать ALT + Enter для вставки разрывов строк, а затем извлекать текст.

Followup

Строки вводятся в обернутую ячейку через код vba. Итак, как вставить данные, нажав Alt + Enter? - 1355 4 часа назад

В таком сценарии вы можете использовать аналогичный подход.

Sub Sample()
    Dim strg As String

    strg = "This is a sample" & vbCrLf & _
           "sentence which is" & vbCrLf & _
           "in Cell A1 and the" & vbCrLf & _
           "text is separated" & vbCrLf & _
           "with line breaks"

    With Range("A1")
        .Columns(1).ColumnWidth = 16.86
        .Font.Name = "Calibri"
        .Font.Size = 11
        .Value = strg
    End With
End Sub

ПРИМЕЧАНИЕ : Для вышеприведенного вам нужно будет записать макрос и посмотреть, какой шрифт, размер шрифта и ширина столбца могут принимать определенное форматирование. Опять же, вам придется учитывать тот факт, что приведенный выше пример относится к неформатированной ячейке на новом листе. Если вы пишете в объединенную ячейку или ячейку, отформатированную отдельно, вам придется соответствующим образом изменить вышеуказанный код, чего легко достичь, записав макрос. Я также предполагаю, что уровень ZOOM установлен на 100%

ИЛЛЮСТРАЦИИ

enter image description here

НТН

Sid

1 голос
/ 11 марта 2014

Используйте функцию НАЙТИ:

= ЛЕВЫЙ (В2, (FIND (CHAR (10), В2))) * * 1003

  • FIND ищет символ перевода строки (CHAR (10)
  • LEFT дает вам первые X символов в B2, вплоть до числа, где он находит разрыв строки
0 голосов
/ 13 ноября 2013

Вы можете сделать несколько сложных формул в Excel, чтобы достичь этого без кода VBA.

Предполагается, что многострочный текст в A1. Если вы просто хотите первые две строки, вы можете сделать это:

Получить первую строку:

=MID(A1,1,IF(2=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1,LEN(A1),SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",2))))

Получить вторую строку:

=MID(A1,SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",1))+1,IF(2=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1,LEN(A1),SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",2)))-SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",1)))

Тогда просто используйте CONCATENATE(), чтобы объединить эти два.

Взгляните на этот сайт, который позволяет вам указать, какую строку получить: http://www.excelblog.ca/separating-lines-from-multi-line-excel-cell/

0 голосов
/ 27 марта 2012

Привет, хорошо, есть два способа сделать это с кодом VBA.

Первый способ.Если строки разделены пробелом

Dim avarSplit As Variant

'If separated with a space
avarSplit = Split(Worksheets(2).Range("A7").Value, " ")

вторым способом, если они разделены разрывом.

Dim avarSplit2 As Variant

'separated with a break
avarSplit2 = Split(Worksheets(2).Range("A8").Value, Chr(10))

Затем вы получите массив, в котором все строки разделены, и вы можетепросто прочитайте их ...

Мусли

...