Этот набор функций преобразует любое число в эквивалентный столбец Excel:
Cletter = @(c) char(mod(c,26)+(mod(c,26)==0)*26+64);
AZbase = @(c) fliplr(cumprod([c repmat(1/26,1,2)]));
xlCOL = @(c) Cletter(nonzeros(floor((AZbase(c)-circshift(mod(AZbase(c),26)==0,-1)).*(c>[702 26 0]))).');
Вы можете объединить их в одну функцию, но я предпочитаю оставлять их разделенными, чтобы не было слишком сложно понять, как они работают.
Например:
>> xlCOL(6504)
ans =
'IPD'
Теперь вы можете расширить их с помощью другой пары функций для построения строки диапазона:
RC2AB = @(row,col) [xlCOL(col) int2str(row)];
makeRange = @(c1,c2) [RC2AB(c1(1),c1(2)) ':' RC2AB(c2(1),c2(2))];
(опять же, я предпочитаю оставлять их отделенными ...)
например:
>> makeRange([12,321],[46,951])
ans =
'LI12:AJO46'
Обратите внимание, что в makeRange
вход представляет собой два двухэлементных вектора: один для первой ячейки в диапазоне и один для последней. В каждой ячейке первый элемент - это строка, а второй - столбец.
Вы можете проверить этот результат, используя формулу ADDRESS(row_num, column_num)
в Excel.
Это только для простого использования. Он не выполняет никаких проверок того, что это допустимый диапазон (то есть, что вторая ячейка не находится выше / слева от первой ячейки и что номер столбца / строки не выходит за пределы диапазона).
Я воспринял этот вопрос скорее как вызов, чем как реальную проблему. Нет сомнений в том, что написать небольшой m-файл с функцией (как в связанном ответе ) было бы проще. Но мне нужно было найти способ выполнить это с помощью нескольких анонимных функций.
Тем не менее, этот ответ не дает никакого объяснения того, как они работают, так как я не думаю, что кому-то это будет интересно, но если вы это сделаете - просто оставьте комментарий, и я добавлю некоторые объяснения.