VBA for Access缺少一个简单的Max(x,y)函数来查找两个或更多值的数学最大值.我习惯于在基础API中已经有来自其他语言的这样的函数,例如perl/php/ruby/python等.
我知道可以做到:IIf(x > y, x,y).还有其他解决方案吗?
假设我有6个不同的单元格(不是全部都在一行).我想检查这些单元格中的值是否相等.我怎么能用一个功能呢?我希望函数只是显示"EQUAL"或"NOT EQUAL"(或者可能改变单元格背景颜色?).
什么是在VBA Access中进行回合的最佳方式?
我目前的方法使用Excel方法
Excel.WorksheetFunction.Round(...
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种不依赖于Excel的方法.
我想在Excel中实现一个可重置的,可过度删除的默认单元格值.通过这个,我的意思是当第二个单元格更新时,有一个单元格恢复为"默认"值,该值由依赖于第二个单元格的查找公式获得.用户还可以选择将不同的值写入原始单元格,这将保留到下一次更新第二个单元格为止.
好的,所以情况就是这样; 此快照属于多个工作表数据存储库的相关区域.为清楚起见,两个感兴趣的细胞以绿色突出显示,最高可见行为第1行.
" 项目搜索"单元格接受各种单词或短语输入,并进行数据验证以确保只能进行有效输入.数据验证取自可能输入的字母表列表,单元格有一个下拉列表选项(因此右侧的小箭头).
该堆栈单元使用输入从项搜索以下公式单元格...
=IF(COUNTIF(C3:F315,J6),VLOOKUP(J6,C3:F315,4,FALSE),"~")
Run Code Online (Sandbox Code Playgroud)
...其中J6是项目搜索单元格,范围C3:F315是同一工作表上查找表格的相关部分.
描述与问题相关的Excel文档区域的快照.http://img29.imageshack.us/img29/4388/capturedhx.jpg
现在,这就是我想在Stack单元格中发生的事情......
注意:Stack单元格中显示的值必须可由其他单元格中的公式读取; 即买入和卖出单元格,其值将成为Stack单元格的查找值与当时在单元格中显示的值的比率.
这有可能在任何程度上吗?优选地(但不排他地)不需要使用宏.此工作簿旨在分发给其他人,其中大部分都被锁定和保护,以避免对核心数据进行任何更改.
先感谢您.
......但还没有完全解决我的问题.
我可以使用多个单元格来实现相同(或类似)的有效功能(一个单元格保存默认值,另一个单元格保存可能的用户输入值,第三个单元格保存相关的输出值),但这看起来不像对最终用户来说既不好也不直观.此工作簿旨在分发给其他人,其中大部分都被锁定和保护.- 这个答案是不可取的.
在提出这个问题之前,在我的网上搜索中,我发现了这一点信息.它说如果我想恢复默认值是自动的,那么在工作表更改事件例程中使用以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C2")) Is Nothing Then
If Range("C2").Value = "" Then …Run Code Online (Sandbox Code Playgroud)我有一个反复出现的Excel问题是公式,例如INDEX(array,row,column)当没有结果时返回0,而不是返回空白.
将零结果更改为空白的最佳方法是什么?
以下是我到目前为止尝试过的方法:
1)使用除零.如果INDEX返回0,我会导致错误,然后我将其过滤掉.
=IFERROR(1/1/INDEX(A,B,C),"")
Run Code Online (Sandbox Code Playgroud)
缺点:使公式更加混乱,并隐藏您可能想要看到的错误.
2)使用自定义格式
0;-0;;@
Run Code Online (Sandbox Code Playgroud)
缺点:
1)不能同时申请日期格式
2)不使用条件格式,当涉及到的空白单元格检查(工作还有零值,它只是未显示)
3)使用IF语句
=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"")
Run Code Online (Sandbox Code Playgroud)
缺点:凌乱的重复
有没有人有任何其他/更好的想法?
如果我想在工作表中添加一组单元格,我可以使用以下公式:
=SUM(Sheet1!A1:A10)
Run Code Online (Sandbox Code Playgroud)
要在sub中执行此操作,我会使用:
Sub example1()
Dim r As Range, v As Variant
Set r = Sheets("Sheet1").Range("A1:A10")
v = Application.WorksheetFunction.Sum(r)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,如果我想在多个工作表中添加单个单元格,我使用以下公式:
=SUM(Sheet1:Sheet38!B2)
Run Code Online (Sandbox Code Playgroud)
在VBA中,此行失败,如在VBA中指定跨表的Excel范围中所述:
Sub dural()
v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub
Run Code Online (Sandbox Code Playgroud)
我有两个解决方法.我可以通过编程循环来得到总和:
Sub example2()
Dim i As Long
Dim v As Variant
v = 0
For i = 1 To 38
v = v + Sheets(i).Range("B2")
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
或使用Evaluate():
v = Evaluate("Sum(Sheet1:Sheet3!B2)")
Run Code Online (Sandbox Code Playgroud)
是否可以Application.WorksheetFunction.Sum()用于此计算,还是应该坚持循环?
在Excel中,我想舍入到最近的斐波纳契数.
我尝试了类似的东西(抱歉使用法语Excel):
RECHERCHEH(C7;FIBO;1;VRAI) -- HLOOKUP(C7, FIBO, 1, TRUE)
Run Code Online (Sandbox Code Playgroud)
其中FIBO是命名范围(0; 0,5; 1; 2; 3; 5; 8;等等)
我的问题是这个函数舍入到最小的数字而不是最近的数字.例如,12.8舍入为8而不是13.
注意:我只想使用excel公式,而不是VBA
在excel 2007中,我在一个单元格中有一个公式,如下所示:
=COUNTIFS('2008-10-31'!$C:$C;">="&'$A7)
Run Code Online (Sandbox Code Playgroud)
现在我想让工作表的名称('2008-10-31')取决于某个单元格的值(比如说A1).就像是:
=COUNTIFS(A1!$C:$C;">="&'$A7) // error
Run Code Online (Sandbox Code Playgroud)
有办法做到这一点吗?或者我必须为它编写VBA宏吗?
我一直在使用Excel的COUNTIFS函数来计算表中符合特定条件的行数,例如:
=COUNTIFS(Table1[Result],"Fail", Table1[Comments], "")
Run Code Online (Sandbox Code Playgroud)
现在我想修改此表达式,以便它只计算Table1中可见的行.(IE未过滤掉.)我该如何做到这一点?
我需要创建一个非常大的Excel文件,但是一个工作表中的excel文件最多可以包含65,000行.所以,我想把我的所有信息分成几个动态的工作表.这是我的近似代码
//------------------Create Excel App--------------------
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(numberOfLetters);
foreach (string letter in letters)
{
xlWorkSheet.Cells[rowIndex, 1] = letter;
rowIndex++;
}
xlWorkBook.SaveAs(pathXL, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
Run Code Online (Sandbox Code Playgroud)
如何在foreach循环中添加新工作表并使用某些条件为工作表命名(用户可以在列表页面底部的Excel中查看)?
有些人喜欢这样
foreach (string letter in letters)
{
if (letter == SOME)
{
AddNewWorksheet and give name SOME
}
xlWorkSheet.Cells[rowIndex, 1] = letter;
rowIndex++;
}
Run Code Online (Sandbox Code Playgroud)
以及如何在最后保存所有工作表?