Microsoft VBA Excel VBA函数学习笔记——数据切分熟练度+1

【Excel VBA 从入门到出门】一、Excel VBA 是个啥? VBA代表Visual Basic for A applications。它是一种编程语言,用于自动执行 Microsoft Office 产品(包括 Excel、Word 和 Outlook)中的任务。使用 VBA Excel,您可以编写代码来自动执行任务、创建自定义函数,甚至在 Office 程序之间移动数据。 阅读详情

问题场景

123456
Stock006006006002002002
MarketUSUSUSUSUSUS
Weight0.010.1090.2280.2220.2390.72
CurrencyEURUSDCNYEURUSDCNY
Term10.0740.0820.0120.0470.0580.067
Term20.040.020.010.070.0580.067
Term30.0540.0520.0140.0870.0480.017
Term40.0710.0840.0020.0170.0180.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 Workbook
    Dim wsSource As Worksheet
    Dim lastRow As Long, lastColumn As Long
    Dim r As Long, c As Long
    Dim startRow As Long, endRow As Long, startColumn As Long, endColumn As Long
    Dim currencyColumn As Integer
    Dim weightRange As Range, termRange As Range
    Dim targetRow As Long
    Dim currencyCode As String
    Dim weightName As String
    
    ' 打开源工作簿
    Set wbSource = Workbooks.Open(sourceWorkbookPath)
    Set wsSource = wbSource.Sheets(sourceSheetName)
    
    ' 获取数据的总行数和列数
    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
    lastColumn = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column
    
    ' 找到符合条件的数据行列范围
    For c = 1 To lastColumn
        If wsSource.Cells(1, c).Value = selectedStock And wsSource.Cells(2, c).Value = selectedMarket Then
            If startColumn = 0 Then
                startColumn = c
            End If
            endColumn = c
        End If
    Next c
    
    ' 设置Term行的起止
    startRow = 4  ' 假设Term数据从第4行开始
    endRow = 102  ' 假设Term数据到第102行 (共99个Term)
    
    ' 逐一复制Currency对应的数据
    For c = startColumn To endColumn
        currencyCode = 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_" & currencyCode
        wsRun.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 Workbook
    Dim wsSource As Worksheet
    Dim lastRow As Long, lastColumn As Long
    Dim r As Long, c As Long
    Dim startRow As Long, endRow As Long, startColumn As Long, endColumn As Long
    Dim currencyColumn As Integer
    Dim weightRange As Range, termRange As Range
    Dim targetRow As Long
    Dim currencyCode As String
    Dim weightName As String
    Dim 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).Row
    lastColumn = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column
    
    ' 找到符合条件的数据行列范围
    For c = 1 To lastColumn
        If wsSource.Cells(1, c).Value = selectedStock And wsSource.Cells(2, c).Value = selectedMarket Then
            currencyCode = wsSource.Cells(3, c).Value
            currencyColumnMap(currencyCode) = c
        End If
    Next c
    
    ' 设置Term行的起止
    startRow = 4  ' 假设Term数据从第4行开始
    endRow = 102  ' 假设Term数据到第102行 (共99个Term)
    
    ' 逐一复制Currency对应的数据
    For Each currencyCode In currencyColumnMap.Keys
        c = 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_" & currencyCode
        wsRun.Range(weightName).Value = wsSource.Cells(3, c).Offset(1, 0).Value  ' 假设Weight在Currency下面一行
    Next currencyCode
    
    ' 关闭源工作簿
    wbSource.Close SaveChanges:=False
End Function

改进点说明:

  1. 使用字典:使用字典(Scripting.Dictionary)来存储每种Currency及其对应的列号。这样可以更灵活地处理不同Currency的位置,而不是硬编码列号。

  2. 动态处理:函数现在可以动态地处理不同的Stock和Market组合,并且可以适应Currency列位置的变化。

总结

仍存在缺陷,稍后会更新

