Excel 如何使用VBA转换通过QueryTables导入的值?

Excel 如何使用VBA转换通过QueryTables导入的值?,excel,vba,transpose,Excel,Vba,Transpose,我创建了一个VBA代码,它会提示输入CSV文件并将其导入。但是,它将值作为行导入。我需要将它们作为列导入。怎么做 我尝试将范围设置为$B$2:$B$10,但没有帮助。 我尝试在QueryTables中搜索“transpose data on import”指令,但到目前为止还没有找到 代码: 在本例中,我将QueryTables结果发布到空单元格范围A20 然后使用转置将单元格复制到所需位置B2:B10 If Ret <> False Then With ActiveShee

我创建了一个VBA代码,它会提示输入CSV文件并将其导入。但是,它将值作为行导入。我需要将它们作为列导入。怎么做

我尝试将范围设置为
$B$2:$B$10
,但没有帮助。 我尝试在QueryTables中搜索“transpose data on import”指令,但到目前为止还没有找到

代码:


在本例中,我将QueryTables结果发布到空单元格范围
A20
然后使用转置将单元格复制到所需位置
B2:B10

If Ret <> False Then
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & Ret, Destination:=Range("$A$20"))
    .TextFileParseType = xlDelimited
    .RefreshStyle = xlOverwriteCells
    .AdjustColumnWidth = False
    .TextFileCommaDelimiter = True
    .Refresh

    End With
    
    'Transpose
    Dim DirArray As Variant
    DirArray = Range("A20:I20").Value
    Range("B2:B10").Value = Application.WorksheetFunction.Transpose(DirArray)
    Range("A20:I20").Clear
    
End If
如果Ret为False,则
使用ActiveSheet.QueryTables.Add(连接:=_
“TEXT;”&Ret,目的地:=范围($A$20”))
.TextFileParseType=xlDelimited
.RefreshStyle=xl
.AdjustColumnWidth=False
.textfilecommadelimitor=True
刷新
以
“转置
Dim Dirray阵列作为变体
DirArray=范围(“A20:I20”)。值
范围(“B2:B10”).Value=Application.WorksheetFunction.Transpose(DirArray)
范围(“A20:I20”)。清除
如果结束

重现您的问题的数据样本在制定解决方案时非常有用。它不必是真实的数据;它可以组成,但应该使用功能区的
数据
选项卡中的内置工具来表示。有许多was要导入文件。然后,您可以使用
Table.Transpose
,它在电源查询编辑器的
Transform
选项卡中显示为
Transpose
选项。您可以使用
power query
轻松地对数据进行转置,无法直接同时导入数据和转置,您需要为转置数据编写单独的程序instead@RonRosenfeld我已经添加了示例数据以及我希望它如何显示在Excel工作表上是的,使用您的数据并使用
查询表。Add
方法,在将结果写入工作表后,您需要进行转换。如果工作表上有其他可能受到干扰的数据,请考虑写入临时工作表或隐藏工作表,然后复制/转置到您真正想要的工作表。Power Query将在写入工作表之前启用转置,但您需要一个命名范围(由VBA例程填充)来保存.txt文件的完整路径。也可以用VBA编写整个电源查询代码。
B2: product
B3: 30
B4: 370 psi
...
B10: 2021
If Ret <> False Then
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & Ret, Destination:=Range("$A$20"))
    .TextFileParseType = xlDelimited
    .RefreshStyle = xlOverwriteCells
    .AdjustColumnWidth = False
    .TextFileCommaDelimiter = True
    .Refresh

    End With
    
    'Transpose
    Dim DirArray As Variant
    DirArray = Range("A20:I20").Value
    Range("B2:B10").Value = Application.WorksheetFunction.Transpose(DirArray)
    Range("A20:I20").Clear
    
End If