2023国赛C题 蔬菜类商品的自动定价与补货决策(上)

news2024/9/27 7:18:07

2023国赛C题

蔬菜类商品的自动定价与补货决策(上)


在这里插入图片描述

符号说明:

在这里插入图片描述

问题1


问题1主要的代码和思路在上一篇文章“数学建模实战块速入门”中已经进行了较为详细的展示,在问题一种要求我们从蔬菜单品和品类两个维度去分析各自之间的关系。我们采用的方法便是计算对应单品或者品类之间的相关系数;主要的相关系数有Spearmna相关系数或者**(Pearson)皮尔逊相关系数**等。(注意:能够适用皮尔逊相关的场合当然是优先使用皮尔逊相关,当数据展现的是非线性关系,或者不是正态分布的,或者存在较为明显的异常值考虑到斯皮尔曼相关系数对异常值不敏感可以选择斯皮尔曼相关系数而在分析各个品类在销量在时间上的分布后,我们发现其具有季节性起伏,因此两个单品或者品类之间难以建立线性的相关关系,因此选择反应单调变化趋势的斯皮尔曼相关系数就成为了更优的选择)。

在这里插入图片描述

在这里插入图片描述

使用python对原始数据进行处理和计算

#加载需要的python库,如果没有提前安装,使用pip install XXX进行安装,如果加载过慢超时,可以使用清华源等镜像下载。
import pandas as pd 
import numpy as np 
import cvxpy as cp 
import random 
import math 
from prophet import Prophet 
from datetime import datetime, timedelta 
import matplotlib.pyplot as plt 
from prophet.diagnostics import cross_validation, performance_metrics 
from sklearn.linear_model import LinearRegression 
from sklearn.metrics import mean_squared_error, mean_absolute_error 
import statsmodels.api as sm 
 

原始数据的处理示意图以及对应代码:

在这里插入图片描述

# 创建按品类划分的数据表 
df_items = pd.read_excel('附件1.xlsx', engine='openpyxl') # 从附件1读取蔬菜单品的数据 
df_sales = pd.read_excel('附件2.xlsx', engine='openpyxl') # 从附件2读取购买流水数据 
df_merged = pd.merge(df_sales, df_items, on='单品编码', how='left') # 通过蔬菜编码连接两个数据表 
 
df_merged['金额'] = df_merged['销量(千克)'] * df_merged['销售单价(元/千克)'] # 计算每笔订单的销售金额(考虑退货,所以使用负值) 
df_merged.loc[df_merged['销售类型'] == '退货', '金额'] *= -1 
df_merged.loc[df_merged['销售类型'] == '退货', '销量(千克)'] *= -1 
 
# 获取蔬菜单品每日平均价格 
daily_price = df_merged.groupby(['单品编码', '单品名称', '销售日期'])['销售单价(元/千克)'].mean().reset_index() 
 
# 按照蔬菜单品和销售日期来计算每日销售总销量、总金额 
daily_vol = df_merged.groupby(['单品编码', '单品名称', '销售日期'])['销量(千克)'].sum().reset_index() 
daily_sales = df_merged.groupby(['单品编码', '单品名称', '销售日期'])['金额'].sum().reset_index()
# 根据退货和销售金额计算退货率 
total_returned = df_merged[df_merged['销售类型'] == '退货'].groupby('单品编码')['金额'].sum() 
total_sales = df_merged[df_merged['销售类型'] == '销售'].groupby('单品编码')['金额'].sum() 
return_rate = (total_returned / total_sales).reset_index(name='退货率') 
 
# 合并数据获取每日平均价格 
pivot_price = daily_price.pivot_table(index=['单品编码', '单品名称'], columns='销售日期', values='销售单价(元/千克)', fill_value=0).reset_index() 
finalprice_df = pd.merge(df_items[['单品编码', '单品名称', '分类名称']], return_rate, on='单品编码', how='left') 
finalprice_df = pd.merge(finalprice_df, pivot_price, on=['单品编码', '单品名称'], how='left') 
 
# 合并数据获取每日销量 
pivot_vol = daily_vol.pivot_table(index=['单品编码', '单品名称'], columns='销售日期', values='销量(千克)', fill_value=0).reset_index() 
finalvol_df = pd.merge(df_items[['单品编码', '单品名称', '分类名称']], return_rate, on='单品编码', how='left') 
finalvol_df = pd.merge(finalvol_df, pivot_vol, on=['单品编码', '单品名称'], how='left') 
 
