ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 276|回复: 9

[已解决] 取值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-1 11:26 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 sheen328 于 2024-8-1 15:30 编辑

E列价格来源于网价表,规则:“线材”就是网价表中的“高线”,在网价表取对应名称、规格和日期的价格。若无对应日期,则取往前有价格的日期的价格,如7月20、21日在网价表中均无价格,往前是19日有价格,则取19日的价格。网价表中各表名可更改成便于写公式的表名
结算.png

取值.zip

185.03 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-1 11:29 | 显示全部楼层
结算表中D列“*”及后面的表示长度,与取值无关

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-1 15:44 | 显示全部楼层

跨表取值

E列价格来源于网价表,规则:“线材”就是网价表中的“高线”,在网价表取对应名称、规格和日期的价格。若无对应日期,则取往前有价格的日期的价格,如7月20、21日在网价表中均无价格,往前是19日有价格,则取19日的价格。
结算表中D列“*”及后面的表示长度,不影响对应规格取值。
网价表中各表名可
更改成
便于写公式的表名



跨表取值.zip

185.4 KB, 下载次数: 4

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-1 19:40 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
表中HBP应为HPB

TA的精华主题

TA的得分主题

发表于 2024-8-1 22:00 | 显示全部楼层
Python+Pandas:
import pandas as pd
import re

f = pd.ExcelFile('pandas exercise/sample344.xlsx')

lst = []
for sheet in f.sheet_names:
    if sheet != '查询':
        df = pd.read_excel(f, sheet, index_col=0, parse_dates=True)
        lst.append(df)
df = pd.concat(lst).sort_index()

df1 = pd.read_excel(f, '查询', usecols='a:e')
for t in df1.itertuples():
    l = re.split(r'-|\*', t.材质规格)
    m = l[0]
    s = l[1]
    n = t.名称 if t.名称 != '线材' else '高线'
    df2 = df[(df.品名 == n)&(df.材质 == m)&(df['规格'].str[1:] == s)&(df.index <= t.日期)]
    if df2.size != 0:
        df1.loc[t[0], '价格'] = df2.iloc[-1, 6]
df1

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-1 22:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
①【网价表】中各标签更名为【结算表】中【名称+材质规格*号前文字】;
②【网价表】按日期升序排列,否则要用到【SORT】函数,而楼主版本不支持。
  1. =VLOOKUP(--B2,--INDIRECT("'[网价表.xlsx]"&C2&IFERROR(LEFT(D2,FIND("*",D2)-1),D2)&"'!A:H"),8)
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-2 09:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1786024734 发表于 2024-8-1 22:28
①【网价表】中各标签更名为【结算表】中【名称+材质规格*号前文字】;
②【网价表】按日期升序排列,否则 ...

我版本重新设置下,2021lstc版

TA的精华主题

TA的得分主题

发表于 2024-8-2 11:18 | 显示全部楼层
本帖最后由 1786024734 于 2024-8-2 11:20 编辑
sheen328 发表于 2024-8-2 09:33
我版本重新设置下,2021lstc版
  1. =VLOOKUP(B2,SORT(--INDIRECT("'[网价表.xlsx]"&C2&IFERROR(LEFT(D2,FIND("*",D2)-1),D2)&"'!A:H")),8)
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-2 12:09 | 显示全部楼层

若无对应日期,则取往后有价格的日期的价格,公式该怎么调整?

TA的精华主题

TA的得分主题

发表于 2024-8-2 12:46 | 显示全部楼层
sheen328 发表于 2024-8-2 12:09
若无对应日期,则取往后有价格的日期的价格,公式该怎么调整?
  1. =-VLOOKUP(-B2,-INDIRECT("'[网价表.xlsx]"&C2&IFERROR(LEFT(D2,FIND("*",D2)-1),D2)&"'!A:H"),8)
复制代码

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 02:58 , Processed in 0.046968 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表