尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Excel数据重塑:多行多列与单行单列互转的OFFSET与INDEX函数实战

Excel数据重塑:多行多列与单行单列互转的OFFSET与INDEX函数实战 1. 项目概述从“数据泥潭”到“清晰表格”的转换艺术如果你经常和EXCEL打交道肯定遇到过这种让人头疼的场景市场部同事发来一份调研数据所有选项像糖葫芦一样串在一列里每个受访者的答案堆了十几行你想做透视表分析没门。或者财务系统的导出一份报表关键指标全部平铺在一行几十列数据拉不到头想按月份筛选对比眼睛都得看花。这种多行多列与一行一列之间的数据结构错配简直是数据整理中的“经典噩梦”。它不只是一个简单的“转置”按钮就能解决的——那个按钮只能对付矩阵形状完全对称的情况。真正的挑战在于如何把结构混乱但逻辑关联的数据重新“编织”成一张干净、规整、便于分析的二维表格。这恰恰是“EXCEL中多行多列数据与一行或一列数据的互相转换”要解决的核心问题。它远不止于一个操作技巧而是一套基于函数公式的数据重塑方法论。无论是将堆积如山的单列数据拆分成多行多列的矩阵还是将拉得过长的单行数据折叠成规整的多行记录其本质都是对数据序列进行有规律的索引、定位和重组。掌握了这套方法你就能从容应对各种非标准数据源的清洗工作将原始数据快速转化为可供分析、图表化或上报的规范格式。从热搜词OFFSET、COLUMN、ROW、转置就能看出高手们解决这个问题的武器库非常明确。OFFSET函数是核心引擎它能根据指定的偏移量从某个起点“跳跃”到目标单元格COLUMN和ROW函数则是精准的“坐标生成器”能提供规律变化的行号与列号而INDEX、INDIRECT等函数则是重要的辅助工具。理解并组合运用这些函数你就能像编写一段简单的程序逻辑一样告诉EXCEL如何自动地、批量地完成复杂的数据转换。接下来我将拆解几种最常见也最实用的转换场景从思路到公式一步步带你掌握这项高效办公的“硬核”技能。2. 核心场景与解决思路拆解在动手写公式之前我们必须先厘清要解决的具体是什么问题。数据转换的需求虽然五花八门但归根结底可以归纳为以下两大类、四种典型场景。理解每种场景的“数据形态”和“目标形态”是设计正确公式的前提。2.1 场景一一列数据转换为多行多列纵向展开这是最常见的情况数据源是长长的一列。根据其内在逻辑又可分为两种子场景子场景A定行/定列转换——已知目标表格的行数或列数典型数据一份名单、一系列产品ID、一整年的日期序列所有数据都在A列从A1向下排列。目标将其转换为一个N行M列的表格。例如将100个名字放入一个10行10列的表格中或者将365天的日期排成一个7列代表星期的日历视图。核心思路我们需要一个公式能根据当前单元格所在的行和列自动计算出应该去源数据单列中的第几个位置取数。这涉及到利用ROW()和COLUMN()函数生成一个连续的、递增的序号再通过这个序号去索引源数据。INDEX函数或OFFSET函数是完成这个“按序号取数”动作的关键。子场景B按类别分组转换——数据本身带有分组标识典型数据A列是类别如部门、地区B列是值如姓名、销售额。每个类别的数据连续排列但不同类别的数据条数可能不同。目标将每个类别的数据转换到单独的一列中形成一张每个类别一列数据向下填充的表格。核心思路这比定行转换更复杂一些。我们需要公式能动态识别类别边界。一种方法是结合IFERROR、INDEX和SMALLIF组合函数数组公式实现按条件筛选并横向排列。这是中级到高级的用法思路是“筛选出属于A类别的所有数据然后依次放入第一行”。2.2 场景二一行数据转换为多行多列横向展开与场景一镜像数据源是长长的一行。子场景A定行/定列转换典型数据所有数据在第一行从A1向右排列。可能是从某个系统导出的横向时间序列数据。目标将其转换为一个N行M列的表格。核心思路与“一列转多行多列”逻辑完全一致只是坐标轴互换。之前用ROW()和COLUMN()生成序号现在依然用它们但计算序号时行和列的权重互换。OFFSET的偏移参数也从主要针对行偏移变为针对列偏移。子场景B多行多列数据转换为一列纵向堆积典型数据一个已经存在的N行M列的规范表格。目标将其所有数据按顺序堆积到一列中。通常用于为某些需要单列输入的系统准备数据或者进行某些统计分析前的数据规整。核心思路这是“一列转多行多列”的逆过程。我们需要让公式按照“先遍历第一列所有行再遍历第二列所有行…”的顺序来生成序号。此时ROW()和COLUMN()函数在序号计算中扮演的角色需要巧妙设计通常公式为INDEX(源数据区域, 行计算逻辑, 列计算逻辑)并通过拖动填充来完成全部转换。子场景C多行多列数据转换为一行横向连接典型数据同样是一个N行M列的规范表格。目标将其所有数据按顺序连接成一行。核心思路这是“一行转多行多列”的逆过程也是“多行多列转一列”的横向版本。思路依旧是生成一个从1到总数据个数N*M的连续序号然后让这个序号依次去抓取原表格中第1行第1列、第1行第2列……第N行第M列的数据。注意在设计公式前务必在纸上或表格空白处画出源数据和目标数据的结构草图明确行列对应关系。这是避免公式写错最有效的一步。3. 核心函数工具箱深度解析工欲善其事必先利其器。EXCEL提供的函数就像乐高积木单个看很简单组合起来却能构建复杂逻辑。下面我们深入剖析这几个核心函数理解它们如何成为数据转换的“基石”。3.1 OFFSET函数灵活的定位器OFFSET函数是动态引用领域的王牌。它的作用是以一个单元格为起点告诉你“向上/下走几行向左/右走几列”然后返回那个新位置的单元格或区域。基本语法OFFSET(reference, rows, cols, [height], [width])reference起始点一个单元格引用。rows向下正数或向上负数偏移的行数。cols向右正数或向左负数偏移的列数。[height],[width]可选返回区域的行高和列宽。如果省略则返回与起始点相同尺寸的区域通常就是一个单元格。在转换中的应用 在“一列转多行多列”的场景中假设源数据在A1:A100。我们想在目标区域C1单元格第一行第一列开始放置转换后的数据。 对于C1它应该取A1偏移0行0列。 对于C2第一行第二列它应该取A2。如何让公式在向右拖动时自动从取A1变成取A2这就需要让rows参数随着列变化而变化。 我们可以这样构建OFFSET($A$1, COLUMN(A1)-1 (ROW(A1)-1)*M, 0)。这里COLUMN(A1)-1在向右拖动时产生0,1,2,…的序列(ROW(A1)-1)*M在向下拖动时产生0, M, 2M,…的序列M是目标表格的列数。两者相加就生成了0,1,2,3…的连续索引从而依次取到A1,A2,A3...实操心得OFFSET是一个易失性函数意思是只要工作表内有任何计算发生它都会重新计算一次。在数据量极大数万行且公式很多的情况下可能会略微影响性能。但对于绝大多数日常办公场景这点性能损耗可以忽略不计。它的优势在于逻辑直观构建动态范围如最近N天的数据合计的能力无可替代。3.2 INDEX函数精准的索引器如果说OFFSET是通过“相对运动”来定位那么INDEX就是通过“绝对坐标”来抓取。它根据行号和列号从一个给定的区域中返回特定位置的值。基本语法引用形式INDEX(array, row_num, [column_num])array一个单元格区域或数组常量。row_num要返回的值在区域中的行序号。[column_num]要返回的值在区域中的列序号。如果区域只有一列可省略。在转换中的应用 在“多行多列转一列”的场景中假设源数据在B2:D5一个4行3列的区域。我们要在F列从上到下堆积这些数据。 对于F2应该取B2即区域中的第1行第1列。 对于F3应该取C2即区域中的第1行第2列。 这里的关键是计算出行号和列号。我们可以利用INT和MOD函数来分解一个连续的序号。 假设我们在F2输入公式并向下拖动INDEX($B$2:$D$5, INT((ROW(A1)-1)/3)1, MOD(ROW(A1)-1, 3)1)这个公式的精妙之处在于ROW(A1)向下拖动生成1,2,3,4…。(ROW(A1)-1)/3然后取整INT得到0,0,0,1,1,1,…这正好对应了源数据中的“行索引”需要1。MOD(ROW(A1)-1, 3)得到0,1,2,0,1,2,…这正好对应了源数据中的“列索引”需要1。 通过这个公式F2:F13就依次取到了B2,D2,B3,D3,...B5,D5的所有值。与OFFSET的对比选择INDEX通常非易失性性能更优。INDEX的坐标逻辑在处理“矩阵重组”时往往更简洁尤其是配合数学运算生成行列号时。OFFSET在需要基于一个起点动态扩展或收缩范围时更有优势。个人建议在数据转换这类固定区域索引的任务中优先考虑使用INDEX函数逻辑清晰且计算效率高。3.3 ROW与COLUMN函数环境的感知器这两个函数没有参数它们的作用就是返回当前单元格的行号和列号。基本语法ROW([reference])/COLUMN([reference])如果省略reference则返回公式所在单元格的行号/列号。如果提供reference如ROW(A5)则返回该引用单元格的行号/列号。在转换中的核心作用 它们是生成规律性序列的“种子”。在之前INDEX和OFFSET的例子中我们已经看到几乎所有复杂的索引计算起点都是ROW(A1)或COLUMN(A1)。ROW(A1)返回1当公式向下填充时引用会变为ROW(A2)、ROW(A3)从而自然生成1,2,3,…的序列。COLUMN(A1)同理向右填充生成1,2,3,…A列是1B列是2依此类推。 通过给这个序列减去一个固定值如ROW(A1)-1得到0,1,2…再进行乘、除、取整、取余等数学运算我们就能构造出任何我们需要的、有规律的行索引和列索引模式。它们是整个转换公式的“发动机”。3.4 INDIRECT函数文本的翻译官INDIRECT函数比较特殊它接收一个文本格式的单元格地址然后返回该地址所指向的单元格的值。基本语法INDIRECT(ref_text, [a1])ref_text一个文本字符串表示一个单元格引用如A1、Sheet2!B5。[a1]一个逻辑值指定引用样式通常省略。在转换中的辅助应用 它在数据转换中并非主力但在一些动态构造表头或跨表引用时很有用。例如当你的列标题是月份“1月”、“2月”…而源数据在不同工作表以这些月份命名时你可以用INDIRECT(B$1!A1)这样的形式来动态组装引用地址。但在纯粹的行列结构转换中INDEX和OFFSET更直接。注意事项INDIRECT也是易失性函数且由于它处理的是文本地址当工作表名或引用结构非常复杂时公式容易出错且难以调试。除非必要应谨慎使用。4. 五大经典转换场景的公式实现与实操理论说得再多不如动手实操。下面我们针对最常见的五种转换场景给出具体的公式、步骤和详细解释。你可以打开一个空白EXCEL跟着一步步操作。4.1 场景实操单列数据转置为N行M列矩阵目标将A1:A100的100个数据转换为一个10行10列的矩阵从C1开始存放。步骤与公式确定目标区域在C1单元格输入公式。构建核心公式在C1输入以下公式INDEX($A:$A, (ROW(C1)-ROW($C$1))*10 COLUMN(C1)-COLUMN($C$1) 1)公式拆解ROW(C1)-ROW($C$1)当公式在目标区域向下拖动时计算当前行相对于起始行C1的偏移行数0,1,2…9。(ROW(C1)-ROW($C$1))*10将行偏移乘以总列数10得到在源数据单列中每换一行需要跳过的数据个数。COLUMN(C1)-COLUMN($C$1)当公式向右拖动时计算当前列相对于起始列C的偏移列数0,1,2…9。将两者相加(行偏移*10 列偏移)就得到了一个从0开始的索引号。最后1因为INDEX函数需要从1开始的序号。INDEX($A:$A, ...)根据计算出的序号从A列取出对应的值。填充公式将C1单元格的公式向右拖动填充至L1共10列再选中C1:L1这个区域向下拖动填充至第10行。结果验证此时C1应为A1D1应为A2…L1应为A10。C2应为A11D2应为A12以此类推。L10应为A100。使用OFFSET的替代公式 在C1输入OFFSET($A$1, (ROW(C1)-ROW($C$1))*10 (COLUMN(C1)-COLUMN($C$1)), 0)原理与INDEX版本完全相同只是OFFSET的rows参数直接使用了计算出的索引号从0开始cols参数为0表示始终在A列偏移。实操心得这里使用ROW(C1)-ROW($C$1)而不是简单的ROW(A1)-1是为了让公式更具“可移植性”。即使你把目标矩阵的起始位置从C1移到F5也只需要修改公式中的$C$1为$F$5即可无需重写内部逻辑。这是编写健壮公式的一个好习惯。4.2 场景实操带类别的单列数据转为多列二维表目标A列是部门“销售”、“技术”、“行政”重复出现B列是员工姓名。要将数据转换为“部门”作为表头其下员工姓名纵向排列的表格。源数据 (A:B列)目标数据 (从D列开始)部门姓名销售技术行政销售张三张三李四王五技术李四赵六钱七孙八行政王五吴九销售赵六技术钱七行政孙八销售吴九步骤与公式使用FILTER函数Office 365/Excel 2021及以上 这是现代EXCEL中最优雅的解决方案。在D1输入“销售”E1输入“技术”F1输入“行政”。在D2单元格输入公式FILTER($B:$B, $A:$AD$1)公式拆解FILTER(要返回的数组, 条件数组条件)这里$B:$B是所有姓名$A:$AD$1会生成一个布尔值数组TRUE/FALSE对应A列部门是否等于D1即“销售”。FILTER函数会筛选出所有条件为TRUE的对应行即所有“销售部”的姓名并动态溢出到下方的单元格。将D2的公式向右拖动填充至F2。结果D2下方会动态出现“张三”、“赵六”、“吴九”E2下方出现“李四”、“钱七”F2下方出现“王五”、“孙八”。步骤与公式使用经典INDEXSMALLIF数组公式通用版本 如果你的EXCEL版本较旧可以使用这个强大的数组公式。同样设置好D1:F1的表头。在D2单元格输入公式然后按Ctrl Shift Enter组合键确认公式两端会出现大括号{}IFERROR(INDEX($B:$B, SMALL(IF($A$1:$A$1000D$1, ROW($A$1:$A$1000)), ROW(A1))), )将D2的公式向右、向下拖动填充。公式拆解IF($A$1:$A$1000D$1, ROW($A$1:$A$1000))这是一个数组运算。它检查A列前1000行是否等于“销售”D$1如果是则返回该行的行号否则返回FALSE。结果是一个由行号和FALSE混合的数组如{2;FALSE;FALSE;5;...}假设“销售”在第2行和第5行。SMALL(..., ROW(A1))SMALL函数从上面得到的数组中提取第ROW(A1)小的值。ROW(A1)向下拖动时为1,2,3…。所以第一次提取第1小的行号2第二次提取第2小的行号5。INDEX($B:$B, ...)用SMALL提取出的行号去B列取出对应的姓名。IFERROR(..., )当SMALL找不到第N个小的值即该部门没有第N个员工时会返回错误。IFERROR将其屏蔽为空字符串。踩坑记录使用数组公式时务必注意引用范围$A$1:$A$1000要覆盖所有可能的数据区域但也不要盲目引用整列如$A:$A在旧版本中引用整列可能导致计算缓慢。建议根据实际数据量设置一个稍大的固定范围。4.3 场景实操单行数据转置为N行M列矩阵目标将A1:CV1的100个数据第一行转换为一个10行10列的矩阵从C1开始存放。步骤与公式 这个场景与“单列转矩阵”完全对称。在C1输入公式INDEX($1:$1, (ROW(C1)-ROW($C$1))*10 COLUMN(C1)-COLUMN($C$1) 1)注意这里INDEX的第一个参数是$1:$1即第一整行。向右向下填充公式至10行10列即可。逻辑解释公式逻辑与4.1节完全一致。(ROW(C1)-ROW($C$1))*10计算行偏移量COLUMN(C1)-COLUMN($C$1)计算列偏移量。因为源数据是横向的所以这个计算出的索引号直接用于INDEX在行中定位。使用OFFSET的替代公式OFFSET($A$1, 0, (ROW(C1)-ROW($C$1))*10 (COLUMN(C1)-COLUMN($C$1)))这里OFFSET的rows参数为0始终在第一行cols参数使用计算出的索引号进行横向偏移。4.4 场景实操多行多列矩阵转换为一列纵向堆积目标将B2:D54行3列的数据按“先列后行”的顺序即先读完B列再读C列最后读D列堆积到F2开始的单列中。步骤与公式在F2单元格输入公式INDEX($B$2:$D$5, INT((ROW(A1)-1)/3)1, MOD(ROW(A1)-1, 3)1)将F2的公式向下拖动填充直到出现空白或错误总共应填充4*312行。公式拆解这是本节最关键的逻辑ROW(A1)向下拖动生成1,2,3…12。(ROW(A1)-1)得到0,1,2…11。列数3。计算行索引INT((ROW(A1)-1)/3)。0/30取整01/3≈0.33取整02/3≈0.66取整03/31取整1…。结果是0,0,0,1,1,1,2,2,2,3,3,3。1后变成1,1,1,2,2,2,3,3,3,4,4,4。这正好对应了源数据区域中每一行需要被重复取用的次数因为每一行的数据会分散到堆积列的不同位置。计算列索引MOD(ROW(A1)-1, 3)。0除以3余01除以3余12除以3余23除以3余0…。结果是0,1,2,0,1,2,0,1,2,0,1,2。1后变成1,2,3,1,2,3,1,2,3,1,2,3。这正好对应了源数据区域中列的顺序循环。INDEX(区域, 行索引, 列索引)根据上面计算出的行列索引依次取出(1,1)即B2(1,2)即C2(1,3)即D2(2,1)即B3……最终完成堆积。如果需要“先行后列”堆积先读完第2行再读第3行 公式需要稍作调整交换行和列在计算中的角色INDEX($B$2:$D$5, MOD(ROW(A1)-1, 4)1, INT((ROW(A1)-1)/4)1)这里除数和取模的参数换成了行数4。逻辑是先循环行号1,2,3,4每循环完一轮行列号加1。4.5 场景实操多行多列矩阵转换为一行横向连接目标将B2:D54行3列的数据按“先行后列”的顺序连接成一行从H2开始存放。步骤与公式在H2单元格输入公式INDEX($B$2:$D$5, INT((COLUMN(A1)-1)/3)1, MOD(COLUMN(A1)-1, 3)1)将H2的公式向右拖动填充12列4*312。公式拆解这个公式是4.4节“纵向堆积”公式的横向版本。核心逻辑一模一样只是把生成序列的ROW(A1)换成了COLUMN(A1)因为我们现在是向右填充。COLUMN(A1)向右拖动生成1,2,3…12。INT((COLUMN(A1)-1)/3)1生成行索引序列1,1,1,2,2,2,3,3,3,4,4,4。MOD(COLUMN(A1)-1, 3)1生成列索引序列1,2,3,1,2,3,1,2,3,1,2,3。INDEX函数根据这两个序列依次取出数据并横向排列。5. 动态数组公式的降维打击Office 365/Excel 2021如果你使用的是较新版本的Office 365或Excel 2021那么恭喜你你拥有了更强大的武器——动态数组函数。它们可以让之前复杂的公式变得异常简洁。5.1 TOCOL和TOROW函数一键转换这两个函数是专门为行列转换而生的。TOCOL(array, [ignore], [scan_by_column])将数组或区域转换为单列。[ignore]可选忽略某些类型的值如0或错误。[scan_by_column]可选默认为FALSE按行扫描。TRUE则按列扫描即“先列后行”。TOROW(array, [ignore], [scan_by_column])将数组或区域转换为单行。应用示例多行多列转一列按行扫描TOCOL(B2:D5)。一个公式搞定结果自动溢出成一列。多行多列转一列按列扫描TOCOL(B2:D5,,TRUE)。多行多列转一行TOROW(B2:D5)。一列转多行多列虽然TOCOL和TOROW是“降维”但结合WRAPCOLS和WRAPROWS函数可以“升维”。WRAPCOLS(A1:A100, 10)将A1:A100的单列数据按顺序包裹成一个10列的动态数组行数自动计算。WRAPROWS(A1:A100, 10)将单列数据按顺序包裹成一个10行的动态数组列数自动计算。5.2 利用FILTER和排序构造复杂转换对于4.2节中“带类别的数据转多列”新版本的FILTER函数已经给出了最简解。此外你还可以结合SORT、UNIQUE等函数玩出更多花样。例如想要将转换后的每个部门姓名列单独排序SORT(FILTER($B:$B, $A:$AD$1))一个公式直接得到排序后的结果。6. 常见问题、错误排查与性能优化即使理解了原理在实际操作中仍会遇到各种问题。下面是一些常见坑点及解决方法。6.1 公式拖动填充后结果错误或重复问题现象填充后所有单元格结果都一样或者出现规律性的重复值。排查思路检查单元格引用方式这是最常见的原因。在公式中$符号锁定了行或列。例如在INDEX($A:$A, ROW(A1))中$A:$A是绝对引用无论公式复制到哪都指向A列。而ROW(A1)是相对引用向下复制会变成ROW(A2)、ROW(A3)。如果你的公式里该用相对引用的地方被$锁住了或者该锁定的没锁就会出错。手动计算第一个和第二个结果在目标区域的头两个单元格如C1和D1根据你的设计思路手动心算它们应该分别取源数据的第几个值。然后对比公式实际计算的结果。如果不一致重点检查用于计算索引号的ROW()和COLUMN()部分。使用“公式求值”功能在“公式”选项卡下点击“公式求值”可以一步步查看公式的计算过程精准定位哪一步结果不符合预期。6.2 出现#REF!、#VALUE!、#N/A等错误#REF!错误引用无效。通常是因为INDEX或OFFSET函数计算出的行号/列号超出了源数据区域的范围。例如源数据只有100行但你的公式计算出的索引号是101。检查索引号的计算逻辑特别是乘除和取整部分是否正确。#VALUE!错误值错误。通常发生在数组公式中或者函数的参数类型不匹配。例如给OFFSET的rows参数传递了一个文本值。#N/A错误找不到值。在INDEXSMALLIF数组公式中常见当SMALL函数尝试从数组中提取第K个最小值但数组中符合条件的值不足K个时INDEX会返回#N/A。这正是我们用IFERROR(..., )包裹公式的原因用来将错误显示为空白。6.3 转换后数据格式丢失如日期变成数字问题源数据中的日期、货币等格式通过公式引用过来后变成了纯数字如日期变成45001。原因与解决INDEX、OFFSET等函数返回的是单元格的值默认不携带格式。解决方法选择性粘贴为值后手动设置格式完成公式转换后选中结果区域复制然后“右键 - 选择性粘贴 - 值”。然后再手动将区域设置为所需的日期或会计格式。使用TEXT函数格式化仅适用于文本显示如果只是为了显示可以嵌套TEXT函数。例如转换日期TEXT(INDEX(源区域, ...), yyyy-mm-dd)。但这样得到的是文本无法再进行日期计算。6.4 大数据量下的性能优化建议当处理数万甚至数十万行数据时公式计算可能会变慢。避免整列引用在INDEX($A:$A, ...)或OFFSET($A$1, ...)中引用整列$A:$A会让EXCEL计算整个列超过100万行。尽量使用精确的范围如$A$1:$A$50000。优先使用INDEX而非OFFSETINDEX是非易失性函数而OFFSET是易失性函数。在大型模型中将OFFSET替换为等价的INDEX公式可以显著提升计算速度避免不必要的重算。考虑使用Power Query对于超大数据集或需要频繁重复的复杂转换任务Power Query是更专业、更强大的选择。它可以在内存中完成所有数据清洗和重塑操作加载到表格的只是结果性能极高且步骤可重复执行。将一列数据转换为矩阵或者逆透视多列转一列在Power Query中都有现成的按钮和功能。将公式结果转为静态值如果转换是一次性的在公式计算完成后立即“选择性粘贴为值”以释放公式计算带来的开销。6.5 关于“转置”粘贴的局限性很多初学者第一个想到的是“选择性粘贴 - 转置”。这个功能确实有用但它只能完成严格的矩阵转置即行变列、列变行且区域形状必须是矩形。对于本文讨论的“将一长列数据重新排列成多行多列矩阵”或者“将带类别的数据拆分成多列”普通的转置功能完全无能为力。它解决的是“表格旋转90度”的问题而不是“数据重组”的问题。理解这一点就能明白为什么我们必须借助函数公式。数据转换是EXCEL进阶之路上必须掌握的技能它考验的是你对数据结构的理解和函数组合运用的能力。从死记硬背几个公式到理解其背后的行列索引生成逻辑再到能根据新的需求自行推导出公式这个过程本身就是一次思维的升级。我个人的习惯是遇到复杂转换时永远先在纸上画出示意图明确“源”的每个格子要跑到“目标”的哪个位置找到行列号之间的数学关系然后再打开EXCEL编写公式。这个思考过程比单纯记住一百个公式模板更有价值。
返回列表