# 合并数据以获取每日销售额 
pivot_sales = daily_sales.pivot_table(index=['单品编码', '单品名称'], columns='销售日期', values='金额', fill_value=0).reset_index() 
finalsales_df = pd.merge(df_items[['单品编码', '单品名称', '分类名称']], return_rate, on='单品编码', how='left') 
finalsales_df = pd.merge(finalsales_df, pivot_sales, on=['单品编码', '单品名称'], how='left') 
 
# 保存为新的Excel文件 
finalprice_df.to_excel('output_price.xlsx', index=False, engine='openpyxl') 
finalvol_df.to_excel('output_vol.xlsx', index=False, engine='openpyxl') 
finalsales_df.to_excel('output_sales.xlsx', index=False, engine='openpyxl')

问题2


考虑商超以品类为单位做补货计划,请分析各蔬菜品类的销售总量与成本加成定价的关系,并给出各蔬菜品类未来一周(2023年7月1-7日)的日补货总量和定价策略, 使得商超收益最大。

问题分析: 问题二首先要求我们分析各蔬菜品类的销售总量和成本加定价的关系;从常识角度,蔬菜卖的越贵,销量就会减少,反之则会销量增加。因此我们可以判断出蔬菜品类的销售总量和成本加定价之间应该存在线性关系。

如何从数据中判断是否存在线性相关性? 我么可以考虑计算皮尔逊相关系数来判定。

皮尔逊相关系数可以用来度量两个变量之间的相关程度,其计算公式为:
ρ ( x , y ) = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) ∑ i = 1 n ( X i − X ˉ ) 2 ∑ i = 1 n ( Y i − Y ˉ ) 2 \rho\left(x,y\right)=\frac{\sum_{i=1}^n(X_i-\bar{X})(Y_i-\bar{Y})}{\sqrt{\sum_{i=1}^n(X_i-\bar{X})^2}\sqrt{\sum_{i=1}^n(Y_i-\bar{Y})^2}} ρ(x,y)=i=1n(XiXˉ)2 i=1n(YiYˉ)2 i=1n(XiXˉ)(YiYˉ)
如果判定结果为存在线性相关关系,我们则可以采用最小二乘等方法得到二者之间的线性回归方程

数据处理:

我们想要计算皮尔逊相关系数,那就要想办法得到各品类的销量数据以及各品类的成本加成定价。

销售数据在前面计算过,可以直接导入到Excel文件中:

# 每日销售量
pivot_class_vol.to_excel('daily_class_vol.xlsx', index=False, engine='openpyxl') 

某一时间段内(时间段可以为日、月、季度)的销售价格和批发价格分别由下式确定:

即:sum(每单单价*每单销量)/sum(每单销量)
P i ( t ) = ∑ p j ( t ) ⋅ q j ( t ) ∑ q j ( t ) , j ∈ 品类 i C i ( t ) = ∑ c j ( t ) ⋅ q j ( t ) ∑ q j ( t ) , j ∈ 品类 i P_{i}(t)=\frac{\sum p_j\left(t\right)\cdot q_j\left(t\right)}{\sum q_j\left(t\right)} , j\in\text{品类}i\\C_{i}(t)=\frac{\sum c_j\left(t\right)\cdot q_j\left(t\right)}{\sum q_j\left(t\right)} , j\in\text{品类}i Pi(t)=qj(t)pj(t)qj(t),j品类iCi(t)=qj(t)cj(t)qj(t),j品类i

"""
df_items = pd.read_excel('附件1.xlsx', engine='openpyxl') # 从附件1读取蔬菜单品的数据 
df_sales = pd.read_excel('附件2.xlsx', engine='openpyxl') # 从附件2读取购买流水数据 
df_merged = pd.merge(df_sales, df_items, on='单品编码', how='left') # 通过蔬菜编码连接两个数据表 

df_merged['金额'] = df_merged['销量(千克)'] * df_merged['销售单价(元/千克)'] # 计算每笔订单的销售金额(考虑退货,所以使用负值) 
df_merged.loc[df_merged['销售类型'] == '退货', '金额'] *= -1 
df_merged.loc[df_merged['销售类型'] == '退货', '销量(千克)'] *= -1 
"""
# 按照蔬菜品类和销售日期来计算每日销售总销量、总金额 
daily_class_vol = df_merged.groupby(['分类编码', '分类名称', '销售日期'])['销量(千克)'].sum().reset_index() 
daily_class_sales = df_merged.groupby(['分类编码', '分类名称', '销售日期'])['金额'].sum().reset_index()