【vba】——整合excel数据 vba是在最初组织旧版评教系统时就接触过的,但一直没研究过,也没仔细看过。只知道它可以整理数据。 了解:     Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种 阅读详情

相关推荐

Excel VBA初级系列培训--课时1

Excel VBA初级系列培训 ...

Jimmy Zeng 1291

Cells(Rows.Count, 1).End(xlUp).Row的含义

在看一本书的时候没搞明白例子上写的一句话,如上。 经调试才搞明白。分享给大家。 NextRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1 这句话的意思是取活动单元表的第一列最后一个有值的行的下一行行号。 Rows.Count是指当前活动工作表的行数,为数字1048576,很熟悉的一个数字,为Excel...

weixin_30376163的博客 2236

微软函数 for vba自定义函数Function

https://cg520.lanzoub.com/b01d50fza 密码:6666

qq_59670557的博客 1390

Excel VBA高级编程 - 根据关键字自动搜索,自动生成下拉菜单

因为工作需要,每一次都要从SAP查找物料信息,手动生成物料清单(Boom表),繁琐且容易出错。使用VBA实现了如下功能:1、根据关键字,自动检索符合条件的产品信息2、自动生成下拉菜单3、选定物料名称,其他产品信息将自动对应输入附件代码:Private Sub Worksheet_Change(ByVal Target As Range)Dim whereStr$, sql$, conn, mr%,...

Rubicon_Chen的博客 2万+

使用VBA,20行代码 将Excel数据导出

程序员免不了与策划或运维打交道。通常情况是有配置数据的更改。但是即便是程序员也有写错的时候。更改一个配置,使用更直观的excel,成为了单写配置工具的替代方案。这里介绍一个将Excel的数据导出生成文件的方法。

阿修罗道 1万+

VBA 学习笔记之– Excel 对象篇(一)

VBA 学习笔记之– Excel 对象篇(一)Excel 2013 版之后的本地帮助文档不见啦! 选中对象浏览器中内容按下F1会直接跳转到msdn的页面, 然后你会发现自己不停的各种页面直接跳来跳去,慢的蜗牛一样的微软服务器真心让人happy不起来. 在受够了卡成狗的Chrome和蹩脚的Excel 2013 Developer Documentation https://www.micros

Florarine的博客 3587

VBA学习2_教你快速入门Excel-宏与VBA(下)

上一篇博客《教你快速入门Excel-宏与VBA(上)》,我们主要对Excel宏与VBA进行了简单的介绍和使用说明,这次我们做一个宏与VBA的简单实例,通过这个实例,了解宏与VBA的优势所在,在此之前,读者有必要了解一下Excel中单元格,行和列的命名和VB的一些基础语法,这里我们不做过多的解释。   需求说明:     某学校要进行体育测试,需要根据输入的成绩,自动对应得分,同时自动计算总

wang_zhenwei的博客 2744

WEBGL Shader零基础教程(四):片元着色器核心逻辑

本文系统介绍了WebGL渲染管线中片元着色器的核心概念与应用。主要内容包括:1)片元着色器在渲染管线中的定位与作用,作为逐像素处理单元接收插值数据并计算最终颜色;2)输入数据类型与使用规则,重点讲解varying变量和uniform变量的应用场景;3)颜色计算的核心逻辑,涵盖基础色、渐变、纹理采样和颜色混合;4)进阶特效实现与性能优化技巧,包括交互效果、内置函数组合和GPU计算优化;5)通过综合案例演示了纹理、波纹与交互效果的整合实现。文章提供了完整的代码示例和调试建议,为后续学习光照模型、后期处理等高级渲

分享知识,拥抱变化 1374

VBA开发:设置单元格数据有效性

比如,我们设计一个成本分析的软件,可能需要将不同的费用归集到相应的成本分类,假如我们有固定资产、营销费用、原材料等类,但是如果不加限制,很有可能用户会输入一个其他的类别,这就会导致最后的数据混乱。图1是运行程序之后的情形,当鼠标指向第一列的某个单元格时,该单元格会出现一个选择框,按选择箭头,就会出现我们指定的三个选项。如果我们输入的内容不是指定的内容,就会出现“输入无效“的提示。这个实例中,我们对所有位于第1列中第二行之后的单元格指定数据有效性,只允许用户输入“固定资产”,”营销费用”,”原材料”三个词。

