Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Деление длинного текста на 4 строки или более - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Деление длинного текста на 4 строки или более (Макросы/Sub)
Деление длинного текста на 4 строки или более
Webbear Дата: Пятница, 30.09.2016, 15:00 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте, форумчане.
Столкнулся с очередной проблемой:
Имею строку А1 c очень длинным текстом на одном листе и 4 строки А5 (~40 символов); В1(~85 символов); С1(~85 символов); D1(~85 символов)
Стоит задача перенести текст с первого листа во второй по указанному условию.
С тремя строками получается, с четырьмя никак. Может кто подскажет как должен выглядеть код.
 
Ответить
СообщениеЗдравствуйте, форумчане.
Столкнулся с очередной проблемой:
Имею строку А1 c очень длинным текстом на одном листе и 4 строки А5 (~40 символов); В1(~85 символов); С1(~85 символов); D1(~85 символов)
Стоит задача перенести текст с первого листа во второй по указанному условию.
С тремя строками получается, с четырьмя никак. Может кто подскажет как должен выглядеть код.

Автор - Webbear
Дата добавления - 30.09.2016 в 15:00
krosav4ig Дата: Пятница, 30.09.2016, 15:16 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1356
Репутация: 547 ±
Замечаний: 0% ±

Excel 2007, 2013
Webbear, Добрый день.файл в студию deal


(_)Õvõ(_)

Сообщение отредактировал krosav4ig - Пятница, 30.09.2016, 15:17
 
Ответить
СообщениеWebbear, Добрый день.файл в студию deal

Автор - krosav4ig
Дата добавления - 30.09.2016 в 15:16
Webbear Дата: Пятница, 30.09.2016, 15:42 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
Упс... :)
К сообщению приложен файл: ___--.xlsm(95Kb)
 
Ответить
СообщениеУпс... :)

Автор - Webbear
Дата добавления - 30.09.2016 в 15:42
Webbear Дата: Пятница, 30.09.2016, 15:45 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
A6 из "Основных" надо раскидать на N24; A26; A28;A30 в "Шаблон"
 
Ответить
СообщениеA6 из "Основных" надо раскидать на N24; A26; A28;A30 в "Шаблон"

Автор - Webbear
Дата добавления - 30.09.2016 в 15:45
nilem Дата: Пятница, 30.09.2016, 16:37 | Сообщение № 5
Группа: Авторы
Ранг: Ветеран
Сообщений: 1057
Репутация: 400 ±
Замечаний: 0% ±

Excel 2013
Webbear, привет
что если вот так вот, например:
[vba]
Код
Sub ttt()
Dim s$, sp, i&, k&, tmpS$, arr
s = Sheets("Основные параметры").Range("A6").Value
'N24 - 56 символов, A26 - 97 символов и т.д.
arr = Array(56, "N24", 97, "A26", 97, "A28", 97, "A30")
sp = Split(s)
For i = 0 To UBound(sp)
    tmpS = tmpS & " " & sp(i)
    If Len(tmpS) > arr(k) Then
        Sheets("ШАБЛОН").Range(arr(k + 1)).Value = Mid(tmpS, 1, Len(tmpS) - Len(sp(i)) - 1)
        tmpS = sp(i)
        k = k + 2
        If k > 6 Then MsgBox "Не вмещаемся!", 48: Exit Sub
    End If
Next i
Sheets("ШАБЛОН").Range(arr(k + 1)).Value = tmpS
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеWebbear, привет
что если вот так вот, например:
[vba]
Код
Sub ttt()
Dim s$, sp, i&, k&, tmpS$, arr
s = Sheets("Основные параметры").Range("A6").Value
'N24 - 56 символов, A26 - 97 символов и т.д.
arr = Array(56, "N24", 97, "A26", 97, "A28", 97, "A30")
sp = Split(s)
For i = 0 To UBound(sp)
    tmpS = tmpS & " " & sp(i)
    If Len(tmpS) > arr(k) Then
        Sheets("ШАБЛОН").Range(arr(k + 1)).Value = Mid(tmpS, 1, Len(tmpS) - Len(sp(i)) - 1)
        tmpS = sp(i)
        k = k + 2
        If k > 6 Then MsgBox "Не вмещаемся!", 48: Exit Sub
    End If
