我有一张工作表,其中的数据位于单列中的 4 个唯一行中。
示例:
| Column A |
| Cell 1 |
| Cell 2 |
| Cell 3 |
| Cell 4 |
| -blank- |
我想要一个将数据调整为单行 4 列的宏。
示例:
| Column A |
| Cell 1 | Cell 2 | Cell 3 | Cell 4 |
我尝试使用键盘命令(箭头键、ctrl+x、ctrl+v)手动录制宏。这导致一个宏仅在我记录该宏的特定单元格范围内执行。这是生成的代码:
/** @OnlyCurrentDoc */
function TrashAddressAdjust() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('B1').activate();
spreadsheet.getRange('A2').moveTo(spreadsheet.getActiveRan());
spreadsheet.getRange('C1').activate();
spreadsheet.getRange('A3').moveTo(spreadsheet.getActiveRange());
spreadsheet.getRange('D1').activate();
spreadsheet.getRange('A4').moveTo(spreadsheet.getActiveRange());
spreadsheet.getRange('A2').activate();
}
;
我希望宏在任何处于活动/选定状态的单元格(即单元格 1)中启动。然后将单元格 2、单元格 3 和单元格 4 移动到单元格 1 旁边的列。最后,它将删除空白行并将活动单元格到下一个数据集的开头,即下一个单元格 1。
我希望这一切都是有道理的,我没有过度解释一切。我真的想要一个宏,无论活动单元格在哪里,它都会执行这些命令:
⬇ ctrl+x,
➡ ⬆ ctrl+v,
⬇ ⬇ ⬅ ctrl+x,
➡ ➡ ⬆ ⬆ ctrl+v,
⬇ ⬇ ⬇ ⬅ ⬅ ctrl+x,
➡ ➡ ➡ ⬆ ⬆ ⬆ ctrl+v,
⬇ ⬅ ⬅ ⬅ delete row.
这应该将活动单元格保留在我的下一个单元格 1 数据集中。现在我可以冲洗并重复。
抱歉这么啰嗦,提前感谢您的帮助。
我尝试手动记录宏,但它仅在我记录的特定单元格范围内执行。
试试这个:
function miniTranpose() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getActiveSheet();
const rg = sh.getActiveRange();
const vs = rg.getValues().flat();
const [row, col, h, w] = [rg.getRow(), rg.getColumn(), rg.getHeight(), rg.getWidth()];
if (w == 1) {
const cell = sh.getRange(row, col);
sh.getRange(row, col, h, 1).clearContent()
sh.getRange(row, col, 1, h).setValues([vs]);
}
}
演示:
只需选择顶行和您想要移动的所有行并运行此功能。