相关疑难解决方法(0)

将csv文件加载到VBA数组而不是Excel工作表中

我目前能够通过下面的代码上传数据然后处理表格将csv文件数据输入到Excel VBA中,当然不是最好的方式,因为我只对一些数据感兴趣并在使用数据后删除表格:

Sub CSV_Import() 
Dim ws As Worksheet, strFile As String 

Set ws = ActiveSheet 'set to current worksheet name 

strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", ,"Please select text file...") 

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1")) 
     .TextFileParseType = xlDelimited 
     .TextFileCommaDelimiter = True 
     .Refresh 
End With 
End Sub 
Run Code Online (Sandbox Code Playgroud)

是否可以简单地将csv加载到VBA中的二维变量数组中,而不是通过使用excel工作表?

excel vba excel-vba

18
推荐指数
3
解决办法
8万
查看次数

在VBA中从2D数组中分配1D数组?

也许它的星期一,也许我很愚蠢..但我不能为我的生活找到一个很好的方法从2D阵列中的一行获得一维数组.(也许它不是一个"真正的"2D阵列?)

无论如何,我有一个我这样定义的数组: dim myArr(2,4) as variant

我用1到15的值填充它,看起来像:

1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
Run Code Online (Sandbox Code Playgroud)

所以现在我想要的是该阵列的一行.我能弄明白的唯一方法就是做到这一点:

    dim temp() as variant
    ReDim temp(lbound(myArr,2) to ubound(myArr,2))

    For i = 0 To 0
        For j = LBound(myArr, 2) To UBound(myArr, 2)
            temp(j) = myArr(i, j)
        Next
    Next
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这样,因为如果阵列变得庞大,那么花费这么多时间可能要长得多.我想我应该能做到:

dim temp as variant
temp = myArr(0) 'since myArr(0) is a 1D array with 5 spots right?
Run Code Online (Sandbox Code Playgroud)

但没有..我得到'错误的维数'错误.

我还回顾了之前的事情并发现了这个问题:如何比较表格中的两个整行和蒂姆托马斯的答案显示了转置的使用,并提到你是否比较了你只使用转置一次的列,但它不起作用..如果我这样做:dim myArr(2,0) as variant转置工作,但不是我现在的方式.

我在其他语言(例如C++和Python)中找到了无数个问题的答案,但我对这两个问题都不熟悉,所以我无法解释它们.

有没有更好的方法呢?还是我坚持这个我不喜欢的双循环?

谢谢!

excel vba excel-vba multidimensional-array

5
推荐指数
3
解决办法
2万
查看次数

检查excel vba中两个范围是否相等的最快方法

想象一下,您有两组数据,行数和列数相同.现在,您需要检查一组中单元格中的数据是否等于另一组中具有相同相对地址的单元格中的数据.如果对于行的所有单元格都是如此,则从两个集合中删除该行.我可以通过比较每个单元格来轻松编码,这对大型数据集不利.请参阅下面的代码,其中两列数据恰好位于同一张纸中,并且它们之间的列偏移为300.

Dim RngOb As Range
Dim c As Range

Range("A1", "B1").Select
set RngOb = Range(Selection, Selection.End(xlDown))

For Each c In RngOb.Rows
    If c.Cells(1,1).Value = c.Offset(0, 300).Cells(1,1).Value Then
        If c.Cells(1,2).Value = c.Offset(0, 300).Cells(1,2).Value Then    
            c.EntireRow.Delete
        End If
    End If
Next
Run Code Online (Sandbox Code Playgroud)

我的实际数据每天有超过100列和不同的列数.我正在寻找一种智能,快速的方法来处理大型数据集.我高度评价答案,反馈和批评.:d

excel vba excel-vba

4
推荐指数
1
解决办法
3万
查看次数

突出显示重复行

我想突出显示 Excel VBA 中的重复行。假设我有以下示例表,其中包含 A、B、C 和 D 列用于测试:

 A       B       C       D (Strings)

 1       1       1       dsf
 2       3       5       dgdgdgdg
 1       1       1       dsf
 2       2       2       xxx
 6       3       4       adsdadad
 2       2       2       xxx
Run Code Online (Sandbox Code Playgroud)

重复的行应该以任何颜色突出显示,例如灰色。我理想地寻找快速执行的代码,因为它将用于相当大的表。请注意,有一些解决方案可用于突出显示重复的单元格(但不突出显示重复的行)。我不知道如何识别行是否重复,同时如何快速做到这一点,即没有嵌套循环。解决方案应该是 VBA(而不是 Excel)。

实现这一目标的最佳/最快方法是什么?

excel performance vba loops

-3
推荐指数
1
解决办法
6361
查看次数