MS Excel随意选择名称,可自由选择要选择的名称

时间:2017-07-12 06:47:55

标签: excel excel-vba vba

每个人,

我正在尝试自动化我的Excel文件以选择随机数据来检查审核。我想制作随机数,我可以输入要选择的数据量。在excel中有可能吗?我在下面放了一些截图以便更好地解释。我希望你能帮助我。

Link for the Image

1 个答案:

答案 0 :(得分:2)

使用通常的excel功能这确实是不可能的...... 但是,excel(和其他Microsoft Office应用程序)运行底层编程语言:visual basic。这是要走的路:)

这是一个makro,它选择与整个列中的搜索匹配的随机字段。

Sub SelectRandomSearch()
    'Declaring Variables
    Dim y As Integer
    Dim x As Integer
    Dim startY As Integer
    Dim lastY As Integer
    Dim search As String
    Dim hits As Integer
    Dim random As Integer
    Dim hitsArr() As Integer
    Dim controlPart As Double
    Dim controlsNum As Integer
    Dim controlArr() As Integer

    'Declaring Values
    startY = 1        'lowest Y-Coordianate of the input column
    x = 1             'X-Coordiante of the input column
    controlPart = 0.1 'Fraction of the hits, that need to be controled

    'Get search value
    search = InputBox("Enter a search value", "Searching", "")

    'Getting Column Lenght and reset coloring
    y = startY
    Do Until IsEmpty(Cells(y, x).Value)
        Cells(y, x).Select
        With Selection.Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        y = y + 1
    Loop

    'Getting number of search hits
    lastY = y - 1
    hits = WorksheetFunction.CountIf(Range(Cells(startY, x), Cells(lastY, x)), search)

    'Fill hitsArr with row-numbers of hits
    ReDim hitsArr(hits + 1)
    hits = 1
    For y = startY To lastY
        If Cells(y, x) = search Then
            hitsArr(hits) = y
            hits = hits + 1
        End If
    Next y
    hits = hits - 1

    'Getting number of controlled Entries
    controlsNum = WorksheetFunction.RoundUp(hits * controlPart, 0)

    'Shuffle a part of hitsArr
    ReDim controlArr(controlsNum + 1)
    For y = 1 To controlsNum
        random = ((hits - y + 1) * Rnd + y)
        hitsArr(0) = hitsArr(y)
        hitsArr(y) = hitsArr(random)
        hitsArr(random) = hitsArr(0)
    Next y

    'Mark every hit that needs to be controlled
    For y = 1 To controlsNum
        Cells(hitsArr(y), x).Select
        With Selection.Interior
            .Color = 49407
        End With
    Next y
End Sub

您可能需要略微更改makro,但这基本上可以解决您可能需要的所有内容:)

我希望这有帮助!

现在makro标记了需要检查的字段,如下所示:

enter image description here