根据单元格值创建动态范围

时间:2016-10-06 21:49:51

标签: excel vba excel-vba

我是VBA的新手,我试图根据A栏中包含的单元格值创建动态范围。同一张纸上有很多范围,每个范围的大小都会改变,因此我无法将单元格标识为范围的起点,因为它会发生变化。我在表2的A列中列出了不同的范围名称,如果需要,我可以使用它来创建不同的范围。我认为最好的方法是使用find,但同样,我对此非常陌生。这是我到目前为止所做的事情(我知道的并不多)。任何帮助是极大的赞赏!谢谢!

 Sub NameRange()

Dim rngselect As Range, FinalRange As Range, cell As Range
Dim ws As Worksheet

Set ws = Worksheets("OOE")
Set rngselect = ws.Range("$A:Z")

ws.Columns(i, 1).Find(California).Select
.Name = "Cali"

End Sub

1 个答案:

答案 0 :(得分:1)

我以前做过这件事,并不像听起来那么简单。命名范围是整个工作簿的属性,因此必须是唯一的。如果您更改名称的范围(也不会通知您),VBA将不会生成错误。

话虽如此, - 不要选择没有必要的范围。 - 由于您被限制为A列,因此在查找值位于B列的情况下使用循环

' Worksheet with names
Dim name_ws as Worksheet
' Assuming you're worksheet with the names is in the same workbook and named "Names"
Set name_ws = ThisWorkbook.Worksheets("Names")

' Find might be better but I haven't had my coffee so you'll get the double loop
for j = 1 to name_ws.Cells.SpecialCells(xlCellTypeLastCell).Row
   for i = 1 to ws.Cells.SpecialCells(xlCellTypeLastCell).Row
      if ws.Cell(i, 1) = name_ws.Cells(j, 2) then _
         Range(ws.Cell(i,1), ws.Cell(i, 26)).Name = name_ws.Cells(j, 1)
   next i
next j

请注意:ws是你的变量,你没有在问题中指定命名范围的开始和结束单元格,所以我只去了26个单元格。

请注意:我假设工作表的B列名称中包含搜索变量,而A列中包含您要使用的名称

相关问题