在VBA中使用SQL

VBA在处理大量的数据/计算时如果使用常规方法会比较慢,因此需要对其进行性能优化以提高运行速度,一般的方法是数组计算或者sql计算。SQL计算的速度最快,限制也是最多的,数组速度其次,灵活性也更高

如果要在vba中调用sql处理数据基本可以遵循一个套路,只要修改其中的SQL语句即可

调用sql处理数据VBA代码如下,其中’##### #####中的地方是每次运行时要根据情况修改的:

Sub Sql_Query()Dim Conn As Object, Rst As ObjectDim strConn As String, strSQL As StringDim i As Integer, PathStr As StringSet Conn = CreateObject("ADODB.Connection")Set Rst = CreateObject("ADODB.Recordset")PathStr = ThisWorkbook.FullName Select Case Application.Version * 1 '设置连接字符串,根据版本创建连接(不同版本的excel连接是不同的)Case Is <= 11strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStrCase Is >= 12strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""End SelectstrSQL = "Select * FROM [rawdata$]"   '####在这里改SQL查询语句####Conn.Open strConn '打开数据库链接Set Rst = Conn.Execute(strSQL) 	'执行查询,并将结果输出到记录集对象With ThisWorkbook.Sheets("sql data") 	'#####在这里更改输出的位置对应的表名####.Cells.ClearFor i = 0 To Rst.Fields.Count - 1    '填写标题.Cells(1, i + 1) = Rst.Fields(i).Name	'在第一行输出字段名Next i.Range("A2").CopyFromRecordset Rst     '从A2单元格开始输出.Cells.EntireColumn.AutoFit '自动调整列宽End WithRst.Close  '关闭数据库连接Conn.CloseSet Conn = NothingSet Rst = NothingEnd Sub

接下来,开始学习SQL语句语法

1.基于一张工作表的查询语法

SQL语法格式比较固定,只需要根据特定的语法顺序,再根据需求加减关键字即可。首先我们给出一个比较全的格式如下:

 SELECT   [DISTINCT]   [TOP <数值>  [PERCENT]]   列标题  [聚合函数]   [[AS] <别名列标题>]   FROM  表或查询 [[AS] <别名>]   [WHERE <筛选条件>]  [ORDER BY <排序项>  [ASC|DESC]]                                

说明:

  1. <>表示必选项,[]表示可选项,|表示多选一。
  2. SQL语句中不区分大小写,上述式中的的大写意为SQL中关键字
  3. SELECT 关键字:选取关键字
  4. DISTINCT关键字:去除重复的行
  5. TOP 关键字:显示前几条记录
  6. PERCENT关键字:TOP 与 PERCENT 组合在SQL语句中的使用可以按照百分比提取数据
  7. AS关键字:给标题列重新命一个新名称
  8. FROM关键字:给定数据源的名称
  9. WHERE关键字:筛选条件语句
  10. ORDER BY关键字:排序,一般和ASC|DESC一起使用,将结果升序或者降序排列。

接下来详细讲解每一个关键字的使用:

SELECT关键字和FROM 关键字

SELECT关键字和FROM 关键字是每个SQL语句中都必须要有的关键字。SELECT关键字可以选取最终需要显示所有字段,而FROM关键字则用于告诉程序数据源的位置在哪里。VBA中一个最基本的SQL语句写法如下:

SELECT 列字段名1,列字段名2,列字段名3...... FROM [工作表名称$]

例如我们需要从student这一个sheet中取出ID,name,address,score这四列数据:

select ID,name,address,score from [student$]

也可以使用[]将列名括起来表示这是一个列名

select [ID],[name],[address],[score] from [student$]

如果需要取所有的列,可以直接使用“*”号来取全部的列,从而减少代码量

#*号是代表全部列
select * from [sheet1$]

AS关键字

AS关键字用于给字段或者数据源表取别名,从而简化一些比较长的表名或字段名

#从student表中选取姓名列,并重命名为Name
SELECT 姓名 AS Name FROM [Student$]

DISTINCT关键字

DISTINCT关键字功能是去重,语法结构为:

