我有以下代码如何使列动态化,以便在电子表格中选择一个范围时,它只会放置特定的列。我通过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
我试图让input = 1,那么fieldvalue会找到数组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
答案 0 :(得分:1)
您可以使用以下内容选择单个列
Dim colOfInterest As Long: colOfInterest = userInput
'<==这将来自用户表单。伪代码。您还可以将outputColumn作为参数传递(我在这里假设是同一张纸)。
用户窗体将使用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
答案 1 :(得分:1)
您尝试过
Application.InputBox("Select a range", Type:=8)