如果在vba中有变量和值,可以从max到min对它们进行排序,但也可以将它们与变量进行匹配。例如,如果您在VBA中使用:
Sub sort()
...
x = 5
y = 3
z = 8
...
End sub
在excel中得到(在A列变量中,在B列值中):
A B
z 8
x 5
y 3
对8,5,3进行排序非常简单,但是如何将z,x,y添加到合适的位置呢?
我在excel电子表格中有一个数字数组,我试图使用用户定义的vba函数对这些数字进行排序(所有数字都>60),并且我希望将结果作为一个范围返回到同一个excel表中。
当我运行这个函数时,我会得到一个值错误,我不太确定这个错误是从哪里来的,因为我是VBA.I的新手,我非常希望能在解决这个问题方面提供一些指导。
数组Excel
Column A
200
50
23
789
Function trial(number As Range)
Dim cell As Range
Dim savearray() As Variant
Dim d As Long
F
我有几个关于在VBA中使用数组的基本问题,我还没有找到答案。
首先,在Excel VBA中有没有一种指定一维行矢量的方法?
我刚开始在Excel VBA中使用数组,并且已经将行和列向量定义为二维数组,如下面的示例所示
'Define a Local Row Vector
ReDim aArray(1 to iCntRows, 1 to 1)
'Define a Local Column Vector
ReDim aArray(1 to 1, 1 to iCntCols)
那么第二,这是最佳实践吗?我应该使用一维数组来代替吗?
感谢时间
我已经在excel中使用VBA自动排序了两行。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("C:D")) Is Nothing Then
Range("C3").Sort Key1:=Range("C4"), _
Order1:=xlAscending, _
Key2:=Range("D4"),
我想用vba宏将文件和子文件夹列出到Excel工作表中。列表是有效的,但最后一个文件夹的最后一个文件移动到列表中实际文件夹的第一个位置。
结果如下:
下面是代码:
If selectedFolder.Files.Count = 0 Then
For Each origSubFolder In selectedFolder.SubFolders
'Create backup subfolder
copiedSubFolder = copiedFilesDir & "\"
通常,在Excel中获取给定列的最后一行很容易使用VBA中的用户定义函数:
Function lastRow(wsName As String, Optional columnToCheck As Long = 1) As Long
Dim ws As Worksheet
Set ws = Worksheets(wsName)
lastRow = ws.Cells(ws.Rows.Count, columnToCheck).End(xlUp).Row
End Function
对于最后一行,到目前为止,我发现了两个excel公式:
=SUMPRODUCT(MAX((
当前代码:
Public Sub A()
j = 1
For i = 1 To 10
If Cells(i, 1) > 0 Then
Cells(j, 2) = Cells(i, 1)
j = j + 1
[B1:B10].Sort key1:=[B1]
End If
Next
End Sub
它的工作原理是从A列复制到B列,并对正数进行排序。我现在的问题是,如何把负数包含在正数下面,然后按降序写下来呢?都在B列。
我目前正在用excel学习VBA,而且我被困在一项任务上。我
我使用的是excel 2007。
我有一个任务列表(200-500),我需要分组在不同的类别/部分等(多个过滤器)。整个数据都在excel表格中,所以我可以应用Excel的内置表格过滤器来显示我需要的确切数据。
然而,应用多个过滤器来显示预期数据总是很困难的,特别是因为我需要非常频繁地这样做。为了简单起见,我计划对每条记录进行如下编号
a.b.c.d.e.f
Where a, b, c, d, e, f are simple numbers. List looks like:
1
1.1
1.2
1.2.1
1.2.1.1
1.2.2
1.3
& so on.
问题是,Excel将
我在Excel中有一个报表生成器,到目前为止还能工作。它读取一些输入数据并生成格式化的Excel表作为结果。这张纸的最后一栏充满了某种自由文本。
现在,有时自由文本不适合在最后一栏,它只是太宽。由于此报告的所有行的行高都是固定的,因此我不能为该列设置range.WrapText=True (为了使文本保持可见,必须增加行高)。手动(非VBA)解决方案很简单:将文本分成几个部分,并将其分散到不同的行中。例如:
A | B |C
content |This text is too wide for column B.
here |Th
问题是要想出一个可以与巨大的excel工作表一起工作的数据结构(显然不适合主内存)
假设下面的内容是excel表格的一部分,其中e表示一个空单元格。
A B C D ...
1 3 9 e e ...
2 e e e e ...
3 e e 5 e ...
4 e e e e ...
5 e e 6 e ...
因此,数据结构应该允许我将excel表存储到内存中(我们知道只有excel表中的值才能放入主内存),并支持以下操作
getByColumn(Column col); -给出某一列的所有值,比如C列的5,6
getByRow(Row row); -给出某一行的所有值,比如第
我目前有以下代码可以正常工作,每次输入内容时,都会自动按列i排序
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 9 Then
Dim lastRow As Long
lastRow = ActiveSheet.Cells.Find(What:="*", LookIn:=xlValues,
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row