Type mismatch — ошибка 13 — возникает при несовместимом типе значения или объекта. Частый пример: попытка получить число из обычного текста.

Разделим проверку ошибки Excel, проверку числового ввода и преобразование.

Что подготовить

На «Проверка» A2 содержит 150, B2 свободна для числа. A1 подпишите «Источник», B1 — «Число».

Для отрицательной проверки замените A2 словом «нет» или ошибкой формулы. Исходный столбец не должен изменяться при проверке.

Код и порядок выполнения

Option Explicit
Sub ConvertCheckedValue()
    Dim v As Variant
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Проверка")
    v = ws.Range("A2").Value
    If IsError(v) Then
        MsgBox "В источнике ошибка Excel": Exit Sub
    End If
    If Not IsNumeric(v) Then
        MsgBox "В источнике не число": Exit Sub
    End If
    ws.Range("B2").Value = CDbl(v)
End Sub

Variant позволяет сначала получить значение и проверить его вид. Проверка IsError стоит до числовых преобразований, чтобы ошибка ячейки не обрабатывалась как обычная строка.

CDbl выполняется после проверки распознавания числа. Для суммы дополнительно согласуют диапазон, точность и допустимость дробной части.

Учебный код: Ошибка 13 Type mismatch в VBA.
Учебный код: Ошибка 13 Type mismatch в VBA.

Как проверить результат

Для числового 150 в B2 ожидается 150. При тексте или ошибке Excel выводится подсказка и новая запись не выполняется.
Для числового 150 в B2 ожидается 150. При тексте или ошибке Excel выводится подсказка и новая запись не выполняется.

Для числового 150 в B2 ожидается 150. При тексте или ошибке Excel выводится подсказка и новая запись не выполняется.

Ограничения и частые ошибки

IsNumeric не гарантирует, что значение поместится в любой узкий тип. Числовая строка может вызвать переполнение при CLng или другой конверсии; это уже отдельная проверка диапазона.

Не используйте On Error Resume Next на всю процедуру как способ «исправить» типы. Ошибочная конверсия может оставить старое значение и создать видимость успешного результата.

Для объекта нужна объектная переменная и Set, для массива — подходящая размерность, для ячейки с ошибкой — отдельное правило. Уточните тип через TypeName или VarType в месте сбоя.

Проверка перед рабочим запуском

  • Число преобразуется явно.
  • Текст отклоняется до CDbl.
  • Ошибка ячейки проверяется отдельно.
  • При отказе старое B2 не объявляется новым результатом.

Сначала выполните пример на учебной копии с указанными именами листов и диапазонами. Сравните исходные данные и результат, затем сохраните проверенный вариант процедуры.

Продолжить изучение: Переменные и типы данных VBA: Dim и Option Explicit, InputBox в VBA: ввод значения и обработка отмены, Ошибка Overflow в VBA: переполнение и типы.

Разберитесь с макросами вместе с преподавателем

На занятии вы записываете действия, читаете код и проверяете результат на небольшом примере. Преподаватель подберёт задания под ваш уровень и поможет понять связь между командами VBA и изменениями в книге.

Начните с бесплатного вводного урока: 45 минут, один на один, без обязательств. Обсудите цель и попробуйте формат. Решение о продолжении — после занятия.

Записаться на бесплатный урок