Макрос на копирование диапозона значений по дням в Excel

Нужно,чтобы значения из С15:С20 переносились по кнопке макроса в определенные столбцы таблицы D14:AI20.Столбец определяется датой,которая записывается в ячейке C1. И самое главное,что эти значения должны оставаться в этой таблице,когда будет сменяться дата и макрос будет выполняться относительно уже новой даты.К концу месяца вся таблица должна быть заполненной.

https://drive.google.com/file/d/1Nvzv7Piz1AesQXt9XckE6AlzRMEmeDvp/view?usp=sharing


Ответы (2 шт):

Автор решения: myscode

Можно попробовать примерно так. Затем функцию назначить на какую-нибудь нарисованную кнопку

function writeIt() {
  var arr = {
    '1': 'E', '2': 'F', '3': 'G', '4': 'H', '5': 'I',
    '6': 'J', '7': 'K', '8': 'L', '9': 'M', '10': 'N',
    '11': 'O', '12': 'P', '13': 'Q', '14': 'R', '15': 'S',
    '16': 'T', '17': 'U', '18': 'V', '19': 'W', '20': 'X',
    '21': 'Y', '22': 'Z', '23': 'AA', '24': 'AB', '25': 'AC',
    '26': 'AD', '27': 'AE', '28': 'AF', '29': 'AG', '30': 'AH',
    '31': 'AI'
  }
  
  var ss = SpreadsheetApp.openById("sheet_id");
  var sheet = ss.getSheetByName('List1');
  var current_date = sheet.getRange('C1').getValue();
  var cellsValues = sheet.getRange('C15:C20').getValues();
  sheet.getRange(arr[current_date]+"15:"+arr[current_date]+"20").setValues(cellsValues);
}
→ Ссылка
Автор решения: vikttur

Макрос на VBA. Код разместить в общем модуле. На кнопку повесить выполнение макроса.

Sub RecordDay()
    Dim j As Long
    
    If MsgBox("Записать данные за указванное число?", 64 + vbYesNo, "СОХРАНЕНИЕ") = vbNo Then Exit Sub
    j = Range("C1").Value + 5
    Cells(4, j).Resize(6, 1).Value = Range("C18:C23").Value
End Sub

введите сюда описание изображения

Формат .xlsx не подерживает макросы, книгу нужно сохранить с расширением .xlsm

Таблицу со списком и суммами можно скрыть группировкой. Формула в C18 (и протянуть ниже):

=СЧЁТЕСЛИ($C$5:$C$13;A18)*B18+ЕСЛИ($C$4=A18;B18*0,25)
→ Ссылка