Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-查找范围中的值并将相邻单元格存储在变量中_Vba_Excel - Fatal编程技术网

Excel VBA-查找范围中的值并将相邻单元格存储在变量中

Excel VBA-查找范围中的值并将相邻单元格存储在变量中,vba,excel,Vba,Excel,我的代码现在能够获取一系列值,找到最高值、次高值等等,并将它们作为变量粘贴到不同的工作簿中 我现在要做的是找到与特定值相邻的字符串(在本例中为名称),并将该字符串粘贴到其他工作簿中 我知道我需要用什么来做到这一点,但我没有得到它的权利 注释行之间的部分是问题所在,因为其他所有内容都是独立工作的 Dim sipRng As Range: Set sipRng = [G1] Dim rng As Range: Set rng = [C4:C16] Dim firstVal As Double, se

我的代码现在能够获取一系列值,找到最高值、次高值等等,并将它们作为变量粘贴到不同的工作簿中

我现在要做的是找到与特定值相邻的字符串(在本例中为名称),并将该字符串粘贴到其他工作簿中

我知道我需要用什么来做到这一点,但我没有得到它的权利

注释行之间的部分是问题所在,因为其他所有内容都是独立工作的

Dim sipRng As Range: Set sipRng = [G1]
Dim rng As Range: Set rng = [C4:C16]
Dim firstVal As Double, secondVal As Double, thirdVal As Double, fourthVal As Double, cel As Range
Dim var As Variant, iSheet As Integer, iRow As Long, iRowL As Long

For Each cel In sipRng
    If InStr(cel.Value, "Inbound AHT") > 0 Or InStr(cel.Value, "Valid Quality Count") > 0 Or InStr(cel.Value, "Valid Quality %") > 0 Then
        firstVal = Application.Small(rng, 1)
        secondVal = Application.Small(rng, 2)
        thirdVal = Application.Small(rng, 3)
        fourthVal = Application.Small(rng, 4)
    ElseIf InStr(cel.Value, "Outbound Calls Made") > 0 Or InStr(cel.Value, "FCR %") > 0 Or InStr(cel.Value, "FLR %") > 0 Or InStr(cel.Value, "Corrected CSAT Average") > 0 Then
        firstVal = Application.Large(rng, 1)
        secondVal = Application.Large(rng, 2)
        thirdVal = Application.Large(rng, 3)
        fourthVal = Application.Large(rng, 4)
    End If
Next cel

'''''''''''''''''
iRowL = Cells(Rows.Count, 2).End(xlUp).Row
For iRow = 1 To iRowL
    If Not IsEmpty(Cells(iRow, 1)) Then
        For iSheet = ActiveSheet.Index + 1 To Worksheets.Count
            var = Application.Match(Cells(iRow, 2).Value, Worksheets(iSheet).Columns(2), 0)
        Debug.Print var
        Next iSheet
    End If
Next iRow
''''''''''''''

nngr2.Activate
Range("B4") = firstVal
Range("B11") = secondVal
Range("B9") = thirdVal
Range("B6") = fourthVal
这就是我的开始

这是目标,只是我想要的不是值,而是名称(在本例中是字母)


这是一个起点,它加载一个二维数组,并将这些值粘贴到活动工作表的E4中:

Sub Macro1()

Dim rng As Range
Dim arr(1 To 4, 1 To 2)

Set rng = [C4:C16]

For i = 1 To 4
    arr(i, 2) = Application.WorksheetFunction.Large(rng, i)
    arr(i, 1) = rng.Cells(Application.WorksheetFunction.Match(arr(i, 2), rng, 0)).Offset(, -1).Value
Next i

nngr2.Range("B4").value = arr(1,1)
nngr2.Range("B11").value = arr(2,1)
nngr2.Range("B9").value = arr(3,1)
nngr2.Range("B6").value = arr(4,1)

End Sub

您的下一步可能会使用
范围。Sort
将识别最高、次高,依此类推。@PeterT如果可以对数据进行排序,这将是最好的方法,我已经看到老板不喜欢以任何方式弄乱数据的地方。非常正确,在这种情况下,我会将数据复制到临时/未使用的范围(或工作表)并对副本进行排序以查找已排序的数据。或者至少这是一种方法。OP需要指定他可能具有的任何其他约束条件,我们会根据需要伸出援手:)@ScottCraner All,我用图片更新了我的问题,因此它更有意义。第一个图像是我开始使用的数据,第二个是目标,只是我想要B列中的名称而不是值。没有对值进行排序,它们是作为种子输入的(认为这是一场正面竞争),然后您需要添加工作表:
nngr2。工作表(“Sheet1”)。范围(“B4”)。value=arr(1,1)