Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Скрипт проверки данных на числовые значения

Автор Zavik21, 22.03.2025, 21:40:01

« назад - далее »

Zavik21

Всем привет!
Никак не могу решить задачу. В столбцах A-E вводятся значения. Одновременно в одной строке могут быть введены значения в нескольких столбцах, либо только в один, Нужно, чтобы в столбце F выводился анализ данных. По идее в столбцы A-E должны вводиться только числа, с которыми можно производить математические действия. Числа могут вводиться положительные, отрицательные, целые и с дробной частью. Дробная часть отделяется запятой "," Бывает такое, что пользователь вводит в ячейки что-то лишнее, например может быть 500! или 40" или 30е, или 50.54. В случае, если в ячейку вводится не числовое значение, формулы подсчитать данные естественно не могут. Раньше для проверки я использовал формулу =ЕЧИСЛО(), а сейчас появилась необходимость проверять это же самое, но только с помощью скрипта. Никак не могу написать реально рабочий скрипт, чтобы он проверял все непустые строки, столбцы A-E, по заданному критерию (пропуская пустые ячейки), и в случае, если в строке все найденные значения числовые, тогда выводил в столбец F текст "Все ок", а если есть хоть одна ячейка с нечисловым значением, выводил слово "Лишние символы". Значения с разделителем-точкой должны считаться "Лишние символы", а с запятой "Все ОК".
Пример скрипта, уже ИИ пробовал))) не получается. Значения с запятой как невалидные считает. Подскажите, пожалуйста как решить мою задачу! Благодарю!
function proverka() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getDataRange();
  const data = dataRange.getValues();

  const numericRegex = /^-?\d+(,\d+)?$/;

  for (let i = 0; i < data.length; i++) {
    const row = data[i];
    let isAllNumeric = true;

    for (let j = 0; j < 5; j++) {
      const cellValue = row[j];

      if (cellValue === "") continue;

      const cellString = cellValue.toString();

      if (!numericRegex.test(cellString)) {
        isAllNumeric = false;
        break;
      }
    }

    if (isAllNumeric) {
      sheet.getRange(i + 1, 6).setValue("Все ок");
    } else {
      sheet.getRange(i + 1, 6).setValue("Лишние символы");
    }
  }
}

Яндекс.Метрика Рейтинг@Mail.ru