Microsoft VBA Excel VBA函数学习笔记——数据切分熟练度+1
问题场景
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
Stock | 006 | 006 | 006 | 002 | 002 | 002 |
Market | US | US | US | US | US | US |
Weight | 0.01 | 0.109 | 0.228 | 0.222 | 0.239 | 0.72 |
Currency | EUR | USD | CNY | EUR | USD | CNY |
Term1 | 0.074 | 0.082 | 0.012 | 0.047 | 0.058 | 0.067 |
Term2 | 0.04 | 0.02 | 0.01 | 0.07 | 0.058 | 0.067 |
Term3 | 0.054 | 0.052 | 0.014 | 0.087 | 0.048 | 0.017 |
Term4 | 0.071 | 0.084 | 0.002 | 0.017 | 0.018 | 0.097 |
… | … | … | … | … | … | … |
函数接收六个参数,包括工作簿地址和sheet名称等。函数将会根据指定的Stock
和Market
来筛选数据,并将特定的Currency
数据复制到目标工作簿的相应位置。同时,会把对应的Weight
值存储到另一个目标sheet中。
草稿版本1:
Function UpdateRatesAndWeights(sourceWorkbookPath As String, sourceSheetName As String, _ByVal wsTarget As Worksheet, ByVal wsRun As Worksheet, _selectedStock As String, selectedMarket As String)Dim wbSource As WorkbookDim wsSource As WorksheetDim lastRow As Long, lastColumn As LongDim r As Long, c As LongDim startRow As Long, endRow As Long, startColumn As Long, endColumn As LongDim currencyColumn As IntegerDim weightRange As Range, termRange As RangeDim targetRow As LongDim currencyCode As StringDim weightName As String' 打开源工作簿Set wbSource = Workbooks.Open(sourceWorkbookPath)Set wsSource = wbSource.Sheets(sourceSheetName)' 获取数据的总行数和列数lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).RowlastColumn = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column' 找到符合条件的数据行列范围For c = 1 To lastColumnIf wsSource.Cells(1, c).Value = selectedStock And wsSource.Cells(2, c).Value = selectedMarket ThenIf startColumn = 0 ThenstartColumn = cEnd IfendColumn = cEnd IfNext c' 设置Term行的起止startRow = 4 ' 假设Term数据从第4行开始endRow = 102 ' 假设Term数据到第102行 (共99个Term)' 逐一复制Currency对应的数据For c = startColumn To endColumncurrencyCode = wsSource.Cells(3, c).Value ' Currency数据在第3行targetRow = wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row + 1' 复制数据到指定的Currency区域Set termRange = wsSource.Range(wsSource.Cells(startRow, c), wsSource.Cells(endRow, c))termRange.Copy Destination:=wsTarget.Cells(targetRow, wsTarget.Range(currencyCode).Column)' 复制Weight值weightName = "weight_" & currencyCodewsRun.Range(weightName).Value = wsSource.Cells(3, c).Offset(1, 0).Value ' 假设Weight在Currency下面一行Next c' 关闭源工作簿wbSource.Close SaveChanges:=False
End Function
缺陷:
- 函数假设
Currency
和Weight
数据的位置是固定的。如果位置有所不同,需要调整代码中的相关部分。 - 确保目标工作簿中有准确命名的命名区域,如
EUR
、USD
、CNY
以及weight_EUR
等。 - 缺少错误处理、异常捕捉和更复杂的数据验证。
为了提高代码的精确性和通用性,我
可以加入一些功能,比如动态查找Currency
和Weight
的列位置,以及更加详细的错误处理。这样的改进可以让函数更加健壮,也能适应更多变的数据布局。
草稿版本2:
Function UpdateRatesAndWeights(sourceWorkbookPath As String, sourceSheetName As String, _ByVal wsTarget As Worksheet, ByVal wsRun As Worksheet, _selectedStock As String, selectedMarket As String)Dim wbSource As WorkbookDim wsSource As WorksheetDim lastRow As Long, lastColumn As LongDim r As Long, c As LongDim startRow As Long, endRow As Long, startColumn As Long, endColumn As LongDim currencyColumn As IntegerDim weightRange As Range, termRange As RangeDim targetRow As LongDim currencyCode As StringDim weightName As StringDim currencyColumnMap As Object' 使用字典来映射Currency与列号Set currencyColumnMap = CreateObject("Scripting.Dictionary")' 打开源工作簿Set wbSource = Workbooks.Open(sourceWorkbookPath)Set wsSource = wbSource.Sheets(sourceSheetName)' 获取数据的总行数和列数lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).RowlastColumn = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column' 找到符合条件的数据行列范围For c = 1 To lastColumnIf wsSource.Cells(1, c).Value = selectedStock And wsSource.Cells(2, c).Value = selectedMarket ThencurrencyCode = wsSource.Cells(3, c).ValuecurrencyColumnMap(currencyCode) = cEnd IfNext c' 设置Term行的起止startRow = 4 ' 假设Term数据从第4行开始endRow = 102 ' 假设Term数据到第102行 (共99个Term)' 逐一复制Currency对应的数据For Each currencyCode In currencyColumnMap.Keysc = currencyColumnMap(currencyCode)targetRow = wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row + 1' 复制数据到指定的Currency区域Set termRange = wsSource.Range(wsSource.Cells(startRow, c), wsSource.Cells(endRow, c))termRange.Copy Destination:=wsTarget.Cells(targetRow, wsTarget.Range(currencyCode).Column)' 复制Weight值weightName = "weight_" & currencyCodewsRun.Range(weightName).Value = wsSource.Cells(3, c).Offset(1, 0).Value ' 假设Weight在Currency下面一行Next currencyCode' 关闭源工作簿wbSource.Close SaveChanges:=False
End Function
改进点说明:
-
使用字典:使用字典(
Scripting.Dictionary
)来存储每种Currency
及其对应的列号。这样可以更灵活地处理不同Currency
的位置,而不是硬编码列号。 -
动态处理:函数现在可以动态地处理不同的
Stock
和Market
组合,并且可以适应Currency
列位置的变化。
总结
仍存在缺陷,稍后会更新
相关文章:
Microsoft VBA Excel VBA函数学习笔记——数据切分熟练度+1
问题场景 123456Stock006006006002002002MarketUSUSUSUSUSUSWeight0.010.1090.2280.2220.2390.72CurrencyEURUSDCNYEURUSDCNYTerm10.0740.0820.0120.0470.0580.067Term20.040.020.010.070.0580.067Term30.0540.0520.0140.0870.0480.017Term40.0710.0840.0020.0170.0180.097………...

