powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Програмное удаление последнего символа в ячейке
21 сообщений из 21, страница 1 из 1
Програмное удаление последнего символа в ячейке
    #38110234
alex_lipetsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Есть ячейка с форматированным тектом. Длина разная, в конце стоит ;
ее нужно убрать. Форматирование в ячейке неоднордное.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[/SRC]
n_workbook = 1
Application.Calculation = xlCalculationAutomatic
iLastCell = Worksheets(n_workbook).Range("A1:A64000").End(xlDown).Row
For j = 1 To iLastCell
   l1 = Len(Worksheets(n_workbook).Cells(j, 11).Value)
   n = Worksheets(n_workbook).Cells(j, 11).Characters.Count 
   If Worksheets(n_workbook).Cells(j, 11).Characters(l1, 1).Text = ";" Then Worksheets(n_workbook).Cells(j, 11).Characters(n, 1).Delete
   
 Next j
 [SRC vba]


Примерение Delete oбругивает?
Через свойство text--матерится, хотя оно чтение/запись
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110238
alex_lipetsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex_lipetsk,

Причем на коротких работает, на длиных матюкаует
В файле первую строку обрабатывает, вторую нет
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110244
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lipetsk,

может пример выложите? Ваш код рабочий(я самую малость подправил, но суть осталась та же):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    Dim n_workbook As Long, iLastCell As Long, l1 As Long, j As Long
    n_workbook = 1
    'мне кажется, что лучше ручным сделать, а после вернуть в авто
    Application.Calculation = xlManual
    'и обновление экрана отключить для быстродействия
    Application.ScreenUpdating = 0
    With Worksheets(n_workbook)
        iLastCell = .Cells(.Rows.Count, 1).End(xlUp).Row
        For j = 1 To iLastCell
            l1 = Len(.Cells(j, 11).Value)
            If .Cells(j, 11).Characters(l1, 1).Text = ";" Then
                .Cells(j, 11).Characters(l1, 1).Delete
            End If
        Next j
    End With
    'возвращаем настройи
    Application.ScreenUpdating = 1
    Application.Calculation = xlAutomatic


переменная n лишняя - Вы все равно уже определили кол-во знаков через Len.
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110246
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
'Может так пройдет
If .Cells(j, 11).Characters(l1, 1).Text = ";" Then
                .Cells(j, 11).Characters(l1, 1)=""
            End If
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110248
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока писал - появился пример. Скорее всего дело в том, что во второй строке символов более 256 - это мешает с ними работать через Characters. Можно работать через Mid - но тогда слетит форматирование.
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110250
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА
Код: vbnet
1.
2.
3.
4.
'Может так пройдет
If .Cells(j, 11).Characters(l1, 1).Text = ";" Then
                .Cells(j, 11).Characters(l1, 1)=""
            End If

То же самое - более 256 уже не обрабатывает. Это проблема именно Characters и вряд ли её так просто победить получится.
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110251
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошиблась немного
Код: vbnet
1.
2.
3.
4.
'Может так пройдет
If .Cells(j, 11).Characters(l1, 1).Text = ";" Then
                .Cells(j, 11).Characters(l1, 1).text=""
            End If
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110274
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,
здесь 304 символа

---
последний читается, но не устанавливаеися
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110293
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

потому что прочитать можно символы и далее 256, но не более. И работать можно не более чем с 256. Легко проверить: попробуйте через Characters записать текст длиной более 256 символов:
Код: vbnet
1.
2.
sStr = String(257, "g")
Cells(1, 1).Characters(1, 257).Text = sStr


Или попробуйте прочитать разом более 256 символов - не получится.
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110525
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда только удалять до форматирования.
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38110558
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич Александр,

--сохраните как НТМ
--в блокноте замените ;< на <
--переименуйте в xls
--откройте екселем и сохраните в нужной версии
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111189
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

это ТС, не мне :)
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111207
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиск - Замена не подойдет?
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111214
Khod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FПоиск - Замена не подойдет?

Только в том случае, если конец ячейки (;) не встречается в других местах ячейки.
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111375
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex_lipetsk,

я помню - Вы же собираете этот длинный текст программно! Доработайте алготитм так, чтобы в конце не было этой ";".
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111397
alex_lipetsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский,

Да собирал, и ошибся в последней ;, а когда 56 тыс обработано, за 2 дня, думал поправлю за 5 минут, в готовом форматировании.

Пришлось переделывать (.

Спасибо всем откликнувшимся!
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111449
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе, можно сохранить информацию о форматировании каждого символа, а потом применить форматирование. Но дооолго ;)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub bb()
Dim s$, i&, n&
Application.ScreenUpdating = False
With Range("F2")
    s = .Value
    n = Len(s) - 1
    ReDim bld(1 To n) As Boolean, ita(1 To n) As Boolean
    For i = 1 To n
        bld(i) = .Characters(i, 1).Font.Bold
        ita(i) = .Characters(i, 1).Font.Italic
    Next
    .Value = Left(s, n)
    For i = 1 To n
        .Characters(i, 1).Font.Bold = bld(i)
        .Characters(i, 1).Font.Italic = ita(i)
    Next
End With
Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111452
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну то есть, если в ячейке не более 256 символов, то через Delete, а если больше - то таким длинным путем.
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111482
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оптимизировал: теперь форматирование применяется не к каждому символу, а только если отличается от предыдущего символа.
Время упало с 4.4 до 0.57 с - почти в 8 раз.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub bb()
Dim s$, i&, n&, cb As Boolean, ci As Boolean
Application.ScreenUpdating = False
With Range("K2")
    s = .Value
    n = Len(s) - 1
    ReDim bld(1 To n) As Boolean, ita(1 To n) As Boolean
    For i = 1 To n
        bld(i) = .Characters(i, 1).Font.Bold
        ita(i) = .Characters(i, 1).Font.Italic
    Next
    .Value = Left(s, n)
    
        cb = bld(1)
        ci = ita(1)
        .Characters(i).Font.Bold = cb
        .Characters(i).Font.Italic = ci
    For i = 2 To n
        If cb <> bld(i) Then cb = bld(i): .Characters(i).Font.Bold = cb
        If ci <> ita(i) Then ci = ita(i): .Characters(i).Font.Italic = ci
    Next
End With
Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38111489
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жаль сообщения править нельзя, вот окончательный вариант
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub bb()
Dim s$, i&, n&, cb As Boolean, ci As Boolean
Application.ScreenUpdating = False
With Range("K2")
    s = .Value
    n = Len(s) - 1
    ReDim bld(0 To n) As Boolean, ita(0 To n) As Boolean
    For i = 1 To n
        bld(i) = .Characters(i, 1).Font.Bold
        ita(i) = .Characters(i, 1).Font.Italic
    Next
    .Value = Left(s, n)
    For i = 1 To n
        If cb <> bld(i) Then cb = bld(i): .Characters(i).Font.Bold = cb
        If ci <> ita(i) Then ci = ita(i): .Characters(i).Font.Italic = ci
    Next
End With
Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
Програмное удаление последнего символа в ячейке
    #38113056
alex_lipetsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский,

Спб, попробую
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Програмное удаление последнего символа в ячейке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]