Товарищи, помогите пож решить проблему, думаю без макроса тут не обойтись В примере на вкладке "Дано" есть список адресов, как сделать так чтоб этот список по достижении 55 символов переносил не умещающееся слово на следующую строку как показано на вкладке "Результат"?
Товарищи, помогите пож решить проблему, думаю без макроса тут не обойтись В примере на вкладке "Дано" есть список адресов, как сделать так чтоб этот список по достижении 55 символов переносил не умещающееся слово на следующую строку как показано на вкладке "Результат"?regkmf
Sub test1() Dim i As Integer Dim Sht As String Y = 2 i = 2 ASD = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row Set Dano = ThisWorkbook.Sheets(1) With ThisWorkbook.Sheets(2) .[A1].CurrentRegion.Offset(1).ClearContents While Y <= ASD
For A = 1 To Len(Dano.Range("a" & Y).Offset(, 2)) Step 55
B = Mid(Dano.Range("a" & Y).Offset(, 2), A, 55)
.Range("c" & i).Value = B i = i + 1 Next A Else
.Range("c" & i).Value = Dano.Range("a" & Y).Offset(, 2) i = i + 1 End If End With Y = Y + 1 Loop End Sub
[/vba] [p.s.] немного облагородил свой сапожок;)
Здравствуйте! Как-то так))
[vba]
Код
Sub test1() Dim i As Integer Dim Sht As String Y = 2 i = 2 ASD = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row Set Dano = ThisWorkbook.Sheets(1) With ThisWorkbook.Sheets(2) .[A1].CurrentRegion.Offset(1).ClearContents While Y <= ASD
Sub splitStr() Application.ScreenUpdating = False Dim lr&, nRow&, strFull$ Set sh1 = ThisWorkbook.Sheets("Дано") lr = sh1.Cells(Rows.Count, "c").End(xlUp).Row: nRow = 2 Dim part As String * 55 With ThisWorkbook.Sheets("Результат") .[A1].CurrentRegion.Offset(1).ClearContents For i = 2 To lr .Cells(nRow, 1) = sh1.Cells(i, 1): .Cells(nRow, 2) = sh1.Cells(i, 2) strFull = sh1.Cells(i, 3) Do part = Trim(strFull) .Cells(nRow, 3) = part strFull = Replace(strFull, Trim(part), "") nRow = nRow + 1 Loop While (Trim(strFull) <> "") Next i End With End Sub
[/vba]
а мне вот так придумалось ) [vba]
Код
Sub splitStr() Application.ScreenUpdating = False Dim lr&, nRow&, strFull$ Set sh1 = ThisWorkbook.Sheets("Дано") lr = sh1.Cells(Rows.Count, "c").End(xlUp).Row: nRow = 2 Dim part As String * 55 With ThisWorkbook.Sheets("Результат") .[A1].CurrentRegion.Offset(1).ClearContents For i = 2 To lr .Cells(nRow, 1) = sh1.Cells(i, 1): .Cells(nRow, 2) = sh1.Cells(i, 2) strFull = sh1.Cells(i, 3) Do part = Trim(strFull) .Cells(nRow, 3) = part strFull = Replace(strFull, Trim(part), "") nRow = nRow + 1 Loop While (Trim(strFull) <> "") Next i End With End Sub
Ребят, а можно сделать так чтобы перенос на другую строку был по двум условиям: 1 по достижении 55 символов (это уже работает) 2. переносились бы целые слова. Например сейчас макрос работает так: Запись 9. Республика Кабардино-Балкария, г. Нальчик, Боль ничный городок "Дубки", противотуберкулезный диспансер
А желательно чтобы слова не рвались, а переносились целиком например так: Запись 9. Республика Кабардино-Балкария, г. Нальчик, Больничный городок "Дубки", противотуберкулезный диспансер
Ребят, а можно сделать так чтобы перенос на другую строку был по двум условиям: 1 по достижении 55 символов (это уже работает) 2. переносились бы целые слова. Например сейчас макрос работает так: Запись 9. Республика Кабардино-Балкария, г. Нальчик, Боль ничный городок "Дубки", противотуберкулезный диспансер
А желательно чтобы слова не рвались, а переносились целиком например так: Запись 9. Республика Кабардино-Балкария, г. Нальчик, Больничный городок "Дубки", противотуберкулезный диспансерregkmf
Сообщение отредактировал regkmf - Воскресенье, 03.04.2016, 00:01
Application.ScreenUpdating = False Dim lr&, nRow&, strFull$ Set sh1 = ThisWorkbook.Sheets("Дано") lr = sh1.Cells(Rows.Count, "c").End(xlUp).Row: nRow = 2 Dim part As String * 55 With ThisWorkbook.Sheets("Результат") .[A1].CurrentRegion.Offset(1).ClearContents For i = 2 To lr .Cells(nRow, 1) = sh1.Cells(i, 1): .Cells(nRow, 2) = sh1.Cells(i, 2) strFull = sh1.Cells(i, 3) Do part = strFull If Right(part, 1) <> " " And Right(part, 1) <> "," And Right(part, 1) <> "." And Right(part, 1) <> "-" Then j = 0 Do j = InStr(j + 1, part, " ", vbTextCompare) Loop While InStr(j + 1, part, " ", vbTextCompare) <> 0 part = Left(part, j) End If part = Trim(part) .Cells(nRow, 3) = part strFull = Replace(strFull, Trim(part), "") nRow = nRow + 1 Loop While (Trim(strFull) <> "") Next i End With
End Sub
[/vba] не проверял, но должно работать... Проверил, работает
Можно попробовать так: [vba]
Код
Sub splitStr()
Application.ScreenUpdating = False Dim lr&, nRow&, strFull$ Set sh1 = ThisWorkbook.Sheets("Дано") lr = sh1.Cells(Rows.Count, "c").End(xlUp).Row: nRow = 2 Dim part As String * 55 With ThisWorkbook.Sheets("Результат") .[A1].CurrentRegion.Offset(1).ClearContents For i = 2 To lr .Cells(nRow, 1) = sh1.Cells(i, 1): .Cells(nRow, 2) = sh1.Cells(i, 2) strFull = sh1.Cells(i, 3) Do part = strFull If Right(part, 1) <> " " And Right(part, 1) <> "," And Right(part, 1) <> "." And Right(part, 1) <> "-" Then j = 0 Do j = InStr(j + 1, part, " ", vbTextCompare) Loop While InStr(j + 1, part, " ", vbTextCompare) <> 0 part = Left(part, j) End If part = Trim(part) .Cells(nRow, 3) = part strFull = Replace(strFull, Trim(part), "") nRow = nRow + 1 Loop While (Trim(strFull) <> "") Next i End With
End Sub
[/vba] не проверял, но должно работать... Проверил, работаетStoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Воскресенье, 03.04.2016, 12:17