excel - 如何在数组中输入最后一列以将文本转换为列?
问题描述
所以基本上我有大量数据都在一个用逗号分隔的单元格中。我有多行这些数据,每个单元格中有不同数量的数据。例如:第一行可能有 3 个逗号分隔的数据,所以它将变成 3 列。但是,第 2 行可能有 10 个逗号分隔的数据,这将变成 10 列。当我记录将文本转换为列的宏时,我得到以下代码:
Sub Macro2()
'
' Macro2 Macro
'
'
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, 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)) _
, TrailingMinusNumbers:=True
End Sub
现在,正如我所提到的,每行的数据量不同,并且数据集总是会改变。有没有办法让数组设置为 Array(last column, 1) ?无需手动输入它们以确保捕获整个数据?
解决方案
我们可以使用该Split()
函数来解析每条记录。前:
编码:
Sub Parse()
Dim i As Long, N As Long, v As String, u As Long
N = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To N
v = Cells(i, 1).Value
If v <> "" Then
arr = Split(v, ",")
u = UBound(arr) + 1
Range(Cells(i, 1), Cells(i, u)).Value = arr
End If
Next i
End Sub
之后:
笔记:
您可以仅使用公式(无 VBA)获得类似的结果。例如,对于A列中的数据,在B1中输入:
=TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",999)),COLUMNS($A:A)*999-998,999))
并横向和向下复制。
编辑#1:
- 带有的行
Split()
获取单个单元格的内容并将其分成一组项目 u
计算出数组中有多少项的行- 行将
Range()
数组存放到行中的一组单元格中。
推荐阅读
- node.js - 节点按 id 显示用户信息
- desktop - OpenBox 中不可见的滚动条和框
- elm - Array.set 期望 Array.Array Char 但得到 Maybe (Array.Array Char)
- php - 如何使用 php 在 ejabberd 数据库中添加现有用户的 VCard 详细信息
- php - 鬼脚本 | 不可恢复的错误,退出代码 1
- mysql - 什么叫布尔值表?
- angular - 为什么我应该使用谓词作为返回类型而不是布尔值?
- python-3.x - arparse 中的位置参数
- sql - 计算 UNIQUE 匹配值数量的语法
- postgresql - Fabric8 安装失败并显示 /var/lib/pgsql/passwd:权限被拒绝