如何搜索特定单元格并通过VBA更改其值

时间:2014-06-04 10:46:47

标签: excel-vba vba excel

我是Excel中的VBA新手。我被要求建立一个分销系统,将客户分配给代理商。我有一个表包含代理,排名和分配总数。用户从用户表单中选择城市,并根据选择将客户分配给具有最小等级的代理。因此,如果用户选择伦敦系统搜索伦敦排名最小的代理,然后将该代理的分配数增加1。

我尝试编写代码但遇到运行时错误,我知道if部分中有很多错误。注释行我知道如何编写正确的代码来应用我想要的操作。

Sub DistSystem()

Dim count As Integer
Dim City As String
Dim minmum As Long
Dim i As Integer

Dim array_rank() As Variant
Dim array_city() As Variant
Dim array_assign() As Variant

count = Sheets("111").Range("Y2").Value
City = Sheets("111").Range("W2").Value

array_city = Range("A1:A" & count).Value
array_rank = Range("E1:E" & count).Value
array_assign = Range("F1:F" & count).Value       

minmum = 1000000
i = 1

Do

    If City = array_city(i) And array_rank(i) <= minmum Then
        minmum = array_rank(i)    
    Else
        i = i + 1    
    End If

Loop While i <= count

MsgBox (minmum)

i = 1

Do

    If City = array_city(i) And minmum = array_rank(i) And Then

    'Here I want to apply an action: seting the new value by 
    ' incresing the assign number for the smallest rank

        array_assign(i) = array_assign(i) + 1

    Else    
        i = i + 1    
    End If

Loop While i <= count

End Sub

1 个答案:

答案 0 :(得分:1)

您的问题出在If City = array_city(i) And array_rank(i) <= minmum Then

因为您正在按原样将整个范围读入数组,所以生成的数组是2维,因此要引用这些值,您需要两个维。

您收到错误的原因是array_city(i)array_rank(i)根本不存在,因此最终会出现“运行时错误:我们范围的下标。”

quote myself

  

生成的数组为2维,Row值为第一维,列为第2维。由于所有范围都是单个列,因此可以通过调用array_rank(Row,1)或array_city(Row,1)或array_assign(Row,1)来访问任何值。

正如aucuparia精明地指出的那样,你的i = i + 1需要在if语句之外,否则,一旦你达到符合第一个条件的i值,{{ 1}}永远不会再增加,你将陷入无限循环。

if语句应为:

i

同样,您引用If City = array_city(i,1) And array_rank(i,1) <= minmum Then minmum = array_rank(i,1) End If i = i + 1 array_cityarray_rank的任何其他地方都需要使用相同的语法。