Перевод таблиц Excel, уровень Hurt Me Plenty

Я уже рассказывал о переводе файлов Excel в простых случаях, а сегодня рассмотрим более сложный пример — для тех, кто не боится скопировать несколько строк кода в редактор макросов.

Итак. Клиент прислал на перевод таблицу Excel следующего вида:
copyvalues1
(по щелчку откроется полноразмерный скриншот)

Таких строк — около тысячи, а от меня требуется вписать перевод в желтые ячейки под оригиналом! Как они собираются обрабатывать результаты в таком формате, грязные извращенцы?! Ну да неважно: если получится применить САТ-программу, перевод ускорится, а проверять его в Trados гораздо удобнее, чем в Excel.

После нескольких экспериментов я остановился на следующем решении. Переводим исходный файл в любой САТ-среде, открываем переведенный файл и переименовываем текущий лист, например, в Sheet2. В меню «Правка» выбираем «Переместить или скопировать лист», открываем исходный файл и копируем туда лист с переводом. Теперь на листе Sheet1 расположен оригинал, а листе Sheet2 — перевод:
copyvalues2

Далее краткий сеанс VBA-магии. Открываем редактор макросов (Alt+F11), создаем новый модуль и вписываем следующий код:

Sub CopyValues()
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "Select Range to Process"
' Указываем рабочий диапазон
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
' Для каждой ячейки в диапазоне...
For Each Rng In WorkRng
' ...проверяем, не пустая ли она,
If IsEmpty(Rng.Value) Then
' и если ячейка пустая — копируем сюда значение со второго листа со сдвигом вверх
Rng.Value = Worksheets("Sheet2").Range(Rng.Address).Offset(-1, 0).Value
End If
Next Rng
Application.ScreenUpdating = True
End Sub

Запускаем макрос нажатием F5. Выделяем диапазон ячеек и нажимаем ОК: в каждую пустую ячейку в выбранном диапазоне будет скопирован перевод со второго листа. Вот результат:
copyvalues3

Перед сохранением файла не забудьте удалить второй лист и модуль с макросом. Готово! Макросы не такие страшные, как их представляют :-)

Если вы можете придумать более быстрое решение для перевода таких таблиц — поделитесь.

5 thoughts on “Перевод таблиц Excel, уровень Hurt Me Plenty

  1. catoverhere

    Навскидку пришло такое решение:
    1. Отфильтровать диапазон ячеек по содержимому или цвету.
    2. Вставить перевод.
    3. Снять фильтры.
    4. PROFIT!

    Reply
    1. Maxim Post author

      На шаге 2 вы получите сообщение “данная команда неприменима для несвязных диапазонов”.

      Reply
  2. Михаил

    Максим, скопировать не страшно, но это если попадется такой же точно случай. А вообще VBA долго учить и что посоветуете из литературы, чтобы только мясо и без лишней воды? :)

    Reply
    1. Maxim Post author

      Не соглашусь. Наоборот, мне кажется, это простой пример, который можно адаптировать под конкретный случай. Вам что-то в этом коде непонятно?

      Я никогда не учил VBA по учебникам, но прочитал справку, которая идет в комлекте с Excel. Если же справки не хватает, я просто набираю в поисковике что-то вроде “Excel VBA offset values” — для непрофессионального кодинга этого обычно достаточно.

      Reply

Leave a Reply

Your email address will not be published.