小编VBa*_*008的帖子

函数与子函数(ByRef)

关于

  • 这个问题不是关于何时使用 aFunction或 a ,或者和Sub之间的区别(尽管一些见解是不可避免的)。ByRefByVal
  • 它涉及“通常”使用 a 解决的场景Function,但也可以选择使用“修改”意义上的Subusing来解决。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)

excel vba

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

搜索并替换字符串中的文本

我使用下面的代码来搜索和替换字符串中的部分文本。它适用于几乎 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)

在此输入图像描述

重要提示:分隔符并不总是“,”。它也可以是带有逗号的任意组合空格。例子:

”、“
”、“
”、“

excel vba autofilter

5
推荐指数
3
解决办法
564
查看次数

如何在Excel中的数组公式中进行逐行求和?

假设我有以下基本电子表格:

    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 vba sum excel-formula

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

如何按特定列值转置标题行值组

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

excel vba unpivot excel-formula powerquery

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

多张纸上的唯一值和频率

我正在使用 Office 365 / Microsoft Forms 将信息收集到 Excel 工作簿中。工作表(和表格)的数量会随着时间的推移而增加。因此,我通过在这些工作表的左侧添加工作表“开始”和在右侧添加工作表“停止”来为这些工作表添加书签。
在此输入图像描述

工作表上收集的相关信息是受访者的电子邮件地址,该地址位于 A 列(所有工作表都具有相同的结构)。
在此输入图像描述

我想做的是在“停止”工作表之后有一个“摘要”工作表,其中我有一个动态列表,其中包含“开始”和“停止”之间所有工作表中的所有唯一电子邮件及其 A 列中的频率和 B 分别。

我认为一旦我有了一个电子邮件列表,我就可以通过COUNTIF跨页计算每个电子邮件的频率 - 尽管这不太理想,因为列表会随着时间的推移而增长,所以这个解决方案需要将公式复制到新行很经常。但我真正困扰的是如何从“开始”和“停止”之间的所有工作表的 A 列中获取所有唯一值的列表?

excel excel-formula array-formulas office365

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

如何将过滤后的范围存储到数组中?

我挠头完成我的这个 vba 脚本并陷入困境:

在sheet1中,我有一个大表(非结构化),范围为A1:BY1200,第1行包含已过滤的标题。现在我只需要将过滤后的范围存储到数组中并将数组数据写回不同的工作簿。以下是我实现上述目标的半完整代码:

我的谜题:

  1. 我不熟悉循环过滤范围并将它们存储到数组中。
  2. 我还需要完成最后一部分,以便将数组数据(过滤后的范围)写回,例如,sheet2 起始单元格 A1。

我已经阅读了一些类似场景的帖子,但没有一个完全满足我的情况的所有要求。有人在其他帖子中建议在循环过滤范围以记录到数组中时使用 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)

arrays excel vba range autofilter

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