计算daily_class_vol 、daily_class_sales 使用了分组聚合的函数即groupby函数,我们对所有行按照分类编码和销售日期进行分组,并对每组元素进行对应的求和。我们便得到了各个品类在每一天的销量和销售金额。
下面是我们处理得到的结果:
在这里插入图片描述
我们希望得到的处理结果是时间作为行标签,蔬菜品类作为列标签,因此我们对数据进行了如下处理:

# 合并数据获取每日销量 
pivot_class_vol = daily_class_vol.pivot_table(index=['分类编码', '分类名称'], columns='销售日期', values='销量(千克)', fill_value=0).reset_index() 
# 合并数据以获取每日销售额 
pivot_class_sales = daily_class_sales.pivot_table(index=['分类编码', '分类名称'], columns='销售日期', values='金额', fill_value=0).reset_index() 

pivot_class_vol = pivot_class_vol.T
#pivot_class_vol.set_index('销售日期', inplace=True) # 把第一列日期设定为标签
dates = pivot_class_vol.index.tolist()[2:]
columns = pivot_class_vol.iloc[1]  # 取出第二行作为列名
pivot_class_vol = pivot_class_vol.iloc[2:].reset_index(drop=True)  # 去除前两行,并重置索引
pivot_class_vol.columns = columns  # 设置新的列名
pivot_class_vol.index = dates

pivot_class_sales = pivot_class_sales.T
columns = pivot_class_sales.iloc[1]  # 取出第二行作为列名
pivot_class_sales = pivot_class_sales.iloc[2:].reset_index(drop=True)  # 去除前两行,并重置索引
pivot_class_sales.columns = columns  # 设置新的列名
pivot_class_sales.index = dates
"""
分别计算日销售价格和日批发价格
"""

这个是我们希望得到的结果
在这里插入图片描述
下面我们按照前面给出的公式计算日成本加成定价,我们首先定义了存储计算结果的数据结构,然后带入公式计算。

import numpy as np
rows,cols = pivot_class_sales.shape

daily_class_price = np.zeros((rows, cols), dtype=int)
daily_class_price = pd.DataFrame(daily_class_price)
daily_class_price.columns = columns
daily_class_price.index = dates
# 日销售价格

for i in pivot_class_sales.columns.tolist():
    for j in pivot_class_vol.index.tolist():
        if pivot_class_vol[i][j] == 0:
            daily_class_price[i][j] = 0  # 如果销量为0,则价格也为0
        else:
            daily_class_price[i][j] = pivot_class_sales[i][j] / pivot_class_vol[i][j]  # 计算日销售价格
    
    #daily_class_price[i] = pivot_class_sales[i] / pivot_class_vol[i]  # 计算日销售价格

daily_class_price.to_excel('daily_class_price.xlsx', index=False, engine='openpyxl') 

在这里插入图片描述

采取同样的方式我们也可以计算日批发价格。

# 日批发价格
import pandas as pd 
#df_items = pd.read_excel('附件1.xlsx', engine='openpyxl') # 从附件1读取蔬菜单品的数据 
df_wholesale = pd.read_excel('附件3.xlsx', engine='openpyxl') # 从附件3读取蔬菜单品的批发数据
df_merged_wholesale = pd.merge(df_wholesale,df_items, on='单品编码', how='left') # 通过蔬菜编码连接两个数据表 
 
#df_merged_wholesale = pd.merge(df_wholesale,df_items, on='单品编码', how='left') # 通过蔬菜编码连接两个数据表 
daily_vol = df_merged.groupby(['单品编码', '单品名称', '销售日期'])['销量(千克)'].sum().reset_index() 

