小编bre*_*tdj的帖子

停止将空白视为零

是否有一个设置告诉Excel停止将空白处理为零?

我不是在寻找一种解决方法,=IsBlank()而是一种关闭blank-> 0功能的通用设置.

excel

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

如何在考虑过滤器的情况下找出列的MEDIAN?

我最近发现,您可以使用SUBTOTAL各种功能,这些功能允许您总结或查找列的总数,即使在应用了过滤器的情况下也是如此.

但是,功能列表SUBTOTAL不包括MEDIAN.

是否有可能找到一些数字的中位数,其中某些行已被滤除?

excel excel-formula excel-2010

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

是否可以使用符合特定条件的行号填充数组而不进行循环?

我想在VBA中填充一个数组,其中只有符合特定条件的行数.我想尽可能快的方法(例如,类似的东西RowArray = index(valRange=valMatch).row)

下面是(慢)范围循环的代码.

Current Code

Sub get_row_numbers()

Dim RowArray() As Long
Dim valRange As Range
Dim valMatch As String

Set valRange = ActiveSheet.Range("A1:A11")
valMatch = "aa"
ReDim RowArray(WorksheetFunction.CountIf(valRange, valMatch) - 1)

For Each c In valRange
    If c.Value = valMatch Then RowArray(x) = c.Row: x = x + 1
Next c    
End Sub
Run Code Online (Sandbox Code Playgroud)

arrays excel vba excel-vba

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

VBA对象不支持此属性或方法

我需要简单地计算一张纸上的区域数量.我的代码是:

Sub areas()
   Dim i As Long
   i = Worksheets("Sheet2").Selection.Areas.Count
   MsgBox i
End Sub
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,我收到错误消息"对象不支持此属性或方法".我不知道为什么.此代码基本上只是从Microsoft网站复制而来.

我甚至无法立即打印出该Worksheets("Sheet2").Selection.Areas.Count部分的窗口.

有什么快速帮助?我正在使用Excel 2010.

谢谢.

excel vba

11
推荐指数
1
解决办法
10万
查看次数

在Excel VBA中登录用户名 - 而不是运行Excel的帐户(使用RunAs)

我使用普通的域凭据登录了我的工作站.我们称之为AccountA.

然后我使用"以其他用户身份运行"来启动Excel.我们称之为账户B. 我这样做是因为查询某些SQL服务器所需的权限必须使用AccountB完成.

此时,我需要包含一个子例程来启动Shell以创建目录并在远程服务器上移动文件.AccountB没有(也没有)权限来执行此操作.我的shell给了我一个拒绝访问的消息.精细.

所以现在,我需要让VBA返回AccountA的名称,这是我用来登录计算机的帐户.我该怎么做呢?

我在这个网站上看到了很多例子以及其他会返回运行Excel(AccountB)的用户名的例子.但是,我还没有看到任何将AccountA信息传递给Shell的示例,以通过RunAs适当的权限执行我的命令.以下是我尝试过的一些事情,都返回了AccountB(用于RunAs启动Excel 的帐户)

具有在远程服务器上运行cmd shell的权限的多个人将使用此应用程序,因此无法对AccountA进行硬编码,并且必须以编程方式获取.

' Access the GetUserNameA function in advapi32.dll and
' call the function GetUserName.
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

Sub XXXXXXXXXX()
'//
ThisWorkbook.Sheets("XXXXXXXXXX").Activate ' select the worksheet for use
cmdString = UCase(Trim(ThisWorkbook.ActiveSheet.Cells(4, 4).Value)) 'get XXXXXXXXXX

'MsgBox cmdString
'retval = Shell("cmd.exe /k " & cmdString, vbNormalNoFocus)
'cmdString = "MkDir \\XXXXXXXXXX\g$\Tempski" 'fails - no permission

'Set the Domain …
Run Code Online (Sandbox Code Playgroud)

shell excel vba excel-vba

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

自定义事件未触发

我在Excel 2010中,我似乎得到一个奇怪的意外行为使用自定义事件.

我肯定99%肯定这种方法几年前对我有用(也许是在Excel 03/07中 - 记不住了) 或者 我刚搞砸了什么 ......

这是一个复制品:

添加一个新的类模块并为其命名 Factory

Public Event AfterInitialize()

Private Sub Class_Initialize()
    RaiseEvent AfterInitialize
End Sub
Run Code Online (Sandbox Code Playgroud)

添加另一个类模块,名称是 FactoryTest

Private WithEvents cFactory As Factory

Private Sub Class_Initialize()
    Set cFactory = New Factory
End Sub

Private Sub cFactory_AfterInitialize()
    Debug.Print "after inialized..."
End Sub
Run Code Online (Sandbox Code Playgroud)

和标准,Module1并运行以下

Sub Main()

    Dim fTest As FactoryTest
    Set fTest = New FactoryTest

End Sub
Run Code Online (Sandbox Code Playgroud)

此时我预计会after initialized..在立即窗口看到,但我不...

逐步执行代码似乎Private Sub cFactory_AfterInitialize()永远不会达到......

