Макрос на копирование диапозона значений по дням в Excel
Нужно,чтобы значения из С15:С20 переносились по кнопке макроса в определенные столбцы таблицы D14:AI20.Столбец определяется датой,которая записывается в ячейке C1. И самое главное,что эти значения должны оставаться в этой таблице,когда будет сменяться дата и макрос будет выполняться относительно уже новой даты.К концу месяца вся таблица должна быть заполненной.
https://drive.google.com/file/d/1Nvzv7Piz1AesQXt9XckE6AlzRMEmeDvp/view?usp=sharing
Ответы (2 шт):
Можно попробовать примерно так. Затем функцию назначить на какую-нибудь нарисованную кнопку
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);
}
Макрос на 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)