weixin_50233916的博客 3624

Autodesk软件网络授权破解

Autodesk 全系列产品网络授权破解 此网络许可授权破解文件及方法适用Autodesk 绝大部分的产品, 安装网络许可证管理器Autodesk网络许可证管理器x64位官方下载地址( https://knowledge.autodesk.com/sites/default/files/file_downloads/nlm11.14.1.3_ipv4_ipv6_win64.msi ) Autod...

weixin_33919950的博客 8270

ACM论文LaTeX模板解析(三)| 文章顶部信息(Top matter))Part 1

文章顶部信息(Top matter))Part 1,文章类型、作者信息等

FreshManInC的博客 4853

EXCEL VBA 入门与实用例子

VBA这个以前用过,放下很久了,最近因需要用Excel处理数据,用到了它,使用了其它一些方式,对比一下,感到VBA还是有些长处的。故将以前的学习笔记,重新整理了一下,发表到这里,供有需要的人借鉴。...............

cnds123的专栏 7万+

“华为杯”研究生数学建模竞赛2020年-【华为杯】D题:无人机集群协同对抗(附获奖论文和MATLAB代码实现)

1.问题重述摘 要:本文针对非线性约束条件下红蓝双方无人机集群协同对抗的最优规划问题,结合贪婪队形、非线性规划、内点法、蒙特卡洛方法和全联立正交配置有限元法,构建了无人机集群协同对抗推演模型。,构建了。我们综合考虑了,和。首先分析红方在集群约束下的贪婪队形和拦截策略,然后我们基于内点法联合MATLAB和AMPL编程求解蓝方突防的非线性规划解,最后基于蒙特卡洛法对整个蓝方突防过程进行推演,得到突防概率图。通过推演,我们提出了两块的区域作为所求区域,并对蓝方的最优突防策略进行分析。

getusushu的博客 1553

Excel VBA学习

首先,第一个问题,什么是 VBA?Visual Basic for Applications(VBA)是 VisualBasic 的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展 Windows 的应用程序功能,特别是Microsoft Office软件。以上是 VBA 的百科定义,说简单点,VBA 是运行在 Microsoft Office 软件之上,可以用来编写非软件自带的功能的编程语言。

qq_45303968的博客 1万+

【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件

本文介绍了如何将C#游戏开发中的代码从单个.cs文件拆分到多个.cs文件中,以提升代码的可维护性和可读性。文章演示了在Visual Studio中创建Hero类和ShowInfo类的具体步骤:通过右键项目名添加新建类,将原有代码分别剪切到对应的类文件中,并自动生成命名空间。拆分后需要在Program.cs中通过"using"指令引用这些类,最后通过运行测试验证功能正常。这种模块化代码组织方式能有效解决单一文件代码过长、结构混乱的问题。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1138

工业仪表读数识别:YOLO目标检测 + OCR混合方案实战

仪表整体(meter):粗定位整只仪表,用于快速裁剪、排除背景干扰表盘区域(dial):精确的圆形/方形表盘区域,用于后续矫正和读数数字区域(display)/指针(pointer):数显表定位数码管区域,指针表可辅助定位指针为什么要分三级?因为现场仪表安装角度、距离、光照差异极大。先粗检再精检,比一步到位的准确率高很多,也方便后续做透视变换。工业仪表读数识别,技术路线的选择比算法精度更重要。选对了路线,事半功倍;选错了,怎么调都达不到验收标准。几条落地建议:指针表优先传统算法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 96

Excel VBA简单语法

