Страницы: 1
RSS
Как макросом выполнить F2+Enter для диапазона ячеек с текстом/есть ли этому замена?
 
Добрый вечер всем. Нужна помощь с таблицей, Excell 2019. Есть столбцы, в котором каждая из 1400 тысяч ячеек, после того как в неё вставили данные, приобретает нормальный развёрнутый вид в читабельным формате только после того, как кликнешь на неё дважды или нажмёшь F2. На других формах видел, что решались подобные проблемы для листов с формулами, а у меня чисто текст. Как подобный ввод осуществить макросом, или применить какую-нибудь другую альтернативу?
 
Трудно ответить, не видя хотя бы фрагмента файла.
Попробуйте выделить прямоугольный диапазон проблемных ячеек и выполнить макрос:
Код
Sub Test()
  Selection.FormulaLocal = Selection.FormulaLocal
End Sub
Владимир
 
Скидываю пример файла
 
К сожалению, так не получилось; скинул пример файла. Я там, правда, прокликал чутка уже сам вручную, но можно к концу ближе пролистать или к середине
Изменено: Doctor Bruce - 04.02.2026 18:22:56
 
А с какими строками и столбцами у Вас проблема?
Совет. Выделите весь лист и в диалоге "Формат ячеек" на вкладке "Выравнивание" укажите Выравнивание по горизонтали: "по значению". Тогда Вы по выравниванию можете определить тип данных в ячейке (число / текст).
Владимир
 
Цитата
написал:
А с какими строками и столбцами у Вас проблема?Совет. Выделите весь лист и в диалоге "Формат ячеек" на вкладке "Выравнивание" укажите Выравнивание по горизонтали: "по значению". Тогда Вы по выравниванию можете определить тип данных в ячейке (число / текст).
Со всеми строками и столбцами. Если пролистать ближе к концу, то видно, что в ячейках с тягачами текст друг на друга налезает, но если по ним кликнуть, то он автоматом выправляется. Если нажать F2, то же самое. То же самое со столбцами номеров, прописки, фамилий и т.д.

Попробовал выровнять по значению, не работает. Только текст в другую сторону переносится
 
Вот так вот до клика, вот так после клика
 
Выделите столбцы A:K. Далее Ctrl+1 ("Формат ячеек"), вкладка "Выравнивание", поставьте отметку "переносить по словам", OK.
Владимир
 
Цитата
написал:
Выделите столбцы A:K. Далее Ctrl+1 ("Формат ячеек"), вкладка "Выравнивание", поставьте отметку "переносить по словам", OK.
Не-а, не действует. То же самое всё
 
Укажите точные координаты проблемы (номер строки и столбца).
Где в Вашем файле из #3 адрес, содержащий "Циолковского" (первый рисунок из сообщения #7)?
Владимир
 
Цитата
написал:
Укажите точные координаты проблемы (номер строки и столбца).Где в Вашем файле из #3 адрес, содержащий "Циолковского" (первый рисунок из сообщения #7)?
Я для примера скидывал пустой файл без данных, но там всё равно видно. Ну вот список, который я веду, координаты примера проблемы: H606, и вся строка прямо. То есть на любую ячейку нажмите, она пробелы изменит сразу
Изменено: Doctor Bruce - 04.02.2026 20:17:11
 
Да, действительно, "странный" файл. Завтра вылечим макросом (если раньше никто не сделает).
Владимир
 
Цитата
написал:
Да, действительно, "странный" файл. Завтра вылечим макросом (если раньше никто не сделает).
Был бы благодарен
 
Похоже здесь пудрит мозг символ 13, нужно в цикле поменять его на символ 10 и все должно нормализоваться.  
 
Цитата
написал:
Похоже здесь пудрит мозг символ 13, нужно в цикле поменять его на символ 10 и все должно нормализоваться.
Цитата
Через поиск и замену?
 
попробуйте такой макрос
Код
Sub FixAllLineBreakIssues()
    Dim cell As Range
    Dim originalText As String
    Dim fixedText As String
    
    Application.ScreenUpdating = False
    
    For Each cell In ActiveSheet.UsedRange
        If cell.Value <> "" Then
            originalText = cell.Value
            
            ' Шаг 1: Нормализация переносов строк
            fixedText = Replace(originalText, vbLf, vbCrLf)
            fixedText = Replace(fixedText, vbCr, vbCrLf)
            
            ' Удаляем двойные переносы
            Do While InStr(fixedText, vbCrLf & vbCrLf) > 0
                fixedText = Replace(fixedText, vbCrLf & vbCrLf, vbCrLf)
            Loop
            
            ' Шаг 2: Удаляем переносы в начале и конце
            fixedText = Trim(fixedText)
            
            ' Шаг 3: Применяем исправленный текст
            If originalText <> fixedText Then
                cell.Value = fixedText
            End If
            
            ' Шаг 4: Включаем перенос текста
            cell.WrapText = True
        End If
    Next cell
    
    ' Шаг 5: Автоподбор размеров
    ActiveSheet.UsedRange.EntireRow.AutoFit
    ActiveSheet.UsedRange.EntireColumn.AutoFit
    
    Application.ScreenUpdating = True
    
    MsgBox "Исправление переносов строк завершено!", vbInformation
End Sub


PS. Не мое, подсказал ИИ, но вроде работает.
 
Это лечится установкой формата "Обычный" на столбец "H"
Такое происходит, если в ячейке больше 255 символов и установлен формат "Текстовый"