daily_vol = daily_vol.rename(columns={'销售日期': '日期'})
###
merged_wholesale = pd.merge(daily_vol, df_merged_wholesale, on=['单品编码', '单品名称', '日期'], how='left')
# merged_wholesale = df_merged_wholesale.groupby(['单品编码', '单品名称', '日期'])['批发价格(元/千克)'].sum().reset_index()

merged_wholesale['批发金额'] = merged_wholesale['销量(千克)'] * merged_wholesale['批发价格(元/千克)']

# 计算日批发价格需要使用销量*批发价格得到批发金额,计算每日批发金额/每日销量总和

# ****************************************************** #
daily_class_wholesale = merged_wholesale.groupby(['分类编码', '分类名称', '日期'])['批发金额'].sum().reset_index() 
pivot_class_wholesale = daily_class_wholesale.pivot_table(index=['分类编码', '分类名称'], columns='日期', values='批发金额', fill_value=0).reset_index() 

pivot_class_wholesale = pivot_class_wholesale.T
#pivot_class_vol.set_index('销售日期', inplace=True) # 把第一列日期设定为标签
dates = pivot_class_wholesale.index.tolist()[2:]
columns = pivot_class_wholesale.iloc[1]  # 取出第二行作为列名
pivot_class_wholesale = pivot_class_wholesale.iloc[2:].reset_index(drop=True)  # 去除前两行,并重置索引
pivot_class_wholesale.columns = columns  # 设置新的列名
pivot_class_wholesale.index = dates
import numpy as np

#rows,cols = pivot_class_sales.shape
daily_class_price = pd.read_excel('daily_class_price.xlsx', engine='openpyxl')
rows,cols = daily_class_price.shape

daily_class_wholesaleprice = np.zeros((rows, cols), dtype=int)
daily_class_wholesaleprice = pd.DataFrame(daily_class_price)
daily_class_wholesaleprice.columns = columns
daily_class_wholesaleprice.index = dates
# 这里的pivot_class_vol在计算每日价格时计算过,这边直接拿过来.

for i in pivot_class_wholesale.columns.tolist():
    for j in pivot_class_vol.index.tolist():
        if pivot_class_vol[i][j] == 0:
            daily_class_wholesaleprice[i][j] = 0  # 如果销量为0,则价格也为0
        else:
            daily_class_wholesaleprice[i][j] = pivot_class_wholesale[i][j] / pivot_class_vol[i][j]  # 计算日销售价格
    
    #daily_class_price[i] = pivot_class_sales[i] / pivot_class_vol[i]  # 计算日销售价格

daily_class_wholesaleprice.to_excel('daily_class_wholesaleprice.xlsx', index=False, engine='openpyxl') 

在这里插入图片描述

下面我们对成本加成定价与日销量计算皮尔逊相关系数,并进行最小二乘线性回归

import pandas as pd
daily_class_price = pd.read_excel('daily_class_price.xlsx', engine='openpyxl')
daily_class_wholesaleprice = pd.read_excel('daily_class_wholesaleprice.xlsx', engine='openpyxl')
daily_class_vol = pd.read_excel('daily_class_vol.xlsx', engine='openpyxl')
# 计算花叶类 日销量和成本加成定价 之间的皮尔逊相关系数
 # daily_class_price['花叶类'] 
pearson_xy = daily_class_wholesaleprice['花叶类'].corr(daily_class_vol['花叶类'], method='pearson')
print(f"变量X和Y之间的皮尔逊相关系数: {pearson_xy}")

在这里插入图片描述

进行最小二乘线性回归,并进行可视化展示:

import numpy as np
import matplotlib.pyplot as plt

# 准备数据
#x = np.array([1, 2, 3, 4, 5])
#y = np.array([2, 4, 5, 4, 5])  # 注意:这些数据不是完美线性的,以展示拟合过程
x = np.array(daily_class_price['花叶类'].tolist())
y = np.array(daily_class_vol['花叶类'].tolist())

# 使用numpy的polyfit函数进行线性拟合(1表示一次多项式,即线性)
# 返回拟合系数,其中第一个是斜率m,第二个是截距b
coefficients = np.polyfit(x, y, 1)
m, b = coefficients

# 输出回归方程的参数
print(f"回归方程为: y = {m:.2f}x + {b:.2f}")

