Вот три способа, которые отвечают требованиям, и четвертый, который более ситуативный. Да, 2 из них вы сказали не работать по OP. Они работают для меня в Office 365 Pro Plus, поэтому они будут работать для многих других, ваш пробег может варьироваться в зависимости от версии Excel:
Метод 1 - Копирование и вставка
- Отформатируйте целевой диапазон как
Text
Copy
данные HTMLPaste
с помощьюMatch Destination
Способ 2 - получить данные из Интернета
- Нажмите «Получить данные» на вкладке «Данные» ленты.
- Наведите курсор на «Из других источников», чтобы развернуть раскрывающееся меню.
- Выберите «Из Интернета» и введите URL / местоположение файла
- Выберите исходную таблицу из списка в левой части редактора запросов.
- Нажмите «Изменить» в правом нижнем углу
- Измените тип данных каждого столбца на
Text
в группе «Преобразование» на вкладке «Главная» на ленте. - Нажмите «Закрыть и загрузить», таблица будет создана на пустом листе
Метод 3 - VBA
- Вставьте код снизу в модуль
- Измените PathOrURL на местоположение вашего файла или URL
- Запустите процедуру
Я написал это с предположением, что ваш источник данных является первой или, возможно, единственной таблицей в файле HTML. Он преобразует исходные значения таблицы в строки и записывает строку на лист без использования копирования или вставки. Форматы ячеек не нужно менять.
Требуются MS Internet Controls и ссылки на библиотеку объектов MS HTML.
Option Explicit Sub GetTextFromHTML() Dim PathOrURL as String: PathOrURL = Environ("USERPROFILE") & "\Desktop\a4rZKDWK.html" Dim IE As New InternetExplorerMedium Dim x As Long, y As Long Dim tbl As HTMLTable Dim sVals() As String IE.Navigate PathOrURL Do While IE.ReadyState <> READYSTATE_COMPLETE DoEvents Loop Set tbl = IE.Document.getElementsByTagName("table")(0) With tbl ReDim sVals(1 To .Rows.Length, 1 To .Rows(1).Cells.Length) For y = 1 To .Rows.Length For x = 1 To .Rows(1).Cells.Length sVals(y, x) = CStr(tbl.Rows(y - 1).Cells(x - 1).innerText) Next Next End With IE.Quit ActiveSheet.Cells(1, 1).Resize(UBound(sVals), UBound(sVals, 2)).Value = sVals End Sub
Метод 4 - Переходный вход (ситуационный)
- Нажмите «Файл» на ленте
- Выберите «Опции»
- Выберите «Дополнительно»
- Прокрутите весь путь до самого дна
- Установите флажок для «переходной записи»
- Копировать данные HTML
- Вставить в лист Excel
Можно привести пример использования «записи перехода», поскольку он решает проблему даты, позволяя копировать и вставлять дроби в виде дробей - ОДНАКО - он не удовлетворяет требованиям OP, поскольку он также упрощает любую приводимую дробь; копирование 6/9 вставит 2/3. Несводимые фракции хороши и не модифицируются. Неправильные дроби также поддерживаются.
Я подозреваю, что Excel преобразует исходные данные из дробных в десятичные, а затем обратно в дробные, потому что упрощенные дроби являются логическим результатом десятичного преобразования. Если вы решите начать с 2/4, 3/6, 12/24, все они преобразуются в 0,5 десятичного числа. Мы теряем всю информацию об их уникальности, как только они это делают. Вы можете дифференцировать 2/4 от 3/6, но вы не можете сделать это с 0,5 и 0,5. Переходя от десятичной дроби к дробной, существует буквально бесконечное число дробей, равное 0,5, и мы можем использовать любую из них. Мы не знаем, с чего начали, потому что все было потеряно при переходе на 0,5, шансы точно угадать, когда у вас есть бесконечное количество вариантов выбора, довольно малы, поэтому лучший результат будет полностью уменьшен и упрощен, и есть только один из те ... 1/2
К сожалению, пользовательский формат, который я рекомендовал на прошлой неделе, "# / #", страдает от той же проблемы, что и "запись перехода". Он переносит все дроби, но упрощает каждую вставляемую дробную дробь.