Жану нужно заменить запятые точками в таблице чисел. Он работает во Франции, используя французский компьютер, но ему нужно «перевести» эти числа для американского приложения, отличного от Excel. Когда он вручную выполняет поиск и замену, все работает хорошо. Конечно, его числа преобразуются в строки, но с Жаном это нормально. Когда он пытается выполнить ту же операцию поиска и замены в макросе, ничего не происходит; запятые вроде бы игнорируются. Джин задается вопросом, как он может выполнять эту задачу в макросе, вместо того, чтобы делать это каждый раз вручную.

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

Sub ChangeNumberFormat()

With Application         .UseSystemSeparators = False         If .DecimalSeparator = "." Then             .DecimalSeparator = ","

.ThousandsSeparator = "."

Else            .DecimalSeparator = "."

.ThousandsSeparator = ","

End If     End With End Sub

Это меняет способ отображения информации, и вы можете экспортировать информацию в любой желаемый формат, отличный от Excel (например, CSV). После этого снова запустите макрос, и ваши региональные настройки должны вернуться к исходным значениям. Преимущество этого подхода состоит в том, что вы никогда не меняете то, что находится в ячейках, а только то, как эта информация отображается. Это означает, что ваши числа остаются числами, которые можно продолжать использовать как таковые.

Если вам нужно что-то более прямое, то, вероятно, лучше не использовать «Найти и заменить». Вместо этого используйте макрос для непосредственного изменения содержимого каждой ячейки. Такой подход может работать намного быстрее, чем полагаться на поиск и замену, даже в макросе. Вот простое применение этой концепции:

Sub SwitchCommasPeriods()

Dim c As Range     Dim sTemp As String          For Each c In Selection         sTemp = c.Text         sTemp = Replace(sTemp, ",", "|")

sTemp = Replace(sTemp, ".", ",")

sTemp = Replace(sTemp, "|", ".")

c = sTemp     Next c End Sub

Обратите внимание на пару моментов в макросе. Во-первых, он проверяет свойство Text для каждой ячейки. Причина в том, что свойство Text возвращает форматированное значение ячейки, другими словами, то, что отображается. (Если вы просто посмотрите на свойство Value, вы получите неформатированное число, которое вы не хотите использовать.)

Во-вторых, следует отметить, что функция «Заменить» используется для того, чтобы сначала заменить все запятые вертикальной полосой, затем все точки запятыми и, наконец, все вертикальные полосы точками. Такой подход необходим, потому что вы, по сути, меняете местами точки и запятые в тексте.

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

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (13675) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.