我目前能够通过下面的代码上传数据然后处理表格将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工作表?
也许它的星期一,也许我很愚蠢..但我不能为我的生活找到一个很好的方法从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)中找到了无数个问题的答案,但我对这两个问题都不熟悉,所以我无法解释它们.
有没有更好的方法呢?还是我坚持这个我不喜欢的双循环?
谢谢!
想象一下,您有两组数据,行数和列数相同.现在,您需要检查一组中单元格中的数据是否等于另一组中具有相同相对地址的单元格中的数据.如果对于行的所有单元格都是如此,则从两个集合中删除该行.我可以通过比较每个单元格来轻松编码,这对大型数据集不利.请参阅下面的代码,其中两列数据恰好位于同一张纸中,并且它们之间的列偏移为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 中的重复行。假设我有以下示例表,其中包含 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)。
实现这一目标的最佳/最快方法是什么?