Excel udf:来自列表中相应重复项的混合文本单元格中数字的总和

时间:2019-02-04 18:34:28

标签: excel user-defined-functions

我有一个与此类似的列表:

G:1 Diagonal Lattice - 5/16" Lath (1x2 Framed) S.S (PW)          O:1 4 p
G:2 DLT (Diagonal Lattice Top) 2x4 Fr 1x6 T&G Y-Brds             O:2 12PCS
G:3 Diagonal Lattice - 5/16" Lath (1x2 Framed) S.S (PW)          O:3 3pc
G:4 Diagonal Lattice - 5/16" Lath (1x2 Framed) S.S (PW)          O:4 6 pc
G:5 DLT (Diagonal Lattice Top) 2x4 Fr 1x6 T&G Y-Brds             O:5 4 PC
G:6 SLT (Square Lattice Top) 2x3 OT3 Fr 1x4 T&G                  O:6 2pcs

我不想调整列表,只需要对值求和即可。

所需的结果是这样

T:1 Diagonal Lattice - 5/16" Lath (1x2 Framed) S.S (PW)           U:1 16
T:2 DLT (Diagonal Lattice Top) 2x4 Fr 1x6 T&G Y-Brds              U:2 13
T:3 SLT (Square Lattice Top) 2x3 OT3 Fr 1x4 T&G                   U:3 2

由于文本混合,至少到目前为止,我无法正确使用sumif。

标签-物品= G1:G3701          数量= O1:O3701

={sumif(Item, T1, Qty)}
={sumif(Item, T1, value(left(Qty, find("p",Qty)-1)))}

这些都不起作用。 我试图添加一个函数以将数字取出。

={sumif(Item, T1, getNumeric(Qty))}

但是,我相信它会因为相同的原因而失败。

我已经测试了getNumeric函数,它在sumif之外可以工作 我制作了一个数据透视表来提取不同的值并进行排序,这部分很容易。但是我无法将Tally值相加,或者不知道如何。

是否可以使用udf?

编辑:已修复,可提供更清晰的预期结果,对。

1 个答案:

答案 0 :(得分:2)

假设件名缩写始终存在并且始终以P开头并且数字始终始终在其左侧,则可以使用以下公式:

import requests
from bs4 import BeautifulSoup

s = requests.Session()
r = s.get("https://angrygoldfish.aliexpress.com/store/feedback-score/1665279.html")

soup = BeautifulSoup(r.content, "html.parser")
iframe_src = soup.select_one("#detail-displayer").attrs["src"]

r = s.get(f"https:{iframe_src}")

soup = BeautifulSoup(r.content, "html.parser")
for row in soup.select(".history-tb tr"):
    print("\t".join([e.text for e in row.select("th, td")]))

POC

要处理数字不带“ pcs”的情况,请在其后键入文本。换句话说,它实际上是一个数字。我会使用一个助手列来去除数字,然后使用该助手列求和来执行sumif或sumifs类型的函数。

更新

相同的公式适用于新的示例数据,并针对新列进行了调整:

=SUMPRODUCT(($A$1:$A$6=C1)*LEFT($B$1:$B$6,SEARCH("p",$B$1:$B$6)-1))

enter image description here