使用Msgbox显示范围内的项目

时间:2016-12-13 14:12:27

标签: excel vba excel-vba

这背后的想法是有一个输入区域和一个显示区域。输入区域保存值,显示值显示(全部准备完成)。输入区域可以小于或大于要提供的内容。这是一个场景;

----sheet3------    ------sheet4-------
DISPLAY            INPUTS
Name       Val     Name         Val
A8         B8       D8          E8        
1 x        -1     Oranges        5
2 x        -1     Peanutes       2
3 x        -1     Peaches        6
4 x        -1     Coffee         -1
                  Nuts           6
                  Corn           10

如图所示,显示屏只能包含四个非-1的值。我们可以在代码中将这个数字4设为固定数字。我有功能到位(countif公式)填充显示器先到先服务,但需要功能将msgbox输入名称,如果显示器中没有空间。 -1值表示无输入。我需要一个消息框,显示无法显示的输入名称。在这种情况下,一个消息框" Corn"因为这是唯一一个无法显示的。我怎么能用范围而不是固定的单元格数来做这个呢?

这是一个非工作的pseduo /编写的代码示例,我将它们放在一起以更好地了解如何使用范围执行此操作。 Range1代表D8,而Range2代表D13。

Dim i As Long, cnt As Long
cnt = 1
For i = Worksheets("Sheet4").Range("range1").count To Worksheets("Sheet4").Range("range2").count 'Get all items between.

If cnt <= 4 'if less what display can offer
If i != -1 then 'val is not nothing
cnt = cnt + 1 'increment how many items we have displayed
end if
else
msgbox Sheets("Sheet4").Range("A" & i).Value ' The value of I is incorrect as that is not the true range row number. Can you get the actual row of the range with something like .Rows?
end if
Next i

2 个答案:

答案 0 :(得分:1)

试试这个。我已经改变它,因此只有一个命名范围以简化。即range1是D8:E13。 (如果您愿意,可以很容易地将其更改)

Option Explicit

Sub test()

    Dim i As Long, cnt As Long
    cnt = 1
    For i = Worksheets("Sheet4").Range("range1").Row To Worksheets("Sheet4").Range("range1").Row + Worksheets("Sheet4").Range("range1").Rows.Count - 1 'Get all items between.

        If cnt <= 4 Then 'if less what display can offer
            If Worksheets("Sheet4").Range("range1").Cells(i - Worksheets("Sheet4").Range("range1").Row + 1, 2) <> -1 Then 'val is not nothing
                cnt = cnt + 1 'increment how many items we have displayed
            End If
        Else
            MsgBox Worksheets("Sheet4").Range("range1").Cells(i - Worksheets("Sheet4").Range("range1").Row + 1, 1).Value
        End If
    Next i

End Sub

答案 1 :(得分:0)

你可以试试这个

Sub main()
    Dim cnt As Long
    Dim cell As Range
    Dim msgString As String

    With Worksheets("Sheet4")
        With .Range("D7", .Cells(.Rows.count, "D").End(xlUp))
            .Offset(, 1).AutoFilter field:=1, Criteria1:="<>-1"
            For Each cell In .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
                cnt = cnt + 1
                If cnt > 4 Then msgString = msgString & cell.Value & vbCrLf
            Next cell
            If msgString <> "" Then MsgBox Left(msgString, Len(msgString) - 1)
        End With
        .AutoFilterMode = False
    End With
End Sub