uniapp获取swiper中子组件的内容高度
swiper有默认高度,如果不单独设置一个具体高度,swiper后面的内容将不会展示 这里展示的例子是: swiper中放有一个子组件,想要完整展示子组件的内容,swiper就需要获取到子组件的内容高度并设置 <!-- 注意: 这里的单位是 px,不是rpx --><swiper…...

基于计算机爱心小屋公益机构智慧管理(源码+论文+部署讲解等)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优…...
详细学习PyQt5的样式表与界面美化
Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图(Item View) 快速弄懂Pyqt5的4种项目部件(Item Widget) 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…...
遥控器android设备键值原理
输入设备触发事件发送数据-》将键值映射到内核中预定义的键值-》上报键值,通过kl文件将按键码转化为标签字符串 内核获取键码,扫描码 按键标签其实对应的也是一个按键码。与kernel上报的按键码不同,按键标签所对应的按键…...
零基础也想学编程?Java零基础入门学习路线 + Java教程已准备好!
本文作者:程序员鱼皮 免费编程学习 - 编程导航网:https://www.code-nav.cn 符号表 可以通过路线知识点前的表情字符,根据自己的实际情况选择学习: 🌕 所有同学必须学习!!!…...

Avnet ZUBoard 1CG开发板上手—深度学习新选择
Avnet ZUBoard 1CG 开发板上手—深度学习新选择 摘要 本文主要介绍了 Avnet ZUBoard 1CG 开发板的特性、架构、硬件单元等概念,并对如何使用以太网接口和串口连接开发板进行基本介绍,同时辅以两个应用例程演示其功能。 原文链接: FreakSt…...
C/C++复习 day1
C/C复习 day1 文章目录 C/C复习 day1前言一、C语言1.memcpy函数2.memmove函数3.strstr函数4.宏定义的函数5.大小端的介绍以及判断 二、C入门基础1.C是如何支持函数重载的?2.建议用const enum inline去替代宏 三、C类和对象1.类大小的计算2.移动构造和移动赋值1.右值…...

