选择 Excel 中的数据作为某些单元格之间的一组,并将每个单元格除以组值以查找百分比
Selecting data In Excel as a group between certain cells and dividing each by group value to find percentage
背景: 我有一个 table 描述了一个假想的公式。主要 ingredients/materials 是口味 A、B、乳液和凝胶混合物。这些在 table 中以粗体突出显示(见附图)。
- 调味剂 A 占总配方的
54%
,由以下子成分组成:水、苯甲酸、HCl 和钠
- 风味 B 构成了配方的
10%
,但未构成任何子成分,即 100%.
- 乳液由
19%
的配方组成,由水、油、Nacl 和酯以及蓝色染料组成
- 凝胶混合物构成最终的
17%
配方,由凝胶 A、B、胶质和纯净水组成。
所附图片还显示了构成每种成分的每种子成分的百分比。
尽管这是一个虚构的示例,但我提供的数据以相同的方式呈现。
问题: 我想创建一个新列 D,查看此数据,可以自动计算每个子成分占主要成分的百分比。例如,Oil/Lipid 是乳液的 63%
,占总配方的 19%。 (0.63*0.19)*100 = 11.97
作为 D 列中的所需输出。类似地,C 列中的连字符表示成分为 100%,并且应该 return 一个等于整个配方百分比的值,例如 54%
returns 54
。这些值中的每一个的总和不会达到 100,因为输出将包含原始 material 及其组成子组件的值。
然而,数据格式化的方式使这非常具有挑战性。
到目前为止我尝试过的:
首先,我无法提供任何现有代码,只是因为我不知道如何去做。到目前为止我能想到的是,因为当 C 列中出现连字符时,它标识子组件列表的开头,下一个连字符将标识结尾。然后,这两者之间的每个值都需要独立除以 B 列中连字符相邻的单元格,然后乘以 100(请注意,如有必要,连字符可以更改为 1.0 或 100%)。我想知道是否可以通过某种方式(FILTERXML?)过滤数据,但我不确定。
所附图片中的期望结果列显示了我试图在 D 列中实现的值。这些是通过手动计算每个值来实现的,但这是我在这里试图避免的。 (如有错误请见谅)
非常感谢任何帮助(即使有一些复杂的解决方法)。同样,如果您认为这不可能,请告诉我。
非常感谢。
请试试这个公式。粘贴到D3并向下复制。
=LOOKUP(2,1/($B:$B3<>""),$B:$B)*IF(ISNUMBER($C3),$C3/100,1)
该公式假设 B 列中的单元格垂直合并并且 C 列中有一个 non-numeric 字符(例如连字符)来标识每个段的标题行。
实现此目的的一个简单方法是在辅助列中添加一个公式,该公式检查列 B 中的单元格是否为空,如果是,则取上面的值,如果不是,则取值来自 B 列,例如54%。因此在 E 列中添加以下内容:
=IF(B3="", E2, B3)
然后在 D 列中添加以下内容,它使用您的辅助列来获得您想要的结果:
=IF(C3="-", B3, E3*C3)
查看 C 列中是否有“-”,如果有,则取 B 列的总值,如果没有,则将各自的百分比相乘。
背景: 我有一个 table 描述了一个假想的公式。主要 ingredients/materials 是口味 A、B、乳液和凝胶混合物。这些在 table 中以粗体突出显示(见附图)。
- 调味剂 A 占总配方的
54%
,由以下子成分组成:水、苯甲酸、HCl 和钠 - 风味 B 构成了配方的
10%
,但未构成任何子成分,即100%.
- 乳液由
19%
的配方组成,由水、油、Nacl 和酯以及蓝色染料组成 - 凝胶混合物构成最终的
17%
配方,由凝胶 A、B、胶质和纯净水组成。
所附图片还显示了构成每种成分的每种子成分的百分比。
尽管这是一个虚构的示例,但我提供的数据以相同的方式呈现。
问题: 我想创建一个新列 D,查看此数据,可以自动计算每个子成分占主要成分的百分比。例如,Oil/Lipid 是乳液的 63%
,占总配方的 19%。 (0.63*0.19)*100 = 11.97
作为 D 列中的所需输出。类似地,C 列中的连字符表示成分为 100%,并且应该 return 一个等于整个配方百分比的值,例如 54%
returns 54
。这些值中的每一个的总和不会达到 100,因为输出将包含原始 material 及其组成子组件的值。
然而,数据格式化的方式使这非常具有挑战性。
到目前为止我尝试过的: 首先,我无法提供任何现有代码,只是因为我不知道如何去做。到目前为止我能想到的是,因为当 C 列中出现连字符时,它标识子组件列表的开头,下一个连字符将标识结尾。然后,这两者之间的每个值都需要独立除以 B 列中连字符相邻的单元格,然后乘以 100(请注意,如有必要,连字符可以更改为 1.0 或 100%)。我想知道是否可以通过某种方式(FILTERXML?)过滤数据,但我不确定。
所附图片中的期望结果列显示了我试图在 D 列中实现的值。这些是通过手动计算每个值来实现的,但这是我在这里试图避免的。 (如有错误请见谅)
非常感谢任何帮助(即使有一些复杂的解决方法)。同样,如果您认为这不可能,请告诉我。
非常感谢。
请试试这个公式。粘贴到D3并向下复制。
=LOOKUP(2,1/($B:$B3<>""),$B:$B)*IF(ISNUMBER($C3),$C3/100,1)
该公式假设 B 列中的单元格垂直合并并且 C 列中有一个 non-numeric 字符(例如连字符)来标识每个段的标题行。
实现此目的的一个简单方法是在辅助列中添加一个公式,该公式检查列 B 中的单元格是否为空,如果是,则取上面的值,如果不是,则取值来自 B 列,例如54%。因此在 E 列中添加以下内容:
=IF(B3="", E2, B3)
然后在 D 列中添加以下内容,它使用您的辅助列来获得您想要的结果:
=IF(C3="-", B3, E3*C3)
查看 C 列中是否有“-”,如果有,则取 B 列的总值,如果没有,则将各自的百分比相乘。