SELECT DISTINCT 要去重复值的字段1,要去重复值的字段2...... FROM [工作表名$]

举例如下:

#选取所有不重复的name
Select Distinct name From [student$]
#选取name和ID都不重复的数据
Select Distinct name,ID From [student$]

WHERE关键字

where关键字可以按条件筛选数据。WHERE语句后可以有一个或多个条件,条件之间可以用操作符AND 或者OR进行连接。
WHERE语句的语法结构如下:

SELECT 列字段名称 FROM [表名称$] WHERE 条件

where后的条件语句可以是运算符或逻辑判断,包含大于、小于、等于、不等于、大于或等于、小于或等于、IN、 BETWEEN、AND、NOT等。

#选取取消费金额等于100的数据
SELECT * FROM [test$] where 消费金额=100
#选取级别为A的数据
SELECT * FROM [test$] where 级别='A'

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

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

相关文章

通过Stable Diffusion生成虚假的遥感影像

简介 这两天玩了一下stable diffusion&#xff0c;是真的好玩&#xff01; 然后我在想遥感有没有相关的生成模型&#xff0c;找了一下&#xff0c;还真找到了&#xff08;https://github.com/xiaoyuan1996/Stable-Diffusion-for-Remote-Sensing-Image-Generation/tree/main&a…

@JsonFormat失效,被jackson自定义配置覆盖

jackson配置类 我的jackson配置类如下&#xff0c;其中serializerByType(LocalDateTime.class, new LocalDateTimeSerializer()) 覆盖了JsonFormat注解 Configuration public class JacksonConfiguration {public static final DateTimeFormatter optionalDateTimePattern (n…

class_10:this关键字

this关键字是指向调用对象的指针 #include <iostream> #include <iostream> using namespace std;class Car{ public://成员数据string brand; //品牌int year; //年限//构造函数名与类名相同Car(string brand,int year){cout<<"构造函数中&#…

快速上手的AI工具-文心一言绘画达人

前言 大家好&#xff0c;现在AI技术的发展&#xff0c;它已经渗透到我们生活的各个层面。对于普通人来说&#xff0c;理解并有效利用AI技术不仅能增强个人竞争力&#xff0c;还能在日常生活中带来便利。无论是提高工作效率&#xff0c;还是优化日常任务&#xff0c;AI工具都可…

Python 容器型数据类型基本认识

容器型数据类型&#xff1a;用一个变量可以保存多个数据。 Python中&#xff0c;常见的容器型数据类型有&#xff1a;列表&#xff08;List&#xff09;、元组&#xff08;Tuple&#xff09;、集合&#xff08;Set&#xff09;、字典&#xff08;Dictionary&#xff09;。 其…