Next i
Sheets("ШАБЛОН").Range(arr(k + 1)).Value = tmpS
End Sub
[/vba]

Автор - nilem
Дата добавления - 30.09.2016 в 16:37
Webbear Дата: Пятница, 30.09.2016, 17:26 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
nilem, есть предложения как встроить ваш вариант в код файла, не могу сообразить, с какой стороны подступиться?
И если можно, вкратце, опишите последовательность действий в вашем варианте.
Я просто пытаюсь хоть немного разобраться в VBA, а начал только 3 дня назад :)
 
Ответить
Сообщение nilem, есть предложения как встроить ваш вариант в код файла, не могу сообразить, с какой стороны подступиться?
И если можно, вкратце, опишите последовательность действий в вашем варианте.
Я просто пытаюсь хоть немного разобраться в VBA, а начал только 3 дня назад :)

Автор - Webbear
Дата добавления - 30.09.2016 в 17:26
Webbear Дата: Пятница, 30.09.2016, 17:54 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
nilem, четвертую строчку вписал, в третьей 7 знаков обрезалось и никуда не вошли


Сообщение отредактировал Webbear - Пятница, 30.09.2016, 17:56
 
Ответить
Сообщение nilem, четвертую строчку вписал, в третьей 7 знаков обрезалось и никуда не вошли

Автор - Webbear
Дата добавления - 30.09.2016 в 17:54
krosav4ig Дата: Пятница, 30.09.2016, 17:56 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1356
Репутация: 547 ±
Замечаний: 0% ±

Excel 2007, 2013
можно как-то так
[vba]
Код
Sub SplitN(str$, n As Variant, ByRef rng As Range)
    Dim i%, j%, tmp$
    For i = 0 To UBound(n)
        tmp$ = Mid(str, j + 1, InStrRev(Mid(str & " ", j + 1, n(i)), " "))
        j = j + Len(tmp)
        rng.Areas(i + 1) = Application.Trim(tmp)
    Next
End Sub
[/vba]

[vba]
Код
Call SplitN(CStr(ArrДоп(5, 1)), Array(40, 85, 85, 85), Sh_Шаблон.[N24,A26,A28,A30])
[/vba]


(_)Õvõ(_)
 
Ответить
Сообщениеможно как-то так
[vba]
Код
Sub SplitN(str$, n As Variant, ByRef rng As Range)
    Dim i%, j%, tmp$
    For i = 0 To UBound(n)
        tmp$ = Mid(str, j + 1, InStrRev(Mid(str & " ", j + 1, n(i)), " "))
        j = j + Len(tmp)
        rng.Areas(i + 1) = Application.Trim(tmp)
    Next
End Sub
[/vba]

[vba]
Код
Call SplitN(CStr(ArrДоп(5, 1)), Array(40, 85, 85, 85), Sh_Шаблон.[N24,A26,A28,A30])
[/vba]

Автор - krosav4ig
Дата добавления - 30.09.2016 в 17:56
nilem Дата: Пятница, 30.09.2016, 18:18 | Сообщение № 9
Группа: Авторы
Ранг: Ветеран
Сообщений: 1057
Репутация: 400 ±
Замечаний: 0% ±

Excel 2013
четвертую строчку вписал, в третьей 7 знаков обрезалось и никуда не вошли

не может быть. Покажете ошибку в файле?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
четвертую строчку вписал, в третьей 7 знаков обрезалось и никуда не вошли

не может быть. Покажете ошибку в файле?

Автор - nilem
Дата добавления - 30.09.2016 в 18:18
Webbear Дата: Пятница, 30.09.2016, 18:20 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
krosav4ig, Результат - заполнены только 3 строки
 
Ответить
Сообщение krosav4ig, Результат - заполнены только 3 строки

