Google 电子表格:在公式中使用列 + n
Google Spreadsheet: Use column + n in formular
在 X 列的电子表格中,我有以下公式:
=ImportRange('_keys'!$B;"2015!A200:A203")
现在我想将此公式复制到 X+n 列(在本例中为 X+2),这样它应该如下所示:
=ImportRange('_keys'!$B;"2015!C200:C203")
但它不会更改列,我必须手动更改它。
是否可以更改此公式,使其始终使用公式所在的列?
我的解决方案:
我编写了一个将数字转换为字母的简单自定义函数。
/**
* Converts number of column into column letter
*
* @param {Number} aNumer Number of column
* @return {String} Letter of column
* @customfunction
*/
function COL_NR2LETTER(aNumber) {
var letterArray = ['-', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];
if (aNumber < 1 || aNumber > letterArray.length)
throw "column index out of bound error";
return letterArray [aNumber];
}
现在可以复制了
=ImportRange('_keys'!$B;
"2015!" & COL_NR2LETTER(Column(A1)) &"200:"& COL_NR2LETTER(Column(A1)) &"203")
从第 X 列到第 X+n 列。
您可以使用COLUMN()
函数将当前单元格的列作为数字获取。使用 ADDRESS()
你可以把它变成一个单元格引用字符串。请参阅 COLUMN and ADDRESS.
的文档
您的代码变为
=ImportRange('_keys'!$B;
CONCATENATE("2015!", ADDRESS(200, COLUMN()-Y, 4),
":", ADDRESS(203, COLUMN()-Y, 4))
)
其中 Y 是 A 列和 X 列(此公式所在的位置)之间的偏移量。 ADDRESS
的第三个参数使行和列都相对(没有 $
)。请注意,ADDRESS
的参数顺序是 row
然后是 column
,很烦人。
在 X 列的电子表格中,我有以下公式:
=ImportRange('_keys'!$B;"2015!A200:A203")
现在我想将此公式复制到 X+n 列(在本例中为 X+2),这样它应该如下所示:
=ImportRange('_keys'!$B;"2015!C200:C203")
但它不会更改列,我必须手动更改它。 是否可以更改此公式,使其始终使用公式所在的列?
我的解决方案:
我编写了一个将数字转换为字母的简单自定义函数。
/**
* Converts number of column into column letter
*
* @param {Number} aNumer Number of column
* @return {String} Letter of column
* @customfunction
*/
function COL_NR2LETTER(aNumber) {
var letterArray = ['-', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];
if (aNumber < 1 || aNumber > letterArray.length)
throw "column index out of bound error";
return letterArray [aNumber];
}
现在可以复制了
=ImportRange('_keys'!$B;
"2015!" & COL_NR2LETTER(Column(A1)) &"200:"& COL_NR2LETTER(Column(A1)) &"203")
从第 X 列到第 X+n 列。
您可以使用COLUMN()
函数将当前单元格的列作为数字获取。使用 ADDRESS()
你可以把它变成一个单元格引用字符串。请参阅 COLUMN and ADDRESS.
您的代码变为
=ImportRange('_keys'!$B;
CONCATENATE("2015!", ADDRESS(200, COLUMN()-Y, 4),
":", ADDRESS(203, COLUMN()-Y, 4))
)
其中 Y 是 A 列和 X 列(此公式所在的位置)之间的偏移量。 ADDRESS
的第三个参数使行和列都相对(没有 $
)。请注意,ADDRESS
的参数顺序是 row
然后是 column
,很烦人。