【问题标题】:Basic VBA - Looping and Inputbox基本 VBA - 循环和输入框
【发布时间】:2018-07-16 05:28:47
【问题描述】:

我需要帮助完成一些非常基本的 VBA 编码。

到目前为止,我已经能够将 1 到 100 之间的随机数放入某个范围 (A1:J10),并从工作表中读取值并将它们存储在一个二维整数数组中。

但是,我需要以下帮助:

  1. 遍历数组中的值并计算大于用户指定值的值的数量(想到InputBox,同时记住将值从字符串转换为整数,还需要使用如果声明确保数字在 1 到 100 之间)。结果需要显示在消息框中
  2. 然后它需要遍历范围内的所有值,并将值大于指定数字的单元格着色为蓝色。

有人可以帮忙吗?这就是我目前所拥有的

Sub numrange()
    Dim r As Range
    Set r = Range("A1:J10")
    r.Formula = "=randbetween(1,100)"

    Dim arr As Variant
    Dim i As Integer, j As Integer

    arr = Range("A1:J10").Value
    ReDim arrint(LBound(arr, 1) To UBound(arr, 1), _
        LBound(arr, 2) To UBound(arr, 2)) As Integer
    For i = LBound(arr, 1) To UBound(arr, 1)
        For j = LBound(arr, 2) To UBound(arr, 2)
            arrint(i, j) = arr(i, j)
        Next
    Next
End Sub

【问题讨论】:

  • 除非您是专门作为学习 VBA 的练习,否则最好使用条件格式进行第二部分。
  • 我是 VBA 新手,这是为了上课。我不知道什么是条件格式对不起

标签: arrays vba excel loops


【解决方案1】:

没有数组的更短的解决方案:

Sub numrange()
  Dim r As Range, count As Integer, number As Variant
  Set r = Range("A1:J10")

  r.Formula = "=randbetween(1,100)"
  r.Interior.ColorIndex = 0

  count = 0
  number = InputBox("Insert number between 1 and 100")
  If number >= 1 And number <= 100 Then
    For Each cell In r
      If cell > CInt(number) Then
        count = count + 1
        cell.Interior.ColorIndex = 5
      End If
    Next
    MsgBox count & " numbers are greather than " & number
  Else
    MsgBox "Not a valid number"
  End If
End Sub

【讨论】:

    【解决方案2】:

    假设您已经完成并成功实现了您的想法,请尝试:

    Edit1:添加输入框

    Sub marine()
    
        Dim r As Range, iCnt As Integer
        Dim arr, iVal
        Dim i As Long, j As Long, myprompt As String
    
        Set r = Sheet1.Range("A1:J10") '/* change Sheet1 to your actual sheet */
        r.Formula = "=RANDBETWEEN(1,100)"
        r.Interior.Color = xlNone '/* remove existing formatting */
    
        arr = r.Value2
        myprompt = "Please enter numbers between 1 to 100."
        Do
            iVal = InputBox(myprompt, "Count and color")
            myprompt = "You entered an invalid number." & vbNewLine & _
                       "Please enter number between 1 and 100 only."
            If iVal = "" Then Exit Sub '/* if user cancels */
            If Not IsNumeric(iVal) Then
                myprompt = "Invalid entry, numeric value expected." & vbNewLine & _
                           "Please enter numbers between 1 and 100."
            End If
        Loop Until iVal >= 1 And iVal <= 100
    
        iCnt = 0
        For i = LBound(arr, 1) To UBound(arr, 1)
            For j = LBound(arr, 2) To UBound(arr, 2)
                If arr(i, j) > CInt(iVal) Then
                    iCnt = iCnt + 1
                    r.Item(i, j).Interior.Color = RGB(0, 0, 255)
                End If
            Next
        Next
        MsgBox "Total of " & iCnt & " number(s) greater than " & iVal
    
    End Sub
    

    【讨论】:

    • 谢谢!我已将其添加到我的代码中,但我不确定将输入框放在哪里(您输入一个值以在其大于指定的数字时突出显示)。现在它只是在没有输入框选项的情况下突出显示所有蓝色。
    • @MeganStarbuck 是的,我认为你可以处理。查看更新。
    • 我不知道为什么我投了反对票 :) 但好在它对 OP 有帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多