代码之家  ›  专栏  ›  技术社区  ›  Tarik

重新定义整数vba

  •  0
  • Tarik  · 技术社区  · 12 年前

    我很难解决我面临的以下问题:

    假设我有这个代码

        i_GroupNumberA = Application.WorksheetFunction.CountIf(Sheets("SheetX").Range("G2:G500"), "Red")
        i_GroupNumberB = Application.WorksheetFunction.CountIf(Sheets("SheetX").Range("G2:G500"), "Green")
    
        For i = 2 To LastRow
            For j = 2 To LastCol
    
                groupNumber = Sheets("Sheet1").Cells(i, j).Value
    
                i_GroupNumberA = 35 'this number a integer that I have got from a cells.value
                i_GroupNumberB = 39
    
                If groupNumber = Sheets("Sheet1").Cells(i, j).Value Then
    
                      i_Variable = "i_" + groupNumber + "AlphabeticLetter"
    
                      MsgBox i_Variable
    
                End If
    
            Next j
        Next i
    

    结果我得到了 变量(_V) 作为结果的消息框中的字符串:

    i_组编号A

    我希望得到以下结果:

    35

    我要问的是,如何使字符串的一个新变量作为整数运行。

    我不确定我是不是在问这个问题?


    我照@enginersmnky说的做了,但没有效果。我检查了网站,并与您的代码一起进行了一些调整。但我仍然无法得到所需的号码作为回报。到目前为止,我得到了这个:

    Dim Group As New Collection 
    
    
    i_GroupNumberA = Application.WorksheetFunction.CountIf(Sheets("SheetX").Range("G2:G500"), "Red") 'lets assume it is an number 35
        i_GroupNumberB = Application.WorksheetFunction.CountIf(Sheets("SheetX").Range("G2:G500"), "Green") 'lets assume it is an number 39
    
    Group.Add i_GroupNumberA
    Group.Add i_GroupNumberB
    
    For i = 2 To LastRow
        For j = 2 To LastCol
             groupNumber = Sheets("Sheet1").Cells(i, j).Value
             i_Variable = "i_" + groupNumber + "AlphabeticLetter"
             Group(i_Variable)
        Next j
    Next i
    

    组(i_variable)我想不通?由于某种原因,它不起作用。

    1 回复  |  直到 12 年前
        1
  •  1
  •   engineersmnky    12 年前

    由于无法从中的字符串获取变量值 vba 我建议创建一个 Collection 对象或 Dictionary 如果你需要更多样的东西

    dim groups AS New Collection
               'Value, Key
    groups.Add 35, "i_GroupNumberA"
    groups.Add 39, "i_GroupNumberB"
    

    然后在循环中而不是在消息框中使用

    groups(i_Variable) 
    

    这将为“i_GroupNumberA”返回35

    使现代化 集合使用Item and Key结构 Collection(Key) 要返回所需的值,必须指定 key

    你可能需要用你需要的组号动态地建立一个集合,因为我不确定这些是什么。

    Function buildCollection(val As Variant,alpha AS String) AS Collection
       Dim groups As New Collection
       For i = 2 To LastRow
         For j = 2 To LastCol
           groupNumber = Sheets("Sheet1").Cells(i, j).Value
           i_Variable = "i_" & CStr(groupNumber) & alpha 
           groups.Add val, i_Variable
         Next j
       Next i
       set buildCollection = groups
    End
    

    但是,如果没有更多关于你的结构的信息,除了基本的例子,我真的帮不上忙。什么是组号?它是一个实际的整数吗?什么是A与B?请给出建议,因为这可能比我最初想象的要简单。如果你放一些样本数据或其他东西,我相信我可以让它为你工作,这看起来就像一个相当简单的循环。虽然你在循环所有的单元格,并指出它们都是组号,这对我来说似乎很困惑。

    推荐文章