【问题标题】:How to autogenerate certain excel strings from certain inputs as given in example?如何从示例中给出的某些输入中自动生成某些 excel 字符串?
【发布时间】:2016-09-25 08:23:29
【问题描述】:

基本上我想要在 excel 中包含以下内容:

如果我在工作表 1 中输入以下内容,我需要它:

      A       B       C
1   Name    Size    Color
2   Shirt   S,M,L   Red, Green
3   Trouser 32,34   White, Black, Grey

Sheet 2 中自动生成以下输出:

     A                  B     C
1   Name               Size Color
2   Shirt-S-Red         S   Red
3   Shirt-M-Red         M   Red
4   Shirt-L-Red         L   Red
5   Shirt-S-Green       S   Green
6   Shirt-M-Green       M   Green
7   Shirt-L-Green       L   Green
8   Trouser-32-White    32  White
9   Trouser-34-White    34  White
10  Trouser-32-Black    32  Black
11  Trouser-34-Black    34  Black
12  Trouser-32-Grey     32  Grey
13  Trouser-34-Grey     34  Grey

基本上,所有子行都应该从父行生成,例如 Sheet 2 的第 2 到 7 行是从 Sheet 1 的第 2 行生成的,依此类推。

进一步阐述,需要这样一种公式,如果我在表 1 中添加另一行具有三种尺寸和三种颜色的背心,那么公式或脚本应该在第 13 行之后自动向表 2 插入另外 9 行(即,在工作表 1) 的第 4 行中有 9 个输入排列和组合。

如何使用 Excel 公式或 VB 脚本实现这一点?请告诉我解决方案。

谢谢。

P.S.:我已尽力描述我的这个问题。请评论,如果在理解问题上存在歧义,我将进一步阐述这一点。

【问题讨论】:

  • 您在错误的 StackExchange 站点上发帖。 StackOverflow 是一个专业和狂热程序员的网站;获得针对有针对性的、重点突出的问题的具体答案的地方。它不是发布问题描述的地方(有或没有 I looked everywhere 免责声明)。如果您想将您的问题转嫁给其他人,而不展示任何解决您问题的原始努力,您应该在StackOverflow Jobs 发帖。

标签: excel excel-formula excel-2010 excel-2007 vba


【解决方案1】:

这可能会下降,但我需要使用一个小的辅助表来记录每行中尺寸项目的数量、每行中的颜色数量,以及最后每行可能组合的总和.

概念证明

注意事项

是的,不止一个!

  • 大小必须与字符数保持一致。 7,8,9 或 10,11,12 可以,但 8,9,10 不起作用。解决方法是使用前导 0。
  • 颜色必须是连续的,由空格隔开。昏迷将被移除。 Red、Bright-Red Infra_Red 都可以,但 Blood Red 不行。
  • 您需要调整范围以适应您的数据。

根据上面的概念证明图片中的数据,在第 3 行使用这些公式并复制下来。

F 列:

=(LEN(B2)-LEN(SUBSTITUTE(B2,",",""))+1)

G 列:

=(LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1)

以上两个公式计算昏迷次数。根据该数字,他们确定该行显示的项目数,以及该行不同颜色的数量。

H 栏:

=F3*G3+H2

这会保留每行的组合总数。

J 栏:

=INDEX($A$2:$A$4,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1))&"-"&K3&"-"&L3

这会从 A2:A4 中的列表中提取名称,因为根据组合的运行总数向下拖动公式,该行会前进。然后它将字符串与“-”和相邻列中的文本连接起来。

K 列:

=MID(INDEX($B$2:$B$4,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1)),MOD((ROW(A2)-ROW($A$2)-IFERROR(INDEX($H$3:$H$5,MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)),0)),INDEX($F$3:$F$5,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1)))*FIND(",",INDEX($B$2:$B$4,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1)))+1,FIND(",",INDEX($B$2:$B$4,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1)))-1)

从上面那个坏男孩开始...假设我先把它分解成若干列,然后根据需要重新替换这些公式,直到我得到这个。它基本上按顺序拉出大小字母,然后从下一种颜色重新开始。使其依赖于相邻列中的颜色名称更改可能更简单。这个公式是独立的。颜色名称列。

L 列:

=SUBSTITUTE(TRIM(MID(SUBSTITUTE(INDEX($C$2:$C$4,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1))," ",REPT(" ",LEN(INDEX($C$2:$C$4,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1))))),((QUOTIENT(ROWS($A$2:A2)-1-IFERROR(INDEX($H$3:$H$5,MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)),0),(INDEX($H$3:$H$5,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1))-IFERROR(INDEX($H$3:$H$5,MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)),0))/INDEX($G$3:$G$5,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1))))*LEN(INDEX($C$2:$C$4,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1))))+1,LEN(INDEX($C$2:$C$4,IFERROR(MATCH(ROW(A2)-ROW($A$2),$H$3:$H$5,1)+1,1))))),",","")

与前面的公式类似,它是在多列中开发的,然后返回到一个单元格中。它分解颜色名称,然后在等于大小数量的行数过去后按顺序获取每个名称。

【讨论】:

  • 你是通过文字还是其他东西获得报酬=P
  • 你的时间太多了。另外,你在梳理我所有的旧问题吗?
  • @findwindow 不,只是认为这是向您指出一些事情的好方法,而不会陷入其他人的问题。
  • @findwindow 通常我尝试解释一下,以便人们可以从中学习并做出自己的调整。如果他们在工作和学习方面表现出一些努力,或者与某人合作以让他们找到他们的解决方案。我发现用 10 个字或更少的字很难做到这一点。谢天谢地,我不只是为了你的投票而把你拖到我的帖子里!但我很欣赏他们。这次我对自己公式的最终结果有点困惑,所以我实际上是在试图避免详细解释它们。
  • @findwindow,我不知道 L!您应该看到所有列都位于我构建它的一侧。大多数我可以解释!但我不想让 imgur 陷入如此多的屏幕截图! 8)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多