点击上方蓝字 --> 点击“...”--> 选择“设为星标”
之前教了大家行列转置的各种方法,用的是单行单列的案例,那么今天再升级一下难度,要以每 n 列为一组,将其转置有哪些好办法?
案例:
将下图 1 中的所有获客和流失数据都放到同一列中,并添加月份列加以区分。
效果下图 2 所示。
解决方案 1:
1. 在 B12 单元格中输入以下公式 --> 向右向下拖动单元格,复制公式:
=D2&""
2. 在“姓名”列后面插入一列“月份”列 --> 选中 B2:B31 区域 --> 输入以下公式 --> 按 Ctrl+Enter:
=(INT((ROW(A1)-1)/10)+1)&"月"
公式释义:
INT((ROW(A1)-1)/10):
int 函数的作用是将数字向下舍入到最接近的整数;
语法为 int(需要进行向下舍入取整的数值);
本例中一共有 10 个人名,所以每 10 行为一组,使用相同的编号,每递增 10 行编号步长增加一次;
随着公式下拉,row 函数结果递增,用 0 到 9 依次除以 10 并向下取整,得到的结果为连续 10 行 0;下一个 10 行的结果则为连续 10 行 1,依此类推;
...+1:将上述结果 +1,编号就变成了从 1 开始;
...&"月":在序号后面加上文字“月”
3. 复制“姓名”列中的所有人名 --> 选中 A12:A31 区域 --> 粘贴
4. 将 B 至 D 列的公式复制粘贴为值。
5. 此时 C、D 列的数字仍然是文本格式,选中有绿色小箭头的数字区域 --> 点击区域左上角的“!”下拉框 --> 在弹出的菜单中选择“转换为数字”
6. 删除多余的行和列、复制格式、修改 C、D 列的标题。
解决方案 2:
其实这个方案的公式要复杂一些,很多同学因此看了了第一种就不想再学这个了,这个公式是借此教大家学会对 indirect 函数的灵活运用,所以一定要看下去。
1. 在 B12 单元格中输入以下公式 --> 向右向下拖动复制公式:
=INDIRECT(ADDRESS(ROW(A2),COLUMN(D1),4))&""
公式释义:
ADDRESS(ROW(A2),COLUMN(D1),4):
之前的推文中我们已经讲解过这个函数,作用是提取出单元格的地址;
语法为 ADDRESS(行号,列号,引用类型),此处的引用类型为 4,表示相对引用;
本例因为既要横向引用又要纵向引用,所以两个参数分别要用到 row 和 column,这样才能拖动后顺位到下一个行或列;
INDIRECT(...):该函数的作用是返回参数中单元格的值;
&"":如遇空单元格,则返回空值,而不是显示 0,避免引起误解
2. 后面的步骤就跟前一个解决方案完全一样。