在单元格范围内selectCASE / CASE

我有一个36K行的电子表格。 每条36K线将被匹配到大约350个号码之一。 当这个数字匹配时,我会将文本和冒号input到与匹配数字相同的行中的另一列。 我有的问题是:

  1. 如何让macros运行一个范围(例如:T2:T36000)并返回每一行的值?
  2. 我可以通过列而不是行范围来做到这一点。 (例如:名为Category的列,而不是T2:T36000)。 原因是每列中的行数将会改变。

这一次适用于一行,但我不希望每行都这样做。 我意识到我将不得不为350个不同的数字中的每一个值。

Sub CategoryChanger() Select Case Range("AS2").Value Case 1492 Range("T2") = "IT DOES NOT WORKS" Case 1491 Range("T2") = "IT WORKS" End Select End Sub 

提前感谢。

使用For Each ... Next基本循环迭代For Each ... Next语句:

 Sub CategoryChanger() Dim rng as Range Dim r as Range Dim result as String '## Define a range to represent the cells over which you would like to iterate: '## Modify as needed... Set rng = Range("AS2:AS100") '## Iterate each cell in the Range defined "rng" For Each r in rng.Cells Select Case r.Value Case 1492 result = "IT DOES NOT WORKS" Case 1491 result = "IT WORKS" End Select '## Print result in the cell 10 columns to right '## Modify as needed r.Offset(0, 10).Value = result Next End Sub 

使用350多个值来检查30,000行数据,可能会更好地将其作为另一个(隐藏)工作表上的表进行索引,并使用WorksheetFunction.VLookup执行查找,而不是像这样强制通过Case切换。

在这种情况下,您将完全省略Select Case块,并且简单地这样做(假设您添加一个名为“Lookup”的工作表并将查找表放在范围A1:B350中):

 Sub CategoryChanger() Dim rng as Range Dim r as Range Dim result as String '## Define a range to represent the cells over which you would like to iterate: '## Modify as needed... Set rng = Range("AS2:AS100") '## Iterate each cell in the Range defined "rng" For Each r in rng.Cells On Error Resume Next result = Application.WorksheetFunction.VLookup(r.Value, Worksheets("Lookup").Range("A1:B350"), 2, False) If Err.Number <> 0 Then result = "NOT FOUND!" On Error GoTo 0 '## Print result in the cell 10 columns to right '## Modify as needed rng.Offset(0, 10).Value = result 'Clear out the "result" value for the next iteration: result = vbNullstring Next End Sub 

我不确定哪个可以优化这个用途。