# 使用拟合得到的参数进行预测
x_predict = np.linspace(min(x), max(x), 100)  # 生成一系列预测点
y_predict = m * x_predict + b

# 可视化结果
plt.scatter(x, y, color='red', label='Data Points')
plt.plot(x_predict, y_predict, color='blue', label='Fitted Line')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Linear Least Squares Fitting')
plt.legend()
plt.show()

在这里插入图片描述


我们已经计算得到了一些关键行的指标,之后我们需要使用时间序列模型或者其他模型对未来一周的销量进行预测,并且开始建立以销售额的最大化为最优目标的优化求解模型,并使用一些求解算法来求解得到最终结果,这也是在下一篇文章的重点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 面向对象基础,简单的银行存钱取钱程序

题目: 代码实现: BankAccount部分: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Bank {internal class BankAccount{private decimal balance 0;//账…

黑马智数Day5

表单校验 表单基础校验 // 1. 创建表单规则 data() {return {addRules: {name: [{ required: true, message: 企业名称为必填, trigger: blur }],legalPerson: [{ required: true, message: 法人为必填, trigger: blur }],registeredAddress: [{ required: true, message: 注…

《CUDA编程》3.简单CUDA程序的基本框架

本章将学习CUDA程序的基本框架&#xff0c;编写更加有用的CUDA程序 0 C例子&#xff1a;数组相加 C代码如下&#xff1a; #include <math.h> #include <stdio.h> #include <stdlib.h> #include <time.h> // 包含 time.h 头文件以使用 clock()const d…

Tesla T4 P2P测试

Tesla T4 P2P测试 一.测试环境二.测试步骤1.获取设备信息2.查看PCIE拓扑结构3.选择9B、9E这二张4.查看逻辑设备ID5.设置环境变量(需要用逻辑设备ID,通过UUID跟smi看到的物理ID关联)6.不同地址的原子操作2.P2P与非P2P的性能差异3.GPU带宽测试 Tesla T4 P2P测试 通过物理ID找到逻…

一场大模型面试,三个小时,被撞飞了

去华为面试大模型&#xff0c;一点半去五点半回&#xff0c;已经毫无力气。 1️⃣一轮面试—1小时 因为一面都是各个业务的主管&#xff0c;所以专业性很强&#xff0c;面试官经验很丰富&#xff0c;建议大家还是需要十分熟悉所学内容&#xff0c;我勉强通过一面。 2️⃣二轮…

9_24_statusBar

statusBar&#xff08;状态栏&#xff09; 状态栏就是一个窗口最先面的一行&#xff0c;一般有三个作用&#xff1a; • 永久信息&#xff0c;例如版本号&#xff0c;机构名称 • 进度消息&#xff0c;如进度条提示&#xff0c;百分比提示 • 实时消息&#xff0c;当前程序状态…

神经网络的初步学习

文章目录 概要基础概念简单的神经网络图神经元模型权重求和激活函数输出 多层感知机前向传播&#xff1a;激活函数&#xff1a;误差计算&#xff08;损失函数&#xff09;&#xff1a;反向传播&#xff1a;1. **激活函数&#xff08;Activation Function&#xff09;**2. **非线…

mini-lsm通关笔记Week2Overview

Week 2 Overview: Compaction and Persistence 在上周&#xff0c;您已经实现了LSM存储引擎的所有必要结构&#xff0c;并且您的存储引擎已经支持读写接口。在本周中&#xff0c;我们将深入探讨SST文件的磁盘组织&#xff0c;并研究在系统中实现性能和成本效益的最佳方法。我们…

Skyeye 云这几年的经历

前言 我是 17 年毕业的&#xff0c;之前也是在学校的实验室 (做开发的) 待了两年多时间&#xff0c;期间学了不少东西&#xff0c;学的东西也算是与时俱进了。最近两年也算是开源中国的常客了&#xff0c;每周都会保持自己项目的一个更新进度。 项目地址&#xff1a;skyeye-o…

【SpringCloud】优雅实现远程调用 - OpenFeign

目录 优雅实现远程调用-OpenFeignRestTemplate存在问题OpenFeign介绍Spring Cloud Feign 快速上手引入依赖添加注解编写OpenFeign的客户端远程调用测试 OpenFeign参数传递传递单个参数传递多个参数传递对象传递JSON 最佳实践Feign 继承方式创建⼀个Module引入依赖编写接口打Jar…

ESP32,制作一个遥控点火玩具

最近想做一个遥控点火玩具&#xff0c;过年的时候可以让娃拿出手机遥控点炮&#xff0c;绝对能成为全村最亮的仔。 实际也挺简单&#xff0c;使用的东西有ESP32开发板&#xff0c;1838T红外接收器&#xff0c;一个继电器&#xff0c;一个钨丝。 原理图如下。 GPIO17接红外ou…

夹耳式蓝牙耳机哪个牌子最好?夹耳式耳机推荐性价比排行榜

耳夹式耳机既不堵耳孔、也不需要包覆耳廓&#xff0c;佩戴时看起来更像是一个“耳环”&#xff0c;固定方式也类似“夹耳朵”。不过&#xff0c;它并不是真的夹住了耳朵肉&#xff0c;而是半夹、半挂——依靠耳廓边缘厚、里面薄&#xff0c;且有一定的弯折面的特殊构造&#xf…

Arm Cortex-R52+ Generic Timer分析

目录 1.Generic Timer初识 2.R52的Generic Timer 3.如何配置Timer中断 4.小结 1.Generic Timer初识 Arm Cortex-R52内部实现了Generic Timer(通用计时器)&#xff0c;它可以基于递增计数来产生中断和事件流。 事实上&#xff0c;该计时器和Armv8-R AArch32中的定义完全一…

Python数据分析与可视化:从基础到高级应用

一、引言 在当今数据驱动的时代&#xff0c;数据的分析和可视化变得至关重要。Python作为一种功能强大且广泛使用的编程语言&#xff0c;在数据分析和可视化领域拥有丰富的库和工具。通过Python&#xff0c;数据分析师和科学家能够高效地处理数据、提取有价值的信息并以直观的方…

【网络安全】更改参数实现试用计划延长

未经许可,不得转载。 文章目录 正文目标:example.com,电子商务网站,允许企业在线创建商店。该平台提供了广泛的功能,如商店设计、创建产品等。 正文 在界面 example.com/start-your-trial/ 上,可以创建为期 15 天的试用商店。填写完所有信息后,我点击了“Sign Up”按钮…

BERT训练环节(代码实现)

1.代码实现 #导包 import torch from torch import nn import dltools #加载数据需要用到的声明变量 batch_size, max_len 1, 64 #获取训练数据迭代器、词汇表 train_iter, vocab dltools.load_data_wiki(batch_size, max_len) #其余都是二维数组 #tokens, segments, vali…

一带一路区块链赛项样题解析(中)

一带一路区块链赛项样题解析 (模块二) 标题任务一 按要求完成智能合约开发 1、学籍信息合约(Roll)接口编码(6分) (1)编写学籍信息合约中的RollInfo 实体接口,完成RollInfo实体通用数据的初始化,实现可追溯的学籍信息上链功能;(2分) // SPDX-License-Identifie…

FPGA IP 和 开源 HDL 一般去哪找?

在FPGA开发的世界中&#xff0c;IP核和HDL模块是构建复杂数字系统的基石。它们如同乐高积木&#xff0c;让开发者能够快速搭建和重用经过验证的电路功能。但你是否曾感到迷茫&#xff0c;不知道从哪里寻找这些宝贵的资源&#xff1f;本文将为你揭开寻找FPGA IP核和HDL模块资源的…

探索MemGPT:AI界的新宠儿

文章目录 探索MemGPT&#xff1a;AI界的新宠儿1. 背景介绍2. MemGPT是什么&#xff1f;3. 如何安装MemGPT&#xff1f;4. 简单的库函数使用方法5. 场景应用场景一&#xff1a;创建持久聊天机器人场景二&#xff1a;文档分析场景三&#xff1a;多会话聊天互动 6. 常见Bug及解决方…

【2.使用VBA自动填充Excel工作表】

目录 前言什么是VBA如何使用Excel中的VBA简单基础入门控制台输出信息定义过程&#xff08;功能&#xff09;定义变量常用的数据类型Set循环For To 我的需求开发过程效果演示文件情况测试填充源文件测试填充目标文件 全部完整的代码sheet1中的代码&#xff0c;对应A公司工作表Us…