Excel 基于编号的轮廓将字符从单元格移动到新单元格
我在Windows 7上运行Office Professional Plus 2013。具有下图所示的矩阵 矩阵数据可在本文件中找到 以下是关于矩阵的两个事实:Excel 基于编号的轮廓将字符从单元格移动到新单元格,excel,excel-formula,vba,Excel,Excel Formula,Vba,我在Windows 7上运行Office Professional Plus 2013。具有下图所示的矩阵 矩阵数据可在本文件中找到 以下是关于矩阵的两个事实: 列A是一个数字轮廓,轮廓级别从1到13不等 大纲编号按顺序排列 以下是矩阵组织方式的说明: A4(轮廓级别2)在M4中有一个支架,其中M列(标记为“L-02”)对应于轮廓级别2 A16(轮廓级别6)在I6(眼睛6)中有一个括号,其中I列(标记为“L-06”)对应于轮廓级别6 A7(轮廓级别5)在J7中没有括号,其中J列(标记为“L-0
在
谷歌电子表格中,一组带有红色“x”的单元格样本表示括号应移动到的位置。我认为您应该找到括号所在的列。然后定义一个数组,该数组从同一行开始,从找到的+1列开始。所以在你第16排的情况下。它应该从数据集右下边界的J16开始(图中为O36)。
然后搜索第一次遇到括号时,可以在行数上使用for循环,在列上嵌套for循环,并在其中嵌套if语句。然后,在标识该行时,可以使用单元格将括号复制到新单元格中
我几周前才开始写脚本,所以我无法精确地编写这段代码。但它看起来像这样
DIM Array as string
DIM totalrows as Thisworkbook.thisworkseet.count.rows
FOR rows x to totalrows
FOR column X to totalcolumns
IF cells(row,col) = Cells(cell you are looking up)
THEN
Cells (cell you are looking up) = (row -1, col)
Exit FOR
End if
Next column
Next row
如果我理解算法,你可以用公式来解。以下是我的结果:
P2
(向下拖动以填充列)中的公式为:
它计算当前大纲中
的数量(在某些情况下,您有,
而不是
,因此您应该先使用替换所有
来修复它)
范围Q1:AD1
包含级别编号
Q2
中的公式(用它填充整个范围):
它检查当前级别是否高于下一级别,并显示从(下一行级别+1)到(当前行级别)的级别的括号
您的示例和我的结果之间的唯一区别在于L10
单元格,但我认为L9
中的括号应该根据您的算法移动到L10
(而不是L11
);我会试验并告诉你结果。不客气。也许还有一些人能够从头开始编写此代码,因此有了一个更简单的解决方案。在您的示例表中:L11
中的x
标记不应该放在L10
中吗?如果您指的是第694行,答案是否定的。原因:694是693的孩子。此外,694有4个子节点,但它们是层次结构这一部分中的终端节点,这意味着它们没有子节点。同样的条件也适用于697。列L-11
中x
的平衡是正确的。我指的是单元格L11
和L10
,因此将x
从第11行向上移动一行。不,因为轮廓指示下一行是子行,因此是更深层次的(即上一层次+1)您的描述表明我们应该从L9
中取括号,找到第一个较短或相等的行(L11),返回一行(L10),然后将括号放在那里。那么为什么它在L11?TX中呢?我现在就来试试这个。我已经将LEN
设置为与您的图像等效。已将IF
公式复制到Q2
。但是,当我将Q2
复制到范围(Q-AD和结束行)中的单元格的平衡时,我没有得到我在图像中看到的括号。我做错了什么?@Jay Gray你能把它添加到你的谷歌表单样本中吗?我可以看看用户的错误!我成功地复制了你的结果。现在让我看看你发现的可能的错误。太棒了。我现在看到了手动练习中的错误。仅供参考,您的解决方案是在Excel中自动构建JSON数据结构。这将节省我的工作时间,并消除错误。我需要一段时间将Excel结构转换为JSON,然后对其进行测试。如果我遇到我无法处理的问题,我会回到你身边。ITMT,非常好的解决方案-没有VB!
=LEN(A2)-LEN(SUBSTITUTE(A2,".",""))
=IF(AND($P2>$P3,MEDIAN($P2,$P3+1,Q$1)=Q$1),"]","")