首页 > 解决方案 > 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

标签: vbaexcel

解决方案


您可以使用以下内容选择单个列

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

推荐阅读