3

У меня есть тысячи данных в моем файле Excel, они представляют собой скопированные данные с различных веб-сайтов, первоначально сохраняются в файлах CSV, а затем переносятся в Excel. Эти данные предназначены для использования моим веб-сервером.

Теперь моя проблема в том, что где-то между многими horizontal tabs спрятаны spaces, и они вызывают критическую проблему для моего веб-сервера.


Я приведу пример, чтобы уточнить здесь:

Данные в Excel: "Это клетка"

Данные при кодировании для использования в качестве параметра url: «This% 20is% 09a% 20cell»

Вы можете четко видеть, что одно из промежутков между ними было закодировано в% 09, что представляет горизонтальную табуляцию. Это вызывает серьезную проблему с моего сервера, и я должен идентифицировать и заменить это.

Итак, как мне найти горизонтальную вкладку в Excel?

3 ответа3

4

Ответ Бурги делает свое дело, но вместо того, чтобы дублировать весь набор данных с рабочим листом, полным формул, вы можете добиться того же с помощью нескольких строк сценария.

Sub ReplaceTabs()
   Dim c As Range

   For Each c In ActiveCell.CurrentRegion
      c.Value = Replace(c.Value2, Chr(9), Chr(32))
   Next c
End Sub

Есть несколько способов пройти по всем соответствующим ячейкам (например, вы можете просто нацелить определенные столбцы с ActiveSheet.Range("A:A") и т.д., Либо выберите нужные ячейки и используйте « Selection.Cells), но этот метод будет работать, если ячейки смежны и вкладки могут находиться в любой ячейке.

Это не очень быстро (200 000 ячеек заняло около 10 секунд на моей машине), но должно быть достаточно быстрым.

Если это обычная задача, вы можете встроить ее в скрипт импорта.

3

Этот код должен работать для вас:

=SUBSTITUTE(A1,CHAR(9),CHAR(32))

Приведенная выше формула заменяет все экземпляры CHAR(9) на CHAR(32) в данной строке.

  • CHAR(9) - символ табуляции
  • CHAR(32) - символ пробела

В этой вики-статье приведена таблица соответствия, которую использует Windows.

2

чтобы ускорить ответ Лунатика на включение / выключение обновления во время работы макроса.

Dim tmp As Boolean
tmp = Application.ScreenUpdating
' this stores current value
Application.ScreenUpdating = False

   Dim c As Range

   For Each c In ActiveCell.CurrentRegion
      c.Value = Replace(c.Value2, Chr(9), Chr(32))
   Next c

Application.ScreenUpdating = tmp

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .