Đã làm xong công thức tổng quát, không ai tham gia khá buồn:
Công thức chia làm 3 phần, dựa theo công thức bạn
@huonglien1901 đã đưa lên, tổng kết bằng hảm SUM để cộng lại:
+ Name #arr=ROW(INDIRECT("1:"&LEN(Sheet1!$A2)))
+ Name #sym=Sheet1!$C$2:$C$110
+ Phần 1:
Lấy trọng lượng từng chất:
SUMIF(sym,MID(A2,arr,MMULT(--(ABS({77.5,107.5}-CODE(MID(A2&0,arr+{0,1},1)))<13),{1;1}),D$2)
+ Phần 2:
Nhân từng chất cho số trọng lượng kế bên:
RIGHT(SMALL(IFERROR(--MID(A2,MMULT(--(ABS({77.5,107.5}-CODE(MID(A2&0,arr+{0,1},1)))<13),{1;1})+arr,{1,2,3}),1)+arr*1000,arr*3),3)
+ Phần 3:
Tính phép tính nhân cho từng ngoặc từ ngoài cùng cho đến vào trong (chỉ tính cho ngoặc lồng nhau), ở đây chú ý số
1 là ngoặc ngoài cùng rồi số tăng dần cho các ngoặc vào trong, vì không có công thức nhân mảng cho mảng theo dòng hay cột nên càng nhiều ngoặc càng dài:
Ví dụ: (00) (0000) tính là 1 ngoặc còn (0(000)2)2 thì ngoặc trong tính là ngoặc thứ 2
RIGHT(SMALL(IFERROR(--MID(A2,LOOKUP(arr,SMALL(IF((MID(A2,arr,1)={"(",")"})*MMULT(LEN(SUBSTITUTE(LEFT({"",0}&A2,arr),{"(",")"},"")),{-1;1})=
1,arr),arr+IF({1,0},,1/ISODD(arr))))+1,{1,2,3}),1)+arr*1000,arr*3),3)