根据编号轮廓将字符从一个单元格移动到一个新单元格

Move a character from a cell to a new cell based on a numbered outline

我 运行 Windows 上的 Office Professional Plus 2013 7. 有一个矩阵,如下图所示。

在此Google spreadsheet中找到矩阵数据。

这里有两个关于矩阵的事实:

  1. A 列是数字大纲,大纲级别范围为 1 - 13。
  2. 大纲编号是有序的。

下面是关于矩阵组织方式的说明:

  1. A4(大纲级别 2)在 M4 中有一个括号,其中 M 列(标记为 "L-02")对应于大纲级别 2。
  2. A16(大纲级别 6)在 I6(眼睛 6)中有一个括号,其中 I 列(标记为 "L-06")对应于大纲级别 6。
  3. A7(大纲级别 5)在 J7 中有 NO 括号,其中 J 列(标记为 "L-05")对应于大纲级别 5。

需要帮助编写公式或 VB 脚本,其工作方式如下:

  1. 对于 大纲级列 带括号
  2. 查找下一行,其中 A 列中轮廓的位置数小于等于当前大纲级别的位置
  3. THEN 将括号它在大纲列中的当前单元格移动到同一列中紧邻解决方案之前的单元格查找

比如看第16行,需要:

  1. 查找 A16 的位置数 小于 等于 A16 的位置数的下一行。 该行是 21,因为 FIND 会识别出少于 A16 中位置数的单元格 (A21)。
  2. 接下来,备份一行。
  3. 然后,将括号 I16(眼睛16;轮廓级别6)移动到 I20。

图像中的黄色单元格是列中括号必须移动到的单元格示例。

如何在 Excel 中完成此操作?

有任何关于#1 - #11 的问题都可以问我。例如,是否可以更改大纲编号方案以使其更易于解析和比较?是的,小数点可以去掉。

Google spreadsheet中,一组带有红色"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 中的公式(向下拖动以填充该列)是:

=LEN(A2)-LEN(SUBSTITUTE(A2,".",""))

它计算当前大纲中.的数量(在某些情况下你有,而不是.,所以你应该先使用replace all来修复它) .

范围Q1:AD1包含级别编号。

Q2中的公式(用它填充整个范围):

 =IF(AND($P2>$P3,MEDIAN($P2,$P3+1,Q)=Q),"]","")

它检查当前级别是否高于下一个级别,如果显示 ] 从(下一行级别 +1)到(当前行级别)的级别的括号。

你的样本和我的结果之间的唯一区别在于 L10 单元格,但我认为 L9 的括号应该移至 L10(而不是 L11) 根据你的算法。