注意:

我可以RaiseAfterInitialize()Factory类中添加一个public sub:然后Initialize() …

excel vba excel-vba

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

如何删除字符?

如何删除字符串中的特殊字符和字母?

 qwert1234*90)!  ' this might be my cell value
Run Code Online (Sandbox Code Playgroud)

我必须把它转换成

 123490  ' I mean I have to remove everything but keep only the numbers in string
Run Code Online (Sandbox Code Playgroud)

但它应该允许空间!

 qwe123 4567*. 90  ' String with spaces
 123 4567 90     ' output should be
Run Code Online (Sandbox Code Playgroud)

我找到了 Replace - 但是为每个角色编写一个替换版本会让我的代码变得更大.好吧,让我清楚地告诉你,不要向你隐瞒任何事情:

  1. input:qwe123 4567*. 90 '带空格的字符串(1,"A").值
  2. 我的想法接下来要做的是: 123 4567 90'首先删除字符,保留空格
  3. 最终输出 A1:A3

    123
    4567
    90

(对于每个空间,它应该插入行并填充)

你能告诉我怎么删除字符串中除数字和空格以外的所有字符?

提前致谢

excel vba excel-vba excel-formula

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

Excel VBA:获取单元格的值,与单元格的格式无关

在Excel VBA中,Range("A1").Value应返回工作表上范围A1的基础值.但是如果单元格格式化为Accounting,我会得到不同的值.

如何获得单元格的实际基础价值?

工作表

创建一个新文档,在单元格中输入以下值:

  • A1:0.00001
  • A2:= A1
  • A3:= A1 = A2

正如您所期望的那样,A3会产生TRUE.现在使用2个小数位将A2的格式更改为Accounting.A2现在读取$ 0.00,但基础值仍然存在0.00001,因此A3仍然存在TRUE.

VBA

制作一个新模块并添加以下功能:

Function f(addr As String)
    f = Range(addr).Value
End Function
Run Code Online (Sandbox Code Playgroud)

如您所见,这只是使用对象的Value方法获取范围的值Range.

工作表

回到工作表.输入以下值:

  • B1:= f("A1")
  • B2:= f("A2")
  • B3:= B1 = B2

A1并且A2有相同的基本价值,但B1B2没有,即使它们都计算使用Value的方法A1A2.

在表达式A3(=A1=A2)的访问的实际的基础值A1A2.如何在VBA中访问这些值?

excel vba

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

以编程方式控制/拦截数据表刷新

背景

我有一个非常大的数据表,在高端64位机器上运行大约100万个输入场景需要长达12个小时.这些方案基于许多离散的Excel模型,然后将这些模型输入到财务模型中以进行详细计算

为了改进这个过程,我希望测试并比较以下速度:

  1. 目前的手工流程
  2. 使用VBA刷新数据表(使用Calculation,ScreenUpdating等关闭)
  3. 运行a VBS以在不可见的Excel实例中刷新数据表

所以,我正在寻找以编程方式管理数据表的最佳方法

更新:使用(2)和(3)中的代码没有提供测试具有单个大型数据表的工作簿的简单示例的好处

相当令人惊讶的是,VBA中的数据表似乎很少 - 可能没有 - 直接支持

我目前的知识和文献搜索

  • 可以使用此类模块代码添加QueryTable BeforeRefreshAfterRefreshEvents .Intellisense不会将此作为数据表的选项提供
  • 可以像这样访问单个数据透视表和QuertyTable ActiveWorkbookk.Sheets(1).QueryTables(1).不是那样的数据表
  • 这个 MrExcel线程中建议消除所有其他Data Tables然后运行a 作为解决方法.RefreshAll

解决方法肯定是可行的,因为我只有一个数据表,但如果存在,我更喜欢直接的方法.

是的,我坚持使用Excel :)

请不要为此方法建议其他工具,输入模型和使用数据表的总体模型都是

  • 一个完善的持续流程的一部分,将保持Excel为基础,
  • 经过专业审核,
  • 由一些经验丰富的Excel设计师精简和优化

我只是好奇是否有办法通过使用代码刷新特定数据表来调整过程,我上面的初始测试结果已经得出结论.

excel vba excel-vba

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

分割函数返回的数组大小 - Excel VBA

这是我到目前为止所做的.

Sub MP_division()

Worksheets(3).Activate    
Dim last_cell As Integer    
Dim platforms() As String    
Dim arr_size As Integer  

platforms = Split(Cells(2, 47), ", ")    
last_cell = Mid(Range("A1048576").End(xlUp).Address, 4)    
arr_size = len(platforms) // is there something like this?    
For x = 1 To last_cell    
    For y = 1 To arr_size 
        //do something        
    Next        
Next   
End Sub
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何获得split函数返回的数组大小(arr_size),以便我可以在for循环中使用?谢谢.

excel vba excel-vba

10
推荐指数
2
解决办法
5万
查看次数

标签 统计

excel ×10

vba ×8

excel-vba ×6

excel-formula ×2

arrays ×1

excel-2010 ×1

shell ×1