Автор - Webbear
Дата добавления - 30.09.2016 в 18:20
Webbear Дата: Пятница, 30.09.2016, 18:21 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
nilem, Вот такой результат.
И вообще мне кажется что это глюки...
К сообщению приложен файл: 4255757.jpg(63Kb)


Сообщение отредактировал Webbear - Пятница, 30.09.2016, 18:28
 
Ответить
Сообщение nilem, Вот такой результат.
И вообще мне кажется что это глюки...

Автор - Webbear
Дата добавления - 30.09.2016 в 18:21
nilem Дата: Пятница, 30.09.2016, 18:31 | Сообщение № 12
Группа: Авторы
Ранг: Ветеран
Сообщений: 1057
Репутация: 400 ±
Замечаний: 0% ±

Excel 2013
У вас там есть процедура Автозаполнение (разбираться долго). Вставьте предпоследней строкой Call ttt, вот так:
[vba]
Код
.....  
    Call ttt
    
    Application.ScreenUpdating = True 'включаем обновление экрана
End Sub
[/vba]
А в стандартный модуль вставьте такую процедуру:
[vba]
Код
Sub ttt()
Dim s$, sp, i&, k&, tmpS$, arr
s = Sheets("Основные параметры").Range("A6").Value
'N24 - 56 символов, A26 - 97 символов и т.д.
arr = Array(56, "N24", 97, "A26", 97, "A28", 97, "A30")
sp = Split(s)
With ActiveSheet
    .Range("N24:AD24,A26:AD26,A28:AD28,A30:AD30").ClearContents
    For i = 0 To UBound(sp)
        tmpS = tmpS & " " & sp(i)
        If Len(tmpS) > arr(k) Then
            .Range(arr(k + 1)).Value = Mid(tmpS, 1, Len(tmpS) - Len(sp(i)) - 1)
            tmpS = sp(i)
            k = k + 2
            If k > 6 Then MsgBox "Не вмещаемся!", 48: Exit Sub
        End If
    Next i
    .Range(arr(k + 1)).Value = tmpS
End With
End Sub
[/vba]
У меня так работает


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеУ вас там есть процедура Автозаполнение (разбираться долго). Вставьте предпоследней строкой Call ttt, вот так:
[vba]
Код
.....  
    Call ttt
    
    Application.ScreenUpdating = True 'включаем обновление экрана
End Sub
[/vba]
А в стандартный модуль вставьте такую процедуру:
[vba]
Код
Sub ttt()
Dim s$, sp, i&, k&, tmpS$, arr
s = Sheets("Основные параметры").Range("A6").Value
'N24 - 56 символов, A26 - 97 символов и т.д.
arr = Array(56, "N24", 97, "A26", 97, "A28", 97, "A30")
sp = Split(s)
With ActiveSheet
    .Range("N24:AD24,A26:AD26,A28:AD28,A30:AD30").ClearContents
    For i = 0 To UBound(sp)
        tmpS = tmpS & " " & sp(i)
        If Len(tmpS) > arr(k) Then
            .Range(arr(k + 1)).Value = Mid(tmpS, 1, Len(tmpS) - Len(sp(i)) - 1)
            tmpS = sp(i)
            k = k + 2
            If k > 6 Then MsgBox "Не вмещаемся!", 48: Exit Sub
        End If
    Next i
    .Range(arr(k + 1)).Value = tmpS
End With
End Sub
[/vba]
У меня так работает

Автор - nilem
Дата добавления - 30.09.2016 в 18:31
Webbear Дата: Пятница, 30.09.2016, 18:40 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
nilem, Если пытаюсь вписать код, тогда так выходит
К сообщению приложен файл: 6296243.jpg(56Kb)
 
Ответить
Сообщение nilem, Если пытаюсь вписать код, тогда так выходит

Автор - Webbear
Дата добавления - 30.09.2016 в 18:40
Webbear Дата: Пятница, 30.09.2016, 18:47 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
nilem, не могли бы вы вставить отрезок чуть побольше, как вы вписали код.
Может я просто кривыми руками не туда тыкаю <_<
 
