是否有一个设置告诉Excel停止将空白处理为零?
我不是在寻找一种解决方法,=IsBlank()而是一种关闭blank-> 0功能的通用设置.
我最近发现,您可以使用SUBTOTAL各种功能,这些功能允许您总结或查找列的总数,即使在应用了过滤器的情况下也是如此.
但是,功能列表SUBTOTAL不包括MEDIAN.
是否有可能找到一些数字的中位数,其中某些行已被滤除?
我想在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) 我需要简单地计算一张纸上的区域数量.我的代码是:
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.
谢谢.
我使用普通的域凭据登录了我的工作站.我们称之为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) 我在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() …
如何删除字符串中的特殊字符和字母?
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)
我找到了vba Replace - 但是为每个角色编写一个替换版本会让我的代码变得更大.好吧,让我清楚地告诉你,不要向你隐瞒任何事情:
qwe123 4567*. 90 '带空格的字符串(1,"A").值123 4567 90'首先删除字符,保留空格A1:A3
123
4567
90
你能告诉我怎么删除字符串中除数字和空格以外的所有字符?
提前致谢
在Excel VBA中,Range("A1").Value应返回工作表上范围A1的基础值.但是如果单元格格式化为Accounting,我会得到不同的值.
如何获得单元格的实际基础价值?
工作表
创建一个新文档,在单元格中输入以下值:
正如您所期望的那样,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.
工作表
回到工作表.输入以下值:
A1并且A2有相同的基本价值,但B1并B2没有,即使它们都计算使用Value的方法A1和A2.
在表达式A3(=A1=A2)的访问的实际的基础值A1和A2.如何在VBA中访问这些值?
背景
我有一个非常大的数据表,在高端64位机器上运行大约100万个输入场景需要长达12个小时.这些方案基于许多离散的Excel模型,然后将这些模型输入到财务模型中以进行详细计算
为了改进这个过程,我希望测试并比较以下速度:
Calculation,ScreenUpdating等关闭)VBS以在不可见的Excel实例中刷新数据表所以,我正在寻找以编程方式管理数据表的最佳方法
更新:使用(2)和(3)中的代码没有提供测试具有单个大型数据表的工作簿的简单示例的好处
相当令人惊讶的是,VBA中的数据表似乎很少 - 可能没有 - 直接支持
我目前的知识和文献搜索
BeforeRefresh和AfterRefreshEvents .Intellisense不会将此作为数据表的选项提供ActiveWorkbookk.Sheets(1).QueryTables(1).不是那样的数据表Data Tables然后运行a 作为解决方法.RefreshAll解决方法肯定是可行的,因为我只有一个数据表,但如果存在,我更喜欢直接的方法.
是的,我坚持使用Excel :)
请不要为此方法建议其他工具,输入模型和使用数据表的总体模型都是
我只是好奇是否有办法通过使用代码刷新特定数据表来调整过程,我上面的初始测试结果已经得出结论.
这是我到目前为止所做的.
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循环中使用?谢谢.