相关疑难解决方法(0)

如何在Excel VBA中切片数组?

我可以在Excel VBA中使用哪些函数来切片数组?

arrays excel vba worksheet-function

27
推荐指数
4
解决办法
8万
查看次数

如何在vba中为excel初始化多维数组变量

微软网站显示下面的代码应该工作:

Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

但是,当我尝试在excel VBA模块中使用它时,我收到了一个complile错误.以下适用于一维数组:

A = Array(1, 2, 3, 4, 5)

但是我还没有找到一种方法来为2D数组做同样的事情.有任何想法吗?

arrays excel vba excel-vba

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

VBA,从数组中删除重复项

有人可以给我一些指示如何解决以下问题:

假设我在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)

excel vba

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

删除行(向后工作),但使用范围变量?

通常需要您浏览一系列单元格,并根据某些条件删除整行.

在实践中,最好从范围的最后开始,并开始工作.

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 StatementStep -1部分,这是我预期的(没有双关语意).

我的想法是,Cells()在尝试向后处理Range变量时,我基本上不必重新安排数据.我发现使用范围变量一堆有点麻烦,但是当想要从该范围中删除行时,Cells([long],[long])如果有意义则必须切换到使用.

编辑:刚刚提出这个,但它仍然感觉kludgy:

Dim k As Long, cel …
Run Code Online (Sandbox Code Playgroud)

excel vba delete-row

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

非 Office 365 上 FILTER 功能的替代方案

使用宏或公式,有没有办法实现Office 365的以下公式的结果?

=FILTER(B:B,A:A = "x")

它的作用是从同一行的值为Column B时获取所有值。Column Ax

我的电脑有 Office 365,但我正在使用的电脑只有Office Pro Plus 2019. 当我需要该功能时,我必须使用我的电脑,而且我已经厌倦了它,也许也可以使用公式或宏在 Office Pro Plus 2019 上完成?

excel vba ms-office

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

如何在VBA中向现有矩阵添加计数器列?

如何在 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)

arrays excel vba matrix

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

在vba中加入两个数组?

如何将这些数组与 的结果结合起来(2, 4, 5, 3, 7, 6)

array1 = Array(4,5,3,7,6)

array2 = Array(2)
Run Code Online (Sandbox Code Playgroud)

arrays excel vba

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

具有最大范围 Excel VBA 列上的顺序数字

我对 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 行上的“超出范围”,我真的不知道发生了什么......

arrays excel vba

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

根据标题名称移动列

我有一个将列重新排列为特定顺序的宏。

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")"用它们的列标题名称替换行等?

更好的是有没有更好的方法来解决这个问题?

excel vba

2
推荐指数
2
解决办法
6964
查看次数

根据另一列的顺序对一列进行排序 - excel

我正在尝试根据 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 个变量长!

非常感谢任何建议——无论是手动的还是宏的。谢谢你!

excel vba excel-formula

2
推荐指数
1
解决办法
1218
查看次数

有没有办法在VBA中使用Array函数创建二维数组>

我想快速创建一个 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)是无效的。

我想我太懒了,无法设置循环,但单行方法会紧凑且有用。

arrays vba type-2-dimension

1
推荐指数
1
解决办法
4582
查看次数

关于重新排列列的宏如何工作的说明 Excel VBA

我从其他地方找到了这段代码,并对其进行了一些修改以满足我的需求,但我不完全确定它是如何工作的。我想知道它是如何工作的,因为我想进一步修改它,但我对 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)

excel vba

1
推荐指数
1
解决办法
1439
查看次数