我搜索过这个,但没有运气。如有任何帮助,我们将不胜感激。
数据集
我有一个相当高的数据集(大约在 1,000 到 5,000 行之间),有两列;一个用于类别,另一个用于值。数据各不相同;可能有 10 个类别,也许有 100 个,或任何其他数量:
等等
目标
我想根据 A 列中的值创建仅包含 B 列中的值的范围,并使用 A 列的值作为范围的名称。
例如:
- 范围名称 = "类别 1";范围值 { 值 1、值 2、值 3}
- 范围名称 = "类别 2";范围值 { 值 4、值 5、值 6}
- 范围名称 = "类别 3";范围值 { 值 7、值 8、值 9、 值 10}
- 等等
尝试过的事情
我已经尝试了很多方法,但我是一个 VBA 新手,我不知道什么是实现此解决方案的有效方法,并且担心我在该方法中不断犯错误。
我认为尝试在 A 列中查找下一个不同值可能是一个与偏移函数配对的好主意,但除了简单地创建和命名要在 A 列中查看的类别范围之外,我无法走得更远.我确信这是没有必要的,但我绝对不是VBA专家。
Sub AllCategories
Dim sht As Worksheet
Dim lrow As Long
Dim r As Range
Set sht = Sheets("Sheet1")
lrow = sht.Cells(Rows.Count, "A").End(xlUp).Row
Set r = sht.Range("A2:A" & lrow)
ActiveWorkbook.Names.Add _
Name:="AllCategories", _
RefersTo:=r
End Sub
想法?
似乎我需要类别的起始变量和结束变量,但我找不到如何查找下一个不同的值。也许有一些循环的 Find 变量函数?
感谢您的帮助,非常感谢。
干杯, 先知
最佳答案
根据我的评论,我不确定你正在做的事情是否是最好的做事方式,并且由于命名变量的名称中不能有空格,如果你的类别实际上是单词和有些可能有空格,你正在设置很多令人心痛的处理异常。除此之外,如果这确实是您所需要的,那么您并没有那么遥远,但您无法用一个变量来跟踪每个范围的开始和结束。下面的代码将执行您所要求的操作:
Sub name_ranges()
Dim iRow As Integer
Dim iStart As Integer
Dim rang As Range
iRow = 2
iStart = 2
With Worksheets("test")
While .Cells(iRow, 1) <> ""
iRow = iRow + 1
If .Cells(iRow, 1) <> .Cells(iRow - 1, 1) Then
Set rang = Intersect(Columns(2), Rows(iStart & ":" & iRow - 1))
rang_name = Replace(.Cells(iRow - 1, 1), " ", "")
ActiveWorkbook.Names.Add Name:=rang_name, RefersTo:="=test!" & rang.Address
iStart = iRow
End If
Wend
End With
End Sub
关于excel - 命名多个范围 - 使用两列中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66305544/