Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel-在给定列处换行,第一列在行范围内重复_Excel_Vba_Layout_Rows - Fatal编程技术网

Excel-在给定列处换行,第一列在行范围内重复

Excel-在给定列处换行,第一列在行范围内重复,excel,vba,layout,rows,Excel,Vba,Layout,Rows,从技术上讲,我正在寻找的解决方案是最小化实际编程。我需要知道是否有Excel功能可以从VBA调用,而不是自己编写整个逻辑 想象一下下面这张纸: Position Competency1 Competency2 Competency3 Competency4 Employee1 x x Employee2 x x 我需要的是以下结果: Position

从技术上讲,我正在寻找的解决方案是最小化实际编程。我需要知道是否有Excel功能可以从VBA调用,而不是自己编写整个逻辑

想象一下下面这张纸:

Position   Competency1 Competency2 Competency3 Competency4
Employee1      x                                    x 
Employee2      x                        x
我需要的是以下结果:

Position   Competency1 Competency2
Employee1      x                  
Employee2      x                  

Position   Competency3 Competency4
Employee1                   x                  
Employee2      x                  
换句话说,我希望Excel向下移动列,但保留第一列。现在是复杂的部分;将有几个职位,有不同的员工。因此,最终产品可能看起来像:

Position   Competency1 Competency2
Employee1      x                  
Employee2      x                  

Position   Competency3 Competency4
Employee1                   x                  
Employee2      x                  

Position2  Competency5 
Employee3      x                              
Employee4              
数据从数据库中提取,并通过VBA格式化为上述布局。每个职位的职位数量和员工/能力都是可变的

我当然可以编写整个代码,但如果我可以在Excel中输入一些参数,让它为我完成,我的生活就会轻松得多。问题是,我发现的相关功能似乎是工作表范围的,而我需要能够指定多组行和列


我怀疑答案是:“把它吸起来,然后编码”。但我对Excel的了解还不够,无法确定。我想第一个列表应该是员工排名靠后的职位。而且没有其他的名单。假设是这样的:以下是您需要编写的逻辑代码

  • numberOfColumns:在A列(位置列)中的单元格不为空的情况下,向下计数单元格减去1。这将给出员工数量(不包括职位单元)

  • numberOfRows:计算穿过的单元格数(第1行)。这将是能力单元数减去1(不包括职位单元)

  • competancyColumns:定义一个变量,用于捕获每个职位需要多少能力列。这可以通过文本框或其他工作表上的单元格或其他内容(例如,值为2)实现

  • 从A1+competancyColumns开始。复制并剪切行结束后的单元格

  • 从A1+numberOfRows+1开始。添加另一个计数器以跟踪位置(计数器),因此在第4点之后,计数器的读数应为2(0+competancyColumns)。 粘贴单元格(从第4点开始)

  • 重复此过程,直到计数器=numberOfcolumns。显然不是从A1开始,而是你所在的那排

    如果不想使用剪切粘贴,可以将其存储在数组中,但这由您自己决定


    所以这应该是基本逻辑

    在这种情况下,我推荐一个数据透视表,您甚至不需要编写代码来创建它。我无法使用数据透视表对其进行排序,我的同事也看不出如何进行排序。如果真的有可能的话,我很可能会花尽可能多甚至更多的时间来弄清楚如何使用和准备数据,而不仅仅是用VBA编码。我对编码没有任何技术问题,这是我试图避免的时间方面的问题。那里已经有很多VBA代码(该工作表是通过VBA从其他几张工作表上的数据填充的,这些数据又是从数据库填充的),而且它对维护不是很友好。如果Excel有一个简单的功能为我解决这个问题,它会更快、更健壮。根据回复,我将继续我最初的假设,即没有一种简单的方法让Excel为我处理这类事情,只需编写代码即可。Excel并没有那么先进。它不能想出解决每一个问题的办法。您所要求的并不困难,而且很容易在Excel中实现。如果你想自动化VBA,它是你唯一的选择。与一些已经存在的功能相比,它不是一个非常高级的功能,但它显然不存在。最后,我修改了现有代码,以便在填充时根据需要拆分行。