高数总结(2

目录 1.总结&#xff1a;小结&#xff1a; 1.总结&#xff1a; 小结&#xff1a; 关注我给大家分享更多有趣的知识&#xff0c;以下是个人公众号&#xff0c;提供 ||代码兼职|| ||代码问题求解|| 由于本号流量还不足以发表推广&#xff0c;搜我的公众号即可&#xff1a;

Java实现 快速排序(Quick_sort)

文章目录 前言它的基本思想是:快速排序实现-理论快速排序实现-实践 前言 虽然快排是一种不稳定的排序方式&#xff1a; 但是还是很快的&#xff0c;而且面试中我也有被问到过。 它的基本思想是: 选择一个基准数&#xff0c;通过一趟排序将要排序的数据分割成独立的两部分&a…

JavaEE-SSM-订单管理-前端增删改功能实现

3.5 功能2&#xff1a;添加 从列表页面切换到添加页面 编写对应添加页面的路由 * {path: /orderAdd,name: 添加订单,component: () > import(../views/OrderAdd.vue)}编写添加功能 <template><div><table border"1"><tr><td>编…

LeetCode-2865. 美丽塔 I

题面 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i &#xff0c;高度为 heights[i] 。 如果以下条件满足&#xff0c;我们称这些塔是 美丽 的&#xff1a; 1 < heights[i] < maxHeights[i] heights 是…

nexus清理docker私库

下载nexus-cli客户端&#xff0c;并非必须下载到服务器&#xff0c;理论上只要能访问到nexus就行 wget https://s3.eu-west-2.amazonaws.com/nexus-cli/1.0.0-beta/linux/nexus-cli这个链接下载不了了&#xff0c;末尾有资源下载&#xff0c;里面包含了完整包和脚本&#xff0…

分布变化下的Test-Time adaption 综述

论文 https://arxiv.org/abs/2303.15361 代码 https://github.com/tim-learn/awesome-test-time-adaptation &#xff08;其实这是相关领域代码和论文合集之类的东西&#xff09; Abstract 机器学习方法努力在训练过程中获得一个鲁棒模型&#xff0c;即使在分布变化的情况下…

0124-2-算法题解析与总结(四)

5.5 如何去除有序数组的重复元素 本文对应的力扣题目&#xff1a; 26.删除排序数组中的重复项 83.删除排序链表中的重复元素 26.删除排序数组中的重复项&#xff1a; int removeDuplicates(int[] nums) {int n nums.length;if (n 0) return 0;int slow 0, fast 1;while…

【原创】linux为什么不是实时操作系统

文章目录 一、什么是实时操作系统&#xff08;RTOS&#xff09;&#xff1f;二、linux为什么不是实时操作系统&#xff1f;中断响应时间中断处理时间任务调度时间1、No Forced Preemption(Server)2、Voluntary Kernel Preemption(Desktop)3、Preemptible Kernel(Low-Latency De…

Java 中的注解(Annotation)

Java 中的注解&#xff08;Annotation&#xff09; 一、元注解1.Java 中的元注解 二、Java 中内置的三大注解三、自定义注解1.语法格式 四、反射注解五、注解的作用六、总结 所有的注解类型都继承自 java.lang.annotation.Annotation 接口。注解(Annotation)是一种引用数据类型…

正则表达式 格式化excel表格数据

一、从excel表格复制一列数据 二、形成数据格式 ‘4013197767140’,‘5776879019003’, 三、操作 打开编辑器&#xff0c;使用正则匹配

k8s---helm

Helm是什么&#xff1f; 在没有helm之前。部署一个服务&#xff0c;需要deployment、service、ingress、挂在卷等等相关配置都需要人工来配置。 helm的作用就是通过打包的方式&#xff0c;把需要人工编写的配置集成在一起。是一键式的部署服务。类似于yum功能。 由官方提供的…

C++笔记(二)

函数的默认参数 如果我们自己传入数据&#xff0c;就用自己的数据&#xff0c;如果没有&#xff0c;就用默认值 语法&#xff1a; 返回值类型 函数名&#xff08;形参默认值&#xff09;{} int func&#xff08;int a&#xff0c;int b20&#xff0c;int c30&#xff09;{} …

pytorch实战-6手写数字加法机-迁移学习

1 概述 迁移学习概念&#xff1a;将已经训练好的识别某些信息的网络拿去经过训练识别另外不同类别的信息 优越性&#xff1a;提高了训练模型利用率&#xff0c;解决了数据缺失的问题&#xff08;对于新的预测场景&#xff0c;不需要大量的数据&#xff0c;只需要少量数据即可…

2012-2022年全国各省数字经济相关指标数据合集(18个指标)

2012-2022年全国各省数字经济相关指标数据合集&#xff08;18个指标&#xff09; 1、时间&#xff1a;2012-2022年 2、指标&#xff1a;地区、year、互联网接入端口数、互联网宽带接入用户数、互联网域名数、移动电话普及率、长途光缆线路长度&#xff08;万公里&#xff09;…

java开发——《并发编程》

目录 一.jmm 二.并发了什么 1.只有一个核&#xff08;单核&#xff09;并发还有没有意义 2.单核&#xff0c;还有什么可见性问题 3.并发和并行 三.volitaile 1.变量的可见性问题 2.原因是什么 3.本次修改的变量直接刷到主内存 4.声明其他内存对于这个地址的缓存无效 …