导航

    精算后花园

    • 注册
    • 登录
    • 搜索
    • 版块
    • 最新
    • 话题
    • 热门
    • 用户
    • 群组
    1. 主页
    2. Mengkelyu
    3. 最佳
    M
    • 资料
    • 关注
    • 粉丝
    • 主题
    • 帖子
    • 最佳
    • 群组

    Mengkelyu 发布的最佳帖子

    • 如何用SQL语法处理Excel数据? ADO对象在Excel中的处理

      ActiveX Data Objects (ADO) 让我们能够用一个工具来操作SQL Server, Access DB, Worksheet

      ADO有很多用法,首先介绍一个:把excel中的表用SQL语法来处理

      使用ADO流程是

      • 建立连接
      • 写SQL语句
      • 执行SQL语句

      要使用ADO,首先要打开编辑VBA的界面,上面的菜单栏里面有一个是Tools,点击Tools, 里面找到reference。勾选上Microsoft ActiveX Data Objects 6.1 Library(如果没有6.1版本,也可以用2.8版本)

      建立连接的基本语法如下

      Dim Con as new ADODB.Connection
      Con.Open "Connection string" 
              '运行SQL语句
      Con.Close
      

      这里的connection string需要根据不同的Excel版本确定

      https://www.connectionstrings.com/ 这个网站提供了不同情况下需要用到的connection string

      我的excel版本是2016,我用的connection string如下

      strFileName=ThisWorkbook.Fullname
      "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFileName & "; Extended Properties=""Excel 12.0 Macro;HDR=Yes"";"
      

      就可以成功连接到目前用的工作表啦

      发布在 Excel & VBA
      M
      Mengkelyu
    • 如何安装Github中的R包

      大家都知道如何安装CRAN的R包,只要输入

      install.packages("包名称")
      

      就可以直接从CRAN下载包啦!
      但是有的包CRAN中没有,只有Github版本。这个时候我们需要用一个叫做devtools的工具帮我们的忙啦!
      一般的流程是

      install.packages('devtools')
      
      library(devtools)
      
      devtools::install_github("你要下载的包的github网页路径")
      

      但是我自己实际测试之中出现了如下的Bug:

      Error: Failed to install 'unknown package' from GitHub:
      schannel: failed to receive handshake, SSL/TLS connection failed

      好叭。
      只能手动从Github下载包辽。
      下载好zip文件解压之后之后在R中输入如下指令:

      install("解压后的文件路径")
      

      大功告成!

      发布在 R
      M
      Mengkelyu
    • RE: 如何用SQL语法处理Excel数据? ADO对象在Excel中的处理

      第二步是运行SQL。首先讲讲SELECT要怎么用

      • 创建新对象:Recordset,用于储存SELECT运行出来的结果
      Dim rs As New ADODB.Recordset
      '如果你想要运行SQL的表是一个命了名的区域
      strSQL="SELECT * FROM range"
      ’如果要运行的表是一整个worksheet
      ‘如果数据超过65536行,由于一个excel bug,只能用下面这种方法引用表
      strSQL="SELECT * FROM [Sheet1$]"
      '如果是一个未命名区域
      strSQL="SELECT * FROM [Sheet1$A1:O60]"
      'con是刚刚用到的ADO connection
      rs.Open strSQL, con
      rs.Close
      
      • 把运行出来的结果保存到一个新建的excel表
      Dim ws As Worksheet
              Set ws = output 'Application.Sheets.Add
              ws.Cells.ClearContents
              'Write the header
              Dim i As Long
              For i = 0 To rs.Fields.Count - 1
                  ws.Cells(1, i + 1).Value2 = rs.Fields(i).Name
              Next i
              ws.Range("A2").CopyFromRecordset rs
      

      完整代码如下

      Sub ADOBD_SELECT()
      Dim strFileName As String
      Dim ConnectionString As String
      'Fullname means the folder path is included
      strFileName = ThisWorkbook.FullName
      
      'From website https://www.connectionstrings.com/
      'HDR=Yes -> my data set has heading
      ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFileName & "; Extended Properties=""Excel 12.0 Macro;HDR=Yes;"";"
      
      Dim conn As New ADODB.Connection
      'Recordset: where the result of the query will be placed
      Dim rs As New ADODB.Recordset
      Dim strSQL As String
      'Write the query
      strSQL = Range("Query")
      conn.Open ConnectionString
              rs.Open strSQL, conn
              Dim ws As Worksheet
              Set ws = output 'Application.Sheets.Add
              ws.Cells.ClearContents
              'Write the header
              Dim i As Long
              For i = 0 To rs.Fields.Count - 1
                  ws.Cells(1, i + 1).Value= rs.Fields(i).Name
              Next i
              ws.Range("A2").CopyFromRecordset rs
              rs.Close
      conn.Close
      Set conn = Nothing
      Set rs = Nothing
      End Sub
      
      发布在 Excel & VBA
      M
      Mengkelyu
    • 如何利用Class module计算精算现值

      小珂珂是 ActuaryGarden 公司的精算实习生,这天,她在做精算表写VBA的时候遇到了一个问题。
      她手上目前有两套精算假设,想利用这两套假设计算年金现值a,还有定期寿险现值A。
      bb3fcfa7-b4f6-49e0-b71f-ed8960aa0982-image.png
      因为不想重复工作,她想到,每一套假设都可以看作一个Object呀!可以利用Class model来避免重复工作。
      可以把利息率和死亡率设置成Class module的属性,计算A和a设置成Class model的方法~

      发布在 Excel & VBA
      M
      Mengkelyu