我可以在Excel VBA中使用哪些函数来切片数组?
在微软网站显示下面的代码应该工作:
Dim numbers = {{1, 2}, {3, 4}, {5, 6}}
但是,当我尝试在excel VBA模块中使用它时,我收到了一个complile错误.以下适用于一维数组:
A = Array(1, 2, 3, 4, 5)
但是我还没有找到一种方法来为2D数组做同样的事情.有任何想法吗?
有人可以给我一些指示如何解决以下问题:
假设我在Excel 2010中有一个数据块,100行乘3列.
C列包含一些重复项,比如它从1,1,1 2,3,4,5,.....,97,98开始
使用VBA,我想删除duplcate行,根据列C,以便我留下1,2,3,.....,97,98,即只有98行和3列.
我知道有一个按钮我可以在Excel 2010中单击以执行此操作,但我想在VBA中执行此操作(因为我已经尝试过这个并且由于某种原因,随后会对我的其余代码进行干扰并给出不正确的结果).
此外,我想在数组中执行此操作,然后将结果粘贴到工作表上,而不是像Application.Worksheetfunction.countif(.....)这样的方法.
所以类似于:
Dim myarray() as Variant
myarray=cells(1,1).Currentregion.value
Dim a as Long
For a=1 to Ubound(myarray,1)
'something here to
Next a
Run Code Online (Sandbox Code Playgroud) 通常需要您浏览一系列单元格,并根据某些条件删除整行.
在实践中,最好从范围的最后开始,并开始工作.
Dim i as Long
For i = lastRow to 1 Step -1
If Cells(i, 2).Value = "del" then Rows(i).EntireRow.Delete
End if
Run Code Online (Sandbox Code Playgroud)
但是,大部分时间我都在使用一个Range对象.
有没有办法向后工作,使用范围对象,不需要使用For i类型循环?
Dim rng as Range, cel as Range
Set rng = Range("A1:A100")
For each cel in rng step -1
if cel.value = "del" then cel.EntireRow.Delete
next cel
Run Code Online (Sandbox Code Playgroud)
这种错误Expected: End of Statement的Step -1部分,这是我预期的(没有双关语意).
我的想法是,Cells()在尝试向后处理Range变量时,我基本上不必重新安排数据.我发现使用范围变量一堆有点麻烦,但是当想要从该范围中删除行时,Cells([long],[long])如果有意义则必须切换到使用.
编辑:刚刚提出这个,但它仍然感觉kludgy:
Dim k As Long, cel …Run Code Online (Sandbox Code Playgroud) 使用宏或公式,有没有办法实现Office 365的以下公式的结果?
=FILTER(B:B,A:A = "x")
它的作用是从同一行的值为Column B时获取所有值。Column Ax
我的电脑有 Office 365,但我正在使用的电脑只有Office Pro Plus 2019. 当我需要该功能时,我必须使用我的电脑,而且我已经厌倦了它,也许也可以使用公式或宏在 Office Pro Plus 2019 上完成?
如何在 VBA 中使用第一个“列”中的计数器值获取新矩阵。假设我们有一个 VBA 矩阵,其中包含我们从单元格中获取的值。A1单元格的值只是“A1”。
Dim matrix As Variant
matrix = Range("A1:C5").value
Run Code Online (Sandbox Code Playgroud)
输入矩阵:
+----+----+----+
| A1 | B1 | C1 |
+----+----+----+
| A2 | B2 | C2 |
+----+----+----+
| A3 | B3 | C3 |
+----+----+----+
| A4 | B4 | C4 |
+----+----+----+
| A5 | B5 | C5 |
+----+----+----+
Run Code Online (Sandbox Code Playgroud)
我想在 VBA 矩阵的第一列中使用计数器值获取新矩阵。
以下是想要的结果:
+----+----+----+----+
| 1 | A1 | B1 | C1 |
+----+----+----+----+
| 2 | A2 | B2 | C2 | …Run Code Online (Sandbox Code Playgroud) 如何将这些数组与 的结果结合起来(2, 4, 5, 3, 7, 6)?
array1 = Array(4,5,3,7,6)
array2 = Array(2)
Run Code Online (Sandbox Code Playgroud) 我对 VBA 完全陌生,我一直在尝试解决基本问题来练习。我只想用从 1 到 N 的序列号填充一列。 N 号将是特定单元格上的值。
所以 N 值在 C4 单元格上,例如是 5 ,我想从 B2 输出 - BN = 1,2,3,4,5 我有这个代码基于有点类似的问题和我的周期知识,但我可以'让它工作...
Sub ejemplo()
Dim total() As Variant
maximo = Range("C4").Value
For i = 1 To maximo
total(i) = i
Next i
total = Application.WorksheetFunction.Transpose(total)
Range("B7:B").Value = total
End Sub
Run Code Online (Sandbox Code Playgroud)
有时弹出的错误是 total(i) = i 行上的“超出范围”,我真的不知道发生了什么......
我有一个将列重新排列为特定顺序的宏。
Sub ArrangeColumns()
' ArrangeColumns Macro
Columns("C:C").Select
Application.CutCopyMode = False
Selection.Cut
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Columns("K:K").Select
Selection.Cut
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Columns("H:H").Select
Selection.Cut
Columns("G:G").Select
Selection.Insert Shift:=xlToRight
Columns("J:J").Select
Selection.Cut
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
Columns("J:J").Select
Selection.Cut
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Columns("K:K").Select
Selection.Cut
Columns("J:J").Select
Selection.Insert Shift:=xlToRight
Range("P11").Select
End Sub
Run Code Online (Sandbox Code Playgroud)
这不再有效,因为无法再保证原始数据的列按特定顺序排列。
有没有办法重写上面的代码(是的,它是由“记录宏”创建的)以"Columns("C:C")", Columns("A:A")"用它们的列标题名称替换行等?
更好的是有没有更好的方法来解决这个问题?
我正在尝试根据 B 列的顺序对 A 列进行排序。
这里提出了类似的问题,但解决方案没有按预期工作。根据一列对另一列进行排序
这是我的数据的示例:
这是我正在运行的 VBA:
Sub sort_a_b()
Application.ScreenUpdating = False
Range("A1:B12").Copy Destination:=Range("G1:H12")
Range("G1:H12").Sort Key1:=Range("H1:H12"), Order1:=xlAscending
Range("G1:G12").Copy Destination:=Range("A1:A12")
Range("G1:H12").Clear
Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)
这是我运行时看到的结果:
我不确定发生了什么事。我希望根据 B 列的顺序看到 5 月、8 月、11 月、12 月,但事实并非如此。请注意,我的实际列表有 500 个变量长!
非常感谢任何建议——无论是手动的还是宏的。谢谢你!
我想快速创建一个 6X4 的小整数数组。对于一个小的一维数组,我喜欢使用类似的东西
Dim MyArr()
MyArr = Array(1,2,3,4,5,6)
Run Code Online (Sandbox Code Playgroud)
有没有类似的方法来创建二维数组?我尝试用 ; 分隔行 但
MyArr = Array (1, 2, 3; 4, 5, 6)是无效的。
我想我太懒了,无法设置循环,但单行方法会紧凑且有用。
我从其他地方找到了这段代码,并对其进行了一些修改以满足我的需求,但我不完全确定它是如何工作的。我想知道它是如何工作的,因为我想进一步修改它,但我对 VBA 比较陌生,不明白 Resize、Index 和 Evaluate 函数如何在这个宏中协同工作。
Sub RearrangeColumns()
Dim newColumnOrder As Variant
newColumnOrder = Array(1, 2, 3, 4, 41, 42, 43, 44, 5, 6, 49, _
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, _
35, 36, 37, 38, 39, 40, 45, 46, 47, 48, 50, 51, 52)
Range("A1").Resize(Cells.Find("*", , xlFormulas, , xlRows, xlPrevious).Row, UBound(newColumnOrder) + 1) = …Run Code Online (Sandbox Code Playgroud)