yuanlideyu的个人博客分享 http://blog.sciencenet.cn/u/yuanlideyu

博文

VBA 分类

已有 3582 次阅读 2018-5-17 21:29 |个人分类:VBA|系统分类:科研笔记

从今天开始,学着做一个会写VBA的小仙女。


'20180517

'VBA常见数据类型

类型注释简写占用内存
Integer整型%2
Single单精度4
Double双精度#8
Long长整型&4
String字符型$/
Currency货币型@8

Sub test()

Dim a As Integer

Dim b%,c!,d&

End Sub


'宏录制的分列函数(按;分列)

Sub 分列()

    Columns("A:A").Select

    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _

        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _

        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _

        :=";", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _

        1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12 _

        , 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _

        Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array( _

        25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), _

        Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1)), _

        TrailingMinusNumbers:=True

End Sub

'看了分列函数Expression.TextToColumns的解释简化了一下

Sub test()

Columns("a:a").Select

Selection.TextToColumns Destination:=Range("a1"), DataType:=xlDelimited, _

textqualifier:=xlDoubleQuote, other:=True, otherchar:=";"

End Sub


'多列合并为一列

'需要根据计算量调整数据类型

'结果为按行分别转置顺序写入A列

Sub RangeToOneCol()
Dim TheRng, TempArr
Dim i As Integer, j As Integer, elemCount As Integer
On Error GoTo line1
Range("a:a").ClearContents
If Selection.Cells.Count = 1 Then
  Range("a1") = Selection
Else
  TheRng = Selection
  elemCount = UBound(TheRng, 1) * UBound(TheRng, 2)
  ReDim TempArr(1 To elemCount, 1 To 1)
  For i = 1 To UBound(TheRng, 1)
    For j = 1 To UBound(TheRng, 2)
      TempArr((i - 1) * UBound(TheRng, 2) + j, 1) = TheRng(i, j)
    Next
  Next
  Range("a1:a" & elemCount) = TempArr
End If
line1:
End Sub


20180622  TextToColumns 方法

参阅应用于示例特性将包含文本的一列单元格分解为若干列。

expression.TextToColumns(Destination, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers)
expression      必需。该表达式返回“应用于”列表中的对象之一。

Destination      Variant 类型,可选。指定 Microsoft Excel 放置结果的位置的 Range 对象。如果该区域大于一个单元格,请使用左上角的单元格。

DataType      XlTextParsingType 类型,可选。将被拆分到多列中的文本的格式。

XlTextParsingType 可为以下 XlTextParsingType 常量之一。 
xlDelimited 默认值 
xlFixedWidth 

TextQualifier      XlTextQualifier 类型,可选。

XlTextQualifier 可为以下 XlTextQualifier 常量之一。 
xlTextQualifierDoubleQuote 为默认值 
xlTextQualifierNone 
xlTextQualifierSingleQuote 

ConsecutiveDelimiter      Variant 类型,可选。如果该值为 True,则 Microsoft Excel 将把连续的分隔符识别为单个分隔符。默认值为 False。

Tab      Variant 类型,可选。如果该值为 True,则 DataType 为 xlDelimited 且以制表符为分隔符。默认值为 False。

Semicolon      Variant 类型,可选。如果该值为 True,则 DataType 为 xlDelimited 且以分号为分隔符。默认值为 False。

Comma      Variant 类型,可选。如果该值为 True,则 DataType 为 xlDelimited 且以逗号为分隔符。默认值为 False。

Space      Variant 类型,可选。如果该值为 True,则 DataType 为 xlDelimited 且以空格为分隔符。默认值为 False。

Other      Variant 类型,可选。如果该值为 True,则 DataType 为 xlDelimited 且以 OtherChar 参数指定的字符为分隔符。默认值为 False。

OtherChar      Variant 类型,可选(当 Other 为 True 时为必需)。当 Other 为 True 时的分隔符。如果指定了若干字符,则仅使用其中的第一个字符而忽略其他字符。

FieldInfo      Variant 类型,可选。包含单列数据拆分信息的数组。对本参数的解释取决于 DataType 的值。如果此数据由分隔符分隔,则本参数为由两元素数组组成的数组,其中每个两元素数组指定一个特定列的转换选项。第一个元素为列标(从 1 开始),第二个元素是 xlColumnDataType 常量之一,用以指定该列的拆分方式。

XlColumnDataType 可为以下 XlColumnDataType 常量之一。 
xlGeneralFormat 表示常规 
xlTextFormat 表示文本 
xlMDYFormat 表示 MDY 日期

xlDMYFormat 表示 DMY 日期

xlYMDFormat 表示 YMD 日期

xlMYDFormat 表示 MYD 日期

xlDYMFormat 表示 DYM 日期

xlYDMFormat 表示 YDM 日期

xlEMDFormat 表示 EMD 日期

xlSkipColumn 表示跳过列
 

只有在安装并选定了台湾地区语言支持时才可使用 xlEMDFormat。xlEMDFormat 常量指定使用台湾地区纪元日期。

列识别符可为任意顺序。在输入数据中,如果某一特定列没有给定列识别符,那么该列以 General 形式进行拆分。在下例中,跳过了源数据的第三列,第一列以文本形式进行拆分,而其余各列均以 General 形式进行拆分。

Array(Array(3, 9), Array(1, 2))

如果源数据有固定宽度的列,则每个两元素数组的第一个元素将指定列中起始字符的位置(以整数的形式,0(零)表示第一个字符)。第二个元素以从 1 到 9 的数字指定该列的拆分选项,如上表所示。

下例从固定宽度的文件中拆分出两列,第一列从行起始处开始,长度为 10 个字符。第二列从第 15 个字符开始,直至行尾。为避免包含从第 10 个字符到第 15 个字符之间的字符,Microsoft Excel 加入了一个被跳过的列数据项。

Array(Array(0, 1), Array(10, 9), Array(15, 1))

DecimalSeparator      String 类型,可选。表示在识别数字时,Microsoft Excel 使用的小数分隔符。默认设置为系统设置。

ThousandsSeparator      String 类型,可选。表示在识别数字时,Excel 使用的千位分隔符。默认设置为系统设置。

TrailingMinusNumbers      Variant 类型,可选。以减号字符开始的数字。

下表显示了使用不同的导入设置向 Excel 中导入文本时的结果。数字结果显示在最右边的列中。

系统十位分隔符 系统千位分隔符 十位分隔符值 千位分隔符值 原始文本 单元格的值(数据类型) 
句号 逗号 逗号 句号 123.123,45 123,123.45(数字) 
句号 逗号 逗号 逗号 123.123,45 123.123,45(文本) 
逗号 句号 逗号 句号 123,123.45 123,123.45(数字) 
句号 逗号 句号 逗号 123 123.45 123 123.45(文本) 
句号 逗号 句号 空格 123 123.45 123,123.45(数字) 

示例
本示例将剪贴板中的内容(以空格分隔的文字表格)转换为 Sheet1 中单独的列内。可用“记事本”或“写字板”(或其他文本编辑器)创建简单的以空格分隔的表格,将该表格复制到剪贴板,再切换到 Microsoft Excel,然后运行本示例。

Worksheets("Sheet1").Activate
ActiveSheet.Paste
Selection.TextToColumns DataType:=xlDelimited, _
    ConsecutiveDelimiter:=True, Space:=True



https://blog.sciencenet.cn/blog-3388383-1114505.html


下一篇:VBA 德温特数据WIN版格式AE的筛选
收藏 IP: 168.160.22.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-23 17:33

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部