Новости:

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

Главное меню

Как сократить (оптимизировать) этот макрос?

Автор Лили3332, 12.10.2025, 10:05:35

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

Лили3332

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

Помогите, пожалуйста, с оптимизацией макроса

function Vov() {
  var spreadsheet = SpreadsheetApp.getActive();

var ch = spreadsheet.getRange('F6').getValue();

if(ch > 0){
  spreadsheet.getRange('C9:D9').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('D9'));
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Октябрь25'), true);
  spreadsheet.getRange('A2:B2').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('B2'));
  spreadsheet.getRange('\'Лист22\'!C9:D9').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист22'), true);
  spreadsheet.getRange('E9').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Октябрь25'), true);
  spreadsheet.getRange('E2').activate();
  spreadsheet.getRange('\'Лист22\'!E9').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист22'), true);
  spreadsheet.getRange('E6').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Октябрь25'), true);
  spreadsheet.getRange('D2').activate();
  spreadsheet.getRange('\'Лист22\'!E6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист22'), true);
  spreadsheet.getRange('D11').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Октябрь25'), true);
  spreadsheet.getRange('C2').activate();
  spreadsheet.getRange('\'Лист22\'!D11').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист22'), true);
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('E9').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('D9').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('C20').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Октябрь25'), true);
  spreadsheet.getRange('2:2').activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист22'), true);
}
 
};

casag

function Vov() {
  var spreadsheet = SpreadsheetApp.getActive();
  var ch = spreadsheet.getRange('F6').getValue();

  if (ch <= 0) return;

  var sheet22 = spreadsheet.getSheetByName('Лист22');
  var october25 = spreadsheet.getSheetByName('Октябрь25');
 
  // Копируем данные из Лист22 в Октябрь25
  var sourceRanges = [
    { source: 'C9:D9', target: 'A2:B2' },
    { source: 'E9', target: 'E2' },
    { source: 'E6', target: 'D2' },
    { source: 'D11', target: 'C2' }
  ];

  sourceRanges.forEach(function(range) {
    var values = sheet22.getRange(range.source).getValues();
    october25.getRange(range.target).setValues(values);
  });

  // Очищаем ячейки в Лист22
  var clearRanges = ['C9:D9', 'E9', 'D9', 'C20'];
  clearRanges.forEach(function(range) {
    sheet22.getRange(range).clearContent();
  });

  // Вставляем новую строку в Октябрь25
  october25.insertRowBefore(2);
}

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