vba - Excel vba 动态地从 csv 中选择一列到电子表格中
问题描述
我有以下代码如何使列动态化,这样当我在电子表格中选择一个范围时,它只会放置特定的列。我通过 api 获取 csv
count = Cells(Columns.Count, ActiveCell.Row).End(xlUp).Column -
ActiveCell.Column
For x = 1 To count
value(x) = Array(x, 1)
Next x
Sheets(1).Range(Range(ActiveCell, ActiveCell.Offset(0, 0)), Range(ActiveCell, ActiveCell.Offset(0, 0)).End(xlDown)).TextToColumns _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=True, Space:=False, Other:=False, _
FieldInfo:=value
我试图让输入 = 1 字段值会找到数组 1 并将数组的值更改为 (1,9)
input = 1
FieldValue(1) = Array(1,9)
但这只会删除第 1 列,我希望能够仅通过用户输入或静态变量动态获取第 1 列,使用上面的 for 循环来确定列的大小
如何通过用户输入从 csv 中动态选择一列并将其输出到电子表格的任何位置?
用户表单传值,以值作为列的依据,获取列并输出到csv中。
来自 api/url 的示例 CSV 数据
A,B,C,D,E
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
解决方案
您可以使用以下内容选择单个列
Dim colOfInterest As Long: colOfInterest = userInput
'<==这将来自用户表单。伪代码。您还可以将 outputColumn 作为参数传递(我在这里假设同一张表)。
Userform 将使用 colOfInterest 参数和输出列参数调用此子。:
Option Explicit
Public Sub test(ByVal colOfInterest As Long, Optional ByVal outputColumn As Long =1)
Dim arr(), arr2(), i As Long
With Worksheets("Sheet1")
arr = .UsedRange.Value
ReDim arr2(1 To UBound(arr, 1))
For i = LBound(arr, 1) To UBound(arr, 1)
arr2(i) = Split(arr(i, 1), ",")(colOfInterest - 1)
Next i
'.UsedRange.ClearContents '<==potentially clear away existing data?
.Cells(1,outputColumn).Resize(UBound(arr2)) = Application.WorksheetFunction.Transpose(arr2)
End With
End Sub
推荐阅读
- php - PHP继承构造函数不起作用
- record - graphviz/dot 中记录内的边
- javascript - jQuery .height() 没有改变
- javascript - 输入格式 jQuery
- dojo - Dojo 列表文本框 - 许多值导致水平滚动 - 如何留在表格单元格中?
- c# - 在 XAML (UWP) 中绑定单例
- python - 带或不带参数的 pyodbc 游标执行
- c++ - 这个算术表达式是什么意思:A += B++ == C++ 中的 0;
- ios - 'React/RCTDefines.h' 文件未找到
- vert.x - Vertx Java 客户端在连接 solace vmr 服务器时抛出“SMF AD 绑定响应错误”