关于
Function
或 a ,或者和Sub
之间的区别(尽管一些见解是不可避免的)。ByRef
ByVal
Function
,但也可以选择使用“修改”意义上的Sub
using来解决。ByRef
代码
考虑以下函数:
' Returns the worksheet (object) with a specified name in a specified workbook (object).
Function getWsF(wb As Workbook, _
ByVal wsName As String) _
As Worksheet
' 'getWsF' is 'Nothing' by default.
' Try to define worksheet.
On Error Resume Next
Set getWsF = wb.Worksheets(wsName)
End Function
Run Code Online (Sandbox Code Playgroud)
您可以像下面这样使用它:
' Writes the name of a specified worksheet, …
Run Code Online (Sandbox Code Playgroud) 我使用下面的代码来搜索和替换字符串中的部分文本。它适用于几乎 97% 的替换,但当要替换的一个字符串与字符串的另一部分相同时则不然。有没有一种简单的方法可以避免这种情况?
Sub Macro1()
Dim i As Integer
For i = 2 To Worksheets("table1").Range("A1").End(xlDown).Row
Worksheets("table1").Range("H:H").Replace What:=Worksheets("table2").Range("A" & i), Replacement:=Worksheets("table2").Range("B" & i), LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
重要提示:分隔符并不总是“,”。它也可以是带有逗号的任意组合空格。例子:
”、“
”、“
”、“
假设我有以下基本电子表格:
A B C D
1 -2 4 2 12
2 -1 1 0
3 0 0 0 22
4 1 1 2 12
5 2 4 6
6 3 9 12
Run Code Online (Sandbox Code Playgroud)
A 列包含从 -2 到 3 的整数。
B 列具有 a 列值的平方。
C 列是 A 和 B 的行总和,因此 C1 为 =SUM(A1:B1)。
D1 有=MAX(C1:C6),这个最大值是我需要用一个公式得到的结果。
D3 是通过 Ctrl+Shift+Enter 输入的 =MAX(SUM(A1:B6)),但它只是得到常规总和。D4 是 =MAX(A1:A6+B1:B6) 并按 ctrl+shift+enter,这样可以得到正确的结果 12。
然而,D4 的问题是我需要能够处理大动态范围,而无需输入无穷无尽的总和。假设 SUM(A1:Z1000) 将为 A1:A1000+B1:B1000+....+Z1:Z1000,这不是一个合理的公式。
那么我怎样才能做类似 =MAX(SUM(A1:Z1000)) 的事情,以便它将行 A1:Z1 到 A1000:Z1000 求和并给出最终的行宽度最大值。
我只能使用基本 Excel,因此没有辅助列,也没有 VBA 函数。
更新 …
我在Excel中有一些数据,格式如下:
Cust_Name Prod1 Prod2 Prod3 Prod4 Prod5
A 0 100 120 0 0
B 145 120 168 0 200
C 350 300 0 340 0
Run Code Online (Sandbox Code Playgroud)
我需要将以下格式转换为下面提到的报告格式。
我想将这些产品转置到 Cust_Name 列组中,其值 >0,否则它不应该成为最终输出报告的一部分。
我尝试了很多枢轴选项,但没有成功。
所需输出:
Cust_Name Product Price
A Prod2 100
Prod3 120
Total A - 220
B Prod1 145
Prod2 120
Prod3 168
Prod5 200
Total B - 633
C Prod1 350
Prod2 300
Prod4 340
Total C - 890
Run Code Online (Sandbox Code Playgroud) 我正在使用 Office 365 / Microsoft Forms 将信息收集到 Excel 工作簿中。工作表(和表格)的数量会随着时间的推移而增加。因此,我通过在这些工作表的左侧添加工作表“开始”和在右侧添加工作表“停止”来为这些工作表添加书签。
工作表上收集的相关信息是受访者的电子邮件地址,该地址位于 A 列(所有工作表都具有相同的结构)。
我想做的是在“停止”工作表之后有一个“摘要”工作表,其中我有一个动态列表,其中包含“开始”和“停止”之间所有工作表中的所有唯一电子邮件及其 A 列中的频率和 B 分别。
我认为一旦我有了一个电子邮件列表,我就可以通过COUNTIF
跨页计算每个电子邮件的频率 - 尽管这不太理想,因为列表会随着时间的推移而增长,所以这个解决方案需要将公式复制到新行很经常。但我真正困扰的是如何从“开始”和“停止”之间的所有工作表的 A 列中获取所有唯一值的列表?
我挠头完成我的这个 vba 脚本并陷入困境:
在sheet1中,我有一个大表(非结构化),范围为A1:BY1200,第1行包含已过滤的标题。现在我只需要将过滤后的范围存储到数组中并将数组数据写回不同的工作簿。以下是我实现上述目标的半完整代码:
我的谜题:
我已经阅读了一些类似场景的帖子,但没有一个完全满足我的情况的所有要求。有人在其他帖子中建议在循环过滤范围以记录到数组中时使用 Areas 方法。
提前谢谢了。
注意:过滤后,过滤范围内有不相邻的行
Sub StoreFilteredRangeInArray()
Dim rCell as Range, rData as Range, rArea as Range
Dim i as Long
with Activesheetset
set rData = .range("A1").CurrentRegion
Dim rFiltered as Range
rData.autofilter Field:=1, Criteria1:="<>"
with rData
set rFiltered = .offset(1,0).Resize(.Rows.count -1, .Column.count).SpecialCells(xlCellTypeVisible)
end with
Dim myArray() as variant
...(get stuck here)
end with
End Sub
Run Code Online (Sandbox Code Playgroud)