Excel VBA动态地从CSV中选择一个列到电子表格中

时间:2018-08-02 05:00:29

标签: excel vba excel-vba

我有以下代码如何使列动态化,以便在电子表格中选择一个范围时,它只会放置特定的列。我通过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

2 个答案:

答案 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)