自动下移或插入单元格所以不会出现 "Array not expanded, would overwite data" 错误
Automatically shift down or insert cells so don't get "Array not expanded, would overwite data" error
我正在为角色扮演游戏 Pathfinder 制作 Google Sheet,我希望能够在其中将不同的怪物统计数据块从另一个站点复制并粘贴到 A 列,并让每个部分使用 SPLIT 等放入 B 列和其他列中的各个单元格。然后最终我希望能够在上面添加不同的模板,例如骨架模板,它会自动更改一些统计信息。
但我在这方面遇到了麻烦,因为怪物之间的统计块可能会有很大差异类法术能力 (SLA) 对于某些怪物可能是空白的,而对于其他怪物则可能很多。我有一个数组公式来获取“类法术能力”和下一部分“统计”之间的所有数据,并将每个 SLA 拆分到列 B 中。但是如果 SLA 太多,则会出现覆盖错误,因为结果将超过 B 列中的 sections/formulas。
我可以将那些较低的 B 列部分向下移动以获得足够的空间,但是因为我不知道任何怪物可能有多少 SLA 我不知道我需要多少 space 单元格保持开放。我可以留下 25 个,但如果我不认识的怪物有 26 个怎么办?另外,我不想像那样在 B 列中留下很多空白 space,因为这会使它更难阅读或处理,而且大部分时间都是空白并且毫无用处。
所以我一直在尝试找到一种方法,对于我粘贴到 A 列中的每个怪物,自动为 B 列中的 SLA 部分添加适量的空白单元格,相应地向下移动其下方的单元格。但是,我一直无法找到可以执行此操作的公式或脚本。我可以在公式中添加一部分来计算“类法术能力”和“统计数据”之间有多少单元格,并使用它来了解我需要多少 space 但我找不到添加单元格的公式或下移单元格。
编辑:编辑:单元格是 B21。现在我在 B41 单元格中有很多空白单元格,下面有很多空白单元格,还有其他单元格下面有公式。如果我将“STATISTICS”移动得太高,我会得到错误,具体取决于怪物拥有多少 SLA 或法术。理想情况下,我希望默认情况下 B21 下面没有空白单元格,这样我就可以在单元格 B22 或 B23 中包含统计信息。然后无论我在 A 列 post 中的哪个统计块,我都想将 STATISTICS 及其下方的所有单元格推入必要数量的单元格,以便不会发生覆盖错误。如果怪物没有 SLA,它就不会移动。如果它有 15 行 SLA,则统计信息及其下方的所有单元格将向下移动 14,因此有 15 个单元格(计算 B21 本身)在 B 列中显示这些 SLA。
这是我在该单元格中的公式。编辑:更新:
=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(JOIN("@", (REGEXREPLACE(REGEXREPLACE((INDIRECT("A"&(ARRAYFORMULA(MIN(IF(REGEXMATCH(A1:A40, "Spell-Like|Spells Known"), ROW(A1:A40), )))+2))):(INDIRECT("A"&(ARRAYFORMULA(MIN(IF(REGEXMATCH(A:A, "TACTICS|STATISTICS"), ROW(A:A), )))-2))),"Known","Known:;"),"Prepared","Prepared:;"))), "@")), ",""—"";"))
有 + 和 - 2,因为实际的 SLA 在该部分的上方和下方都有空白 space。
下面是统计数据的示例。
|常量 |保护免受伤害 |
| 3/天 |侦测思想(DC 13)|梦想(DC 16)|噩梦(DC 16)|建议 (DC 14) |
| 1/天 |影子行走 |
统计数据
这是 sheet:
https://docs.google.com/spreadsheets/d/1R8LYW2HGhpM3TS9m4ZBaNstwzNtsyll9fZnQ8WaA3Nc/edit#gid=0
原来的公式很复杂,所以我只用一个简单的例子来回答。
请自行修改。
=ArrayFormula(SPLIT({ INDIRECT("A"&MATCH("Section A",A:A,0)&":A"&MATCH("Section B",A:A,0)-2); "(blank)"; INDIRECT("A"&MATCH("Section B",A:A,0)&":A"&MATCH("Section C",A:A,0)-2); "(blank)"; INDIRECT("A"&MATCH("Section C",A:A,0)&":A"&MATCH("Section C",A:A,0)+2) },","))
对每个数组执行不同的分割
=ARRAYFORMULA(SPLIT({A76;A77},IF(REGEXMATCH({A76;A77},";"),";",",")))
我正在为角色扮演游戏 Pathfinder 制作 Google Sheet,我希望能够在其中将不同的怪物统计数据块从另一个站点复制并粘贴到 A 列,并让每个部分使用 SPLIT 等放入 B 列和其他列中的各个单元格。然后最终我希望能够在上面添加不同的模板,例如骨架模板,它会自动更改一些统计信息。
但我在这方面遇到了麻烦,因为怪物之间的统计块可能会有很大差异类法术能力 (SLA) 对于某些怪物可能是空白的,而对于其他怪物则可能很多。我有一个数组公式来获取“类法术能力”和下一部分“统计”之间的所有数据,并将每个 SLA 拆分到列 B 中。但是如果 SLA 太多,则会出现覆盖错误,因为结果将超过 B 列中的 sections/formulas。
我可以将那些较低的 B 列部分向下移动以获得足够的空间,但是因为我不知道任何怪物可能有多少 SLA 我不知道我需要多少 space 单元格保持开放。我可以留下 25 个,但如果我不认识的怪物有 26 个怎么办?另外,我不想像那样在 B 列中留下很多空白 space,因为这会使它更难阅读或处理,而且大部分时间都是空白并且毫无用处。
所以我一直在尝试找到一种方法,对于我粘贴到 A 列中的每个怪物,自动为 B 列中的 SLA 部分添加适量的空白单元格,相应地向下移动其下方的单元格。但是,我一直无法找到可以执行此操作的公式或脚本。我可以在公式中添加一部分来计算“类法术能力”和“统计数据”之间有多少单元格,并使用它来了解我需要多少 space 但我找不到添加单元格的公式或下移单元格。
编辑:编辑:单元格是 B21。现在我在 B41 单元格中有很多空白单元格,下面有很多空白单元格,还有其他单元格下面有公式。如果我将“STATISTICS”移动得太高,我会得到错误,具体取决于怪物拥有多少 SLA 或法术。理想情况下,我希望默认情况下 B21 下面没有空白单元格,这样我就可以在单元格 B22 或 B23 中包含统计信息。然后无论我在 A 列 post 中的哪个统计块,我都想将 STATISTICS 及其下方的所有单元格推入必要数量的单元格,以便不会发生覆盖错误。如果怪物没有 SLA,它就不会移动。如果它有 15 行 SLA,则统计信息及其下方的所有单元格将向下移动 14,因此有 15 个单元格(计算 B21 本身)在 B 列中显示这些 SLA。
这是我在该单元格中的公式。编辑:更新:
=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(JOIN("@", (REGEXREPLACE(REGEXREPLACE((INDIRECT("A"&(ARRAYFORMULA(MIN(IF(REGEXMATCH(A1:A40, "Spell-Like|Spells Known"), ROW(A1:A40), )))+2))):(INDIRECT("A"&(ARRAYFORMULA(MIN(IF(REGEXMATCH(A:A, "TACTICS|STATISTICS"), ROW(A:A), )))-2))),"Known","Known:;"),"Prepared","Prepared:;"))), "@")), ",""—"";"))
有 + 和 - 2,因为实际的 SLA 在该部分的上方和下方都有空白 space。
下面是统计数据的示例。
|常量 |保护免受伤害 |
| 3/天 |侦测思想(DC 13)|梦想(DC 16)|噩梦(DC 16)|建议 (DC 14) |
| 1/天 |影子行走 |
统计数据
这是 sheet: https://docs.google.com/spreadsheets/d/1R8LYW2HGhpM3TS9m4ZBaNstwzNtsyll9fZnQ8WaA3Nc/edit#gid=0
原来的公式很复杂,所以我只用一个简单的例子来回答。 请自行修改。
=ArrayFormula(SPLIT({ INDIRECT("A"&MATCH("Section A",A:A,0)&":A"&MATCH("Section B",A:A,0)-2); "(blank)"; INDIRECT("A"&MATCH("Section B",A:A,0)&":A"&MATCH("Section C",A:A,0)-2); "(blank)"; INDIRECT("A"&MATCH("Section C",A:A,0)&":A"&MATCH("Section C",A:A,0)+2) },","))
对每个数组执行不同的分割
=ARRAYFORMULA(SPLIT({A76;A77},IF(REGEXMATCH({A76;A77},";"),";",",")))