Ответить
Сообщениеnilem, не могли бы вы вставить отрезок чуть побольше, как вы вписали код.
Может я просто кривыми руками не туда тыкаю <_<

Автор - Webbear
Дата добавления - 30.09.2016 в 18:47
Webbear Дата: Пятница, 30.09.2016, 19:24 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
nilem, Если так, то работает
[vba]
Код
arr = Array(56, "N24", 90, "A26", 90, "A28", 97, "A30")
[/vba]
а с вашими цифрами ну никак... <_<
Главное результат получен. Спасибо!


Сообщение отредактировал Webbear - Пятница, 30.09.2016, 19:25
 
Ответить
Сообщение nilem, Если так, то работает
[vba]
Код
arr = Array(56, "N24", 90, "A26", 90, "A28", 97, "A30")
[/vba]
а с вашими цифрами ну никак... <_<
Главное результат получен. Спасибо!

Автор - Webbear
Дата добавления - 30.09.2016 в 19:24
krosav4ig Дата: Суббота, 01.10.2016, 01:25 | Сообщение № 16
Группа: Друзья
Ранг: Старожил
Сообщений: 1356
Репутация: 547 ±
Замечаний: 0% ±

Excel 2007, 2013
Результат - заполнены только 3 строки

не верю
после [vba]
Код
Set Sh_Шаблон = Sheets("ШАБЛОН") 'задаем переменной Sh_Шаблон объект лист "ШАБЛОН". для упрощения себе жизни
[/vba]написАл [vba]
Код
Call SplitN(CStr(ArrДоп(5, 1)), Array(40, 85, 85, 85), Sh_Шаблон.[N24,A26,A28,A30])
[/vba]
Выполнил, на листе получил
К сообщению приложен файл: 9996057.gif(10Kb) · 3393835.gif(32Kb)


(_)Õvõ(_)

Сообщение отредактировал krosav4ig - Суббота, 01.10.2016, 01:27
 
Ответить
Сообщение
Результат - заполнены только 3 строки

не верю
после [vba]
Код
Set Sh_Шаблон = Sheets("ШАБЛОН") 'задаем переменной Sh_Шаблон объект лист "ШАБЛОН". для упрощения себе жизни
[/vba]написАл [vba]
Код
Call SplitN(CStr(ArrДоп(5, 1)), Array(40, 85, 85, 85), Sh_Шаблон.[N24,A26,A28,A30])
[/vba]
Выполнил, на листе получил

Автор - krosav4ig
Дата добавления - 01.10.2016 в 01:25
Webbear Дата: Суббота, 01.10.2016, 10:23 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
krosav4ig, прошу прощения, видимо вчера подустал и перемудрил с вашим кодом.
Сегодня со свежими силами заново все прописал внимательно и все сработало без танцев с бубнами.
Спасибо!

....показалось мне на первый взгляд, но :
У меня данные правильно вписываются в сам "Шаблон"!!! и в первый акт, а со второго начинаются косяки.

У вас там есть процедура Автозаполнение (разбираться долго). Вставьте предпоследней строкой Call ttt,

Как только удаляю эту строку, все становится нормально на всех страницах.


Сообщение отредактировал Webbear - Суббота, 01.10.2016, 12:26
 
Ответить
Сообщение krosav4ig, прошу прощения, видимо вчера подустал и перемудрил с вашим кодом.
Сегодня со свежими силами заново все прописал внимательно и все сработало без танцев с бубнами.
Спасибо!

....показалось мне на первый взгляд, но :
У меня данные правильно вписываются в сам "Шаблон"!!! и в первый акт, а со второго начинаются косяки.

У вас там есть процедура Автозаполнение (разбираться долго). Вставьте предпоследней строкой Call ttt,

Как только удаляю эту строку, все становится нормально на всех страницах.

Автор - Webbear
Дата добавления - 01.10.2016 в 10:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Деление длинного текста на 4 строки или более (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!