И да, похоже не только на столбец "H"...
Изменено: and_evg - 05.02.2026 07:17:41
 
Цитата
написал:
Это лечится установкой формата "Обычный" на столбец "H"Такое происходит, если в ячейке больше 255 символов и установлен формат "Текстовый"И да, похоже не только на столбец "H"...
Не, я пробовал, так не работает
 
Цитата
написал:
Sub FixAllLineBreakIssues()    Dim cell As Range    Dim originalText As String    Dim fixedText As String         Application.ScreenUpdating = False         For Each cell In ActiveSheet.UsedRange        If cell.Value <> "" Then            originalText = cell.Value                         ' Шаг 1: Нормализация переносов строк            fixedText = Replace(originalText, vbLf, vbCrLf)            fixedText = Replace(fixedText, vbCr, vbCrLf)                         ' Удаляем двойные переносы            Do While InStr(fixedText, vbCrLf & vbCrLf) > 0                fixedText = Replace(fixedText, vbCrLf & vbCrLf, vbCrLf)            Loop                         ' Шаг 2: Удаляем переносы в начале и конце            fixedText = Trim(fixedText)                         ' Шаг 3: Применяем исправленный текст            If originalText <> fixedText Then                cell.Value = fixedText            End If                         ' Шаг 4: Включаем перенос текста            cell.WrapText = True        End If    Next cell         ' Шаг 5: Автоподбор размеров    ActiveSheet.UsedRange.EntireRow.AutoFit    ActiveSheet.UsedRange.EntireColumn.AutoFit         Application.ScreenUpdating = True         MsgBox "Исправление переносов строк завершено!", vbInformationEnd Sub
О, кстати помогла нейронка. Но теперь слишком много абзацев стало.
Короче, я сам попросил ГПТ написать чисто на F2+Enter, но он проходится по каждой ячейке буквально. Так что если у кого-то больше 1000, придётся подождать-посидеть:
Код
Sub F2_Enter_For_Column()
    Dim cell As Range

    ' Проходим по всем ячейкам в выделенном диапазоне
    For Each cell In Selection
        If Not IsEmpty(cell.Value) Then
            cell.Activate
            SendKeys "{F2}", True
            SendKeys "{ENTER}", True
        End If
    Next cell
End Sub

Как использовать
  1. Выдели столбец или диапазон ячеек

  2. Нажми Alt + F11

  3. Insert → Module

  4. Вставь код

  5. Закрой редактор

  6. Запусти макрос (Alt + F8)

Если нужен конкретный столбец (например, A)

Замени цикл на:

Код
For Each cell In Range("A:A")

⚠️ Важно: SendKeys работает только когда Excel активен — не переключайся на другие окна, пока макрос выполняется.

Изменено: Doctor Bruce - 05.02.2026 11:01:52
 
Цитата
написал:
Если нужен конкретный столбец (например, A)
Хотя не, вы знаете, получилось то же самое, что от прошлого кода с нейронкой, только медленнее
 
Цитата
написал:
Не, я пробовал, так не работает
Хммм... А у меня в офисе 2007 Вот так:
Изменено: and_evg - 05.02.2026 12:50:09
 
Если еще актуально, можем исследовать этот пример.

Поскольку в моей версии Excel (2016) последовательное нажатие на F2 / Enter  не приводит к визуальным изменениям в отображаемой информации, предлагаю следующий план:
1. Автор темы удаляет из проблемного файла все строки, кроме 606. Назовем новый файл "File1".
2. Автор темы преобразует "File1" путем последовательного нажатия на F2 / Enter и сохраняет как "File2".
В новое сообщение прикрепляются файлы File1 и File2.

Далее мы пытаемся составить макрос, который преобразует File1 в File2.
Владимир
 
Добрый вечер. Я уже предлагал выше просто заменить символ 13 - возврат каретки на символ 10 - перенос строки.. Например таким макросом
Код
Sub Rep()
Dim Cl As Range
For Each Cl In ActiveSheet.UsedRange
  Cl = Replace(Cl, Chr(13), Chr(10))
Next
End Sub 
Вроде бы нормально работает.
 
Цитата
Старичок написал:
Вроде бы нормально работает.
Автор темы не высказывался по этому поводу...
Владимир
 
Цитата
написал:
Вроде бы нормально работает.
Не, че-то нет. Но вон тот мой вариант с нейронкой подходит, реально работает. Только он проходится по каждой из 1000 строк в секунду, но в принципе мож можно и подождать? Мне он в принципе единожды пока для такой большой таблицы понадобился. Разве что кто-нибудь сможете подсказать, как его ускорить, чтобы он за раз всю книгу брал?
 
Цитата
написал:
Разве что кто-нибудь сможете подсказать, как его ускорить, чтобы он за раз всю книгу брал?
Подсказываю - загружаете выбранный диапазон в массив, проходите по каждому элементу массива и обрабатываете его и потом выгружаете массив обратно на лист. Будет существенно быстрее.
 
Заменяем возврат каретки на перенос строки, как предложил Старичок, только сразу для всего диапазона. У меня сработало.
Код
Sub Макрос1()
    Dim rng As Range
    Set rng = Range("A1:K1123")
    rng.Replace Chr(13), Chr(10)
    rng.FormulaLocal = rng.FormulaLocal
End Sub
 
Цитата
написал:
Заменяем возврат каретки на перенос строки, как предложил  Старичок , только сразу для всего диапазона. У меня сработало.
Вот этот отлично сработал, спасибо большое
Страницы: 1
Читают тему
Наверх