powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Простой, но нужный макрос в Excel
7 сообщений из 7, страница 1 из 1
Простой, но нужный макрос в Excel
    #34081491
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть одна колонка "A". В ней несколько первых слов выделены жирным шрифтом, а остальное обычным. Как сделать так, чтобы то, что написано жырным шрифтом осталось на месте, а то что обычным в другой колонке?
...
Рейтинг: 0 / 0
Простой, но нужный макрос в Excel
    #34081621
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub test()
    Dim i As Long, rng1 As Range, rng2 As Range
    Application.ScreenUpdating = False
    With ActiveSheet
        For i =  2  To .[A65536].End(xlUp).Row
            If .Cells(i,  1 ).Font.Bold = False Then
                If rng1 Is Nothing Then Set rng1 = .Cells(i,  1 ) _
                    Else Set rng1 = Union(rng1, .Cells(i,  1 ))
            Else
                If rng2 Is Nothing Then Set rng2 = .Cells(i,  1 ) _
                    Else Set rng2 = Union(rng2, .Cells(i,  1 ))
            End If
        Next i
        rng1.Copy .Cells( 2 ,  2 )
        rng2.Copy .Cells( 2 ,  3 )
    End With
    Application.ScreenUpdating = True
End Sub


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Простой, но нужный макрос в Excel
    #34081634
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если точнее, то так:

Sub test()
Dim i As Long, rng1 As Range, rng2 As Range
Application.ScreenUpdating = False
With ActiveSheet
For i = 2 To .[A65536].End(xlUp).Row
If .Cells(i, 1).Font.Bold = False Then
If rng1 Is Nothing Then Set rng1 = .Cells(i, 1) _
Else Set rng1 = Union(rng1, .Cells(i, 1))
Else
If rng2 Is Nothing Then Set rng2 = .Cells(i, 1) _
Else Set rng2 = Union(rng2, .Cells(i, 1))
End If
Next i
With .[a:a]: .Insert: .Insert: End With
rng2.Copy .Cells(2, 2)
rng1.Copy .Cells(2, 1)
.[c:c].Delete
End With
Application.ScreenUpdating = True
End Sub


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Простой, но нужный макрос в Excel
    #34081687
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)Может так:А по моему, ты не угадал :)

Моя телепатия подсказывает что задача стоит другая...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub a()
    Dim c As Range
    Dim i As Integer, s1 As String, s2 As String
    
    For Each c In Intersect(ActiveSheet.Range("A:A"), ActiveSheet.UsedRange)
        s1 = ""
        s2 = ""
        For i =  1  To Len(c.Text)
            If c.Characters(i,  1 ).Font.Bold Then
                s1 = s1 & c.Characters(i,  1 ).Text
            Else
                s2 = s2 & c.Characters(i,  1 ).Text
            End If
        Next
        c.Offset( 0 ,  1 ).Value = s2
        c.Value = s1
    Next
End Sub
...
Рейтинг: 0 / 0
Простой, но нужный макрос в Excel
    #34081741
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА по моему, ты не угадал :)Моя телепатия подсказывает что задача стоит другая...

Очень может быть - телепатия это мое слабое место :-))
...
Рейтинг: 0 / 0
Простой, но нужный макрос в Excel
    #34081806
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, сейчас перечитал в третий раз и думаю, что ты прав. И если это так, то в случае если ячеек много, я бы сначала загонял значения в массив (так раза в два быстрее при 3.000 строк)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub a1()
    Dim c As Range, j As Long, mtx() As String
    Dim i As Integer, s1 As String, s2 As String, cnt As Long
    
    Application.ScreenUpdating = False
    With ActiveSheet
        Set rng = Intersect(.Range("A:A"), .UsedRange)
    End With
    
    cnt = rng.Rows.Count
    ReDim mtx(cnt -  1 ,  1 ) As String
    
    For j =  1  To cnt
        s1 = "": s2 = ""
        For i =  1  To Len(rng( 1 ).Text)
            If rng(j).Characters(i,  1 ).Font.Bold Then
                s1 = s1 & rng(j).Characters(i,  1 ).Text
            Else
                s2 = s2 & rng(j).Characters(i,  1 ).Text
            End If
        Next
        mtx(j -  1 ,  1 ) = s2
        mtx(j -  1 ,  0 ) = s1
    Next j
    rng.Resize(,  2 ).Value = mtx
End Sub


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Простой, но нужный макрос в Excel
    #34082844
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl твой код - то что нужно...
Большое спасибо всем!!! Вопрос считаю закрытым.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Простой, но нужный макрос в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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