再见Figma!!新的设计,代码协作神器!【送源码】
软件介绍 Penpot 是一款专门用来帮助设计师和开发者更好地合作的软件。它可以让设计师轻松地做出漂亮的设计稿,还能让这些设计稿变成真正的网站或者应用的一部分。这样,设计师和开发者之间就不会因为沟通不畅而产生麻烦了。 Penpot 专为设计师与开发者之…...
快速拷贝复制工具软件@拷贝工具@多线程拷贝@robocopy
文章目录 refs常见复制工具高速拷贝工具特性对比 Robocopy👺Robocopy工具基本用法语法示例 常用选项常见选项列表示例 高级用法多线程复制日志记录 用例案例直接递归复制大量文件的文件夹多线程复制监视被打开文件文件数 复制时排除某个目录排除交接点跳过无法复制的…...

JavaScript 逆向爬取实战
准备介绍: 当我们学习完整个 JS 逆向技巧后,这里是一次完整的分析爬取实战 案例介绍 本节案例网站不仅在 API 参数有加密, 而且前端 JS 也带有压缩混淆,其前端压缩打包工具使用 webpack , 混淆工具使用 javascript-obfuscator 。…...

Vue 项目中导入文件时如何默认找寻该文件夹下的 index.vue 文件
文章目录 需求分析 需求 如下图,在Vue 项目中导入 frequencyChange 文件夹时如何默认找寻该文件夹下的 index.vue 文件 分析 确保项目结构和命名约定 首先,确保你的 Vue 单文件组件按照约定命名,例如: components/Example/inde…...

Idea2023.3.3 —— SourceTree与gitee关联
SourceTree SourceTree链接: https://pan.baidu.com/s/1oqPxhpHeNOOiuRRQydes6g?pwdngru 提取码: ngru 点击Generate 分别保存私钥和公钥 gitee官网注册 这是gitee的公钥,与上面SourceTree的公钥私钥不一样 gitee生成公钥,确保本地安装好git git链接: h…...

一文HDMI (High-Definition Multimedia Interface)
HDMI(High-Definition Multimedia Interface,高清多媒体接口)是一种紧凑的音视频接口,它能够将未压缩的视频数据以及压缩或未压缩的数字音频数据,从符合HDMI标准的源设备无缝传输到兼容的计算机显示器、视频投影仪、数…...
【HBZ分享】高并发下如何设计缓存来提升系统性能?
普通模式 普通模式即前段调用后端接口,然后后端先查缓存, 查不到的情况下再查数据库,然后把数据库中的内容放到缓存中。瓶颈:瓶颈在于tomcat的性能,一般并发可以,面临海量并发冲击,tomcat就显得…...

【AI 绘画】 文生图图生图(基于diffusers)
AI 绘画- 文生图&图生图(基于diffusers) 1. 效果展示 本次测试主要结果展示如下: SDXL文生图 可爱Lora 2. 基本原理 模型基本原理介绍如下 stable diffusion首先训练一个自编码器,学习将图像数据压缩为低维表示。通过使…...
已解决HarmonyOS模拟器卡顿问题
以下是一些可以尝试用来解决 HarmonyOS 模拟器卡顿问题的方法: 一、检查系统资源占用 关闭不必要的后台程序 在电脑上,通过任务管理器(Windows 系统中按 Ctrl Shift Esc,Mac 系统通过活动监视器)查看并关闭占用大量 …...
C++ | 深入理解C++中的特殊类设计和单例模式(懒汉模式、饿汉模式)
目录 特殊类设计和单例模式 1、不可拷贝类 2、只能在堆上创建对象的类 3、只能在栈上创建对象的类 4、不可继承的类 5、单例模式(懒汉模式、饿汉模式) 特殊类设计和单例模式 在C编程中,类的设计往往需要满足特定的需求和约束。特殊类设计模式提供了一种方法来…...
Java设计模式之中介者模式
Java设计模式之中介者模式 在软件开发中,设计模式是解决常见问题的最佳实践。通过运用设计模式,我们可以提高代码的可维护性、可扩展性以及可读性。今天,我们将探讨一种非常重要的行为型设计模式——中介者模式(Mediator Pattern…...
实现父组件调用子组件方法时报错:[Vue warn]: Invalid vnode type when creating vnode: null.
使用uniapp实现父组件调用子组件方法时报错:[Vue warn]: Invalid vnode type when creating vnode: null. 实现代码如下: 子组件: <template><view><view class"toolsHeader"><view class"toolsTitl…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...