例如,我将A10命名为A20作为年龄,现在我如何获得与A14相同的Age [5].
我可以写"= A14",但我确实喜欢写"=年龄5美元"或其他东西.
Dim sampleRange as Range
Set sampleRange = Worksheet.Range(Cells(1,1),Cells(1,4)
sampleRange.Name = "Range1"
MsgBox sampleRange.Name
Run Code Online (Sandbox Code Playgroud)
上面的代码将显示范围的实际地址,而不是名称.为什么?
如何获取命名范围以返回其名称?
可以getRange用来命名范围而不是区域吗?
当我似乎这样做时,它说参数必须是一个范围.例如,
代替:
getRange("A4:E7");
Run Code Online (Sandbox Code Playgroud)
A4:E7已经将区域设置为sheet1中名为"Names"的命名区域.
你能否使用:
var tableRange = SpreadsheetApp.getActiveSpreadsheet();.getRangeByName("Names");
getRange(tableRange);
Run Code Online (Sandbox Code Playgroud)
或者还有其他方法可以做到这一点.完整的代码是:
function onEdit(event){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var editedCell = ss.getActiveCell();
var columnToSortBy = 1;
var tableRange = ss.getRangeByName("Names");
if(editedCell.getColumn() == columnToSortBy){
var range = ss.getRange(tableRange);
range.sort( { column : columnToSortBy } );
}
}
Run Code Online (Sandbox Code Playgroud) 编辑:标题已更改为清晰.
快速摘要:我想知道工作簿范围,工作表依赖命名公式(我将在下面描述)的行为是否是Excel中的文档功能.如果是这样,请指出我某处某些文件的方向 - 我似乎无法在网上找到任何关于此的信息(也许我使用的是错误的搜索条件......?)并且不想使用实际的东西一个bug,可能会在以后的版本中消失!
严格来说,这不是一个关于VBA的问题; 但是,命名公式是我和其他人一直在VBA代码中使用的东西,所以它仍然适用于我认为的主题.
编辑:请注意下面的VBA代码可能不完全正确 - 我还没有测试过.
对于工程/科学计算,我经常需要在同一工作簿中多次使用相同的命名公式/范围,但是在不同的工作表上.作为一个简化的例子,我可能会为圆形区域实现类似的东西:
Dim sht as Worksheet
For Each sht In ThisWorkbook
Call sht.Names.Add(Name:="AreaCircle",RefersTo:="=PI()*'" & _
sht.Name & "'!Radius^2")
Next sht
Run Code Online (Sandbox Code Playgroud)
这导致以下一组命名范围/公式(作用于每个工作表):
=PI()*Sheet1!Radius^2 <--- scoped to Sheet1
=PI()*Sheet2!Radius^2 <--- scoped to Sheet2
etc. etc.
Run Code Online (Sandbox Code Playgroud)
当然这很好用,但它具有难以进行未来变化的主要缺点.因此,例如,如果公式发生变化(圆形区域当然不会改变!例如,AASHTO LRFD公路设计代码中的公式,几乎每个版本都会改变!),我必须编辑每个实例每个名称公式.即使我写了一个VBA程序来为我做这件事,这也很乏味.
我前几天在Excel 2013中发现了以下事故,并且无法在网上任何地方找到任何相关信息.这使我开始使用它犹豫不决.
假设我运行以下单行代码:
Call ThisWorkbook.Names.Add(Name:="AreaCircle",RefersTo:="=PI()*!Radius^2")
Run Code Online (Sandbox Code Playgroud)
这导致以下SINGLE命名范围/公式(作用于工作簿):
=PI()*!Radius^2<---公式的范围是工作簿; 请注意!Radius,不是Radius.
请注意,这与以下内容不同(没有感叹号):
=PI()*Radius^2<---请注意,这里Radius的范围是工作簿.
现在,AreaCircle将产生与上面第一种方法完全相同的行为:它将根据本地工作表定义的Radius值生成结果.因此,如果有两个命名范围Radius(一个用于Sheet1和一个用于Sheet2),AreaCircle将根据Radius其使用的工作表中的值进行计算.而且每次添加新工作表时,我都不再需要添加新版本(以及其他所有!)公式的额外好处(这是巨大的!).
这是难以描述的行为; …
我在Excel中有一个表,其列标题对应于我的工作簿中其他位置的动态命名范围的一部分.例如,我有这些列标题:"10","20"等,并且这些动态命名区域:"ExampleRange10","ExampleRange2"等.我想输入一个VLOOKUP公式通过串联引用ExampleRange10字符串"ExampleRange"和列标题"10".这将允许我简单地在表中的所有列上扩展公式,而不是在每列的公式中手动键入"ExampleRange10","ExampleRange20"等.
我知道INDIRECT函数,并且在过去已成功使用它与命名范围,但在这种情况下它似乎不适用于动态命名范围.我猜这是一个细微差别与Excel如何定义动态命名范围有关(它们没有显示在公式栏左侧的命名区域下拉列表中,并且它们在VBA中有一些有趣的属性, 例如).有没有办法可以将INDIRECT公式与动态命名范围结合使用,还是有另外一种方法可以解决这个问题?
编辑:以下是使用的确切公式.
这是主要的公式:=VLOOKUP(B2,INDIRECT("ExampleRange"&C1),2,FALSE)其中C1包含"10",我称之为"ExampleRange10"动态命名区域的公式为:=OFFSET(Sheet1!$F$2,0,0,COUNTA(Sheet1!$F$2:$F$25),2).主公式返回"#REF!",但是当我删除动态命名范围公式并将"ExampleRange10"定义为静态范围时,它可以正常工作.
conditional-formatting google-sheets named-ranges google-sheets-formula
我有:
Microsoft.Office.Interop.Excel.Workbook wb;
Microsoft.Office.Interop.Excel.Name name;
Run Code Online (Sandbox Code Playgroud)
有没有办法获得指定范围在给定工作簿中的工作表名称,假设我已经获得了命名范围的Name对象和wb?
详细说来,假设我的工作簿中有两个命名范围.两个命名范围都具有相同的名称(比如说"myName"),但是一个范围限定为Sheet1,另一个范围限定为工作簿.
给定命名范围的名称(字符串),我想获取工作簿级别命名范围.
如果我使用本机调用:wb.Names.Item("myName"),则返回工作表作用域命名范围.
如果我改为:wb.Names.Item("Sheet1!myName"),那显然会返回工作表范围的名称范围.我发现我可以使用它来指定特定于工作表的工作表,但不能指定工作簿.
无论如何我可以指定我想要工作簿作用域吗?
我的解决方法是迭代所有Name的列表,并比较.Name属性以获取工作簿范围命名范围.这是有效的,因为.Name属性附加了"Sheet1!" 到工作表范围命名范围.然而,这是非常昂贵的,我想避免它.
目前我有这样的公式:
COUNTIFS(B3:B36,"16",E3:E36,"01")
是否可以将这些范围B3:B36和转换E3:E36为变量,例如 B'start_cell_value':B'stop_cell_value'。
整个事情看起来像:
=COUNTIFS(B'start_cell_value':B'stop_cell_value',"16",E'start_cell_value':E'stop_cell_value',"01")
Run Code Online (Sandbox Code Playgroud)
start_cell_value并且stop_cell_value只是存储在单独单元格中的一些数字。这会有所帮助,因为仅更改这些单元格中的数字也会更改公式中的所有内容,而这正是我想要的。
我尝试将其他单元格中的数值与字母组合起来以生成有效的单元格名称,但它似乎不起作用,或者只是引发引用错误。
任何想法,将不胜感激。
counting countif google-sheets named-ranges google-sheets-formula