摘要: 该文为想要学习VBA编程的会计和编程同学有一定的个性化定制Excel操作提供参考 1. VBA编程是什么 VBA 究竟是什么?更确切地讲,它是一种自动化语言,它可以使常用的程序自动化,可以创建自定义的解决方案.90 年代早期,微软决定让它开发出来的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),而这种语言使EXCEL的用宏...

Master_Shifu_的博客 1万+

PINN求解PDE

PINN求解Dirichlet泊松方程 泊松方程引入 −Δu=f,x∈Ω=(0,1)2-\Delta u=f,x \in \Omega=(0,1)^2−Δu=f,x∈Ω=(0,1)2 u=g,x∈∂Ωu=g,x \in \partial \Omegau=g,x∈∂Ω import torch import time import numpy as np import matplotlib.pyplot as plt import torch.nn as nn def UU(X, order,prob):

forrestguang的博客 3807

VBA读取其他Excel内容

VBA读取其他Excel内容AccessDataBaseEngine安装Excel内容读取 采用Microsoft于2020/8/11新出的AccessDataBaseEngine(Microsoft Access 2016 数据库引擎可再发行程序包)在VBA中读取Excel内容。 AccessDataBaseEngine安装 如何选择安装32位或64位AccessDataBaseEngine?打开Excel,点击文件 > 账户 > 关于Excel 查看。下载AccessDataBaseEngi

weixin_47342231的博客 7358

152:vue+leaflet 判断一个点是否在一个电子围栏内

本文介绍了一个基于Vue+Leaflet的示例,演示如何判断点是否在电子围栏内。作者大剑师兰特(优快云知名博主)展示了使用polygon.getBounds().contains(latlng)方法检测点与多边形边界的关系。代码仅需80行,通过点击地图触发判断逻辑,结果显示提示信息。该技术可广泛应用于地理围栏、位置服务等场景,需要安装turf依赖。文章提供了完整源码和配置说明,适合GIS开发者学习参考。

大剑师兰特的GIS世界 759

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Microsoft VBA Excel 提取相同名称的整列数据

啦啦啦

RandPython的博客 2264

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Microsoft VBA Excel 一键写入和一键清除

快乐打工日记【香港】

RandPython的博客 3918

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

vba 打开其他excel 并写入数据_如何将 Excel 的数据写入到 Accees?

如何将 Excel 的数据写入到 Accees?Aceess 是微软出品的桌面关系型数据库,也是在 Office 大礼包中的套件之一,和大名鼎鼎的 Excel 不同;Access 主要承担了数据存储和 SQL 查询的功能,需要的数据技能要更为结构化与进阶;总体来说,Excel 的强项在于灵活的分析数据,它的基本对象的单元格Cell;而 Access 的基本对象是Record,是一种结构化的数据形式...

weixin_39889642的博客 2428

微软 python替代vba_重大改变!Python 或将取代 VBA 成为 Excel 官方脚本语言

关键时刻,第一时间送达!如果微软的 Excel 中支持了人生苦短的 Python,你还会喜欢那个直接且易上手的 VBA 编程吗?近日,据国外媒体 BLEEPINGCOMPUTER 报道,微软正考虑添加 Python 为官方的一种 Excel 脚本语言,如果获得批准,Excel 用户将能够像目前使用 VBA 脚本一样,使用 Python 脚本与 Excel 文档、数据以及一些 Excel 核心函数进...

weixin_39636245的博客 3774

在VBA中引用excel的函数

在 Visual Basic 语句中可以使用大多数 Microsoft Excel 工作表函数。若要查看可以使用的工作表函数列表,请参阅 Visual Basic 可使用的工作表函数列表。 注意 一些工作表函数在 Visual Basic 中是不实用的。例如:Concatenate 函数就不实用,因为在 Visual Basic 中可使用 & 运算符来连接多个文本值。 从 Visual B

JofeeDong's Blog 9335
上一篇: Microsoft VBA Excel 操控 Access资料表和查询代码进行搬运操作
下一篇: Microsoft VBA Excel VBA学习笔记——双重筛选+复制数值1.0
偷心伊普西隆
博客等级 码龄7年 511粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值