2014-02-24 5 views
0

주 및 돌아 가기 워크 시트 2 개가 있습니다. Main에 값이 있고 Return에 결과가 있습니다. 인덱스 값을 포함하는 배열에서 특정 위치를 찾으려고합니다 (데이터는 기본 시트에서 가져옵니다). 10, 20, 40, 50, 60 등 ... 그런 다음 위의 5 개 값과 5 개 값을 취하여 색인 값을 포함하여이 값보다 아래쪽에있는 값을 취하여 평균을 구하여 시트의 셀에 평균을 반환합니다. Return 시트), 따라서 평균 11 개의 값을 수행합니다. 지금까지 사용하여 배열의 범위를 저장 관리해야 : 배열 내의 값과 평균의Excel VBA 배열 데이터 조작

Public Sub myArray() 
Dim myArr() As Variant 
Dim R As Long 
Dim C As Long 
myArr = Range("C6:D1126") 
For R = 1 To UBound(myArr, 1) 
For C = 1 To UBound(myArr, 2) 
    Debug.Print myArr(R, C) 
Next C 
Next R 
End Sub 

검색/발견은

도와주세요 ... 내 머리를 긁적 나를 떠났다 ... 고맙습니다. 배열의 코드에 대한 도움말 또는 워크 시트 자체에서 데이터를 조작 나를 :)으로

샘플 파일 잘 작동 -이 UDF 사용할 수 있습니다>http://www.filedropper.com/indexes

답변

1

:

Function avrg(indx, rng As Range) 
    Dim i, minI As Long, maxI As Long 

    i = Application.Match(indx, rng.Columns(2), 0) 

    If IsError(i) Then 
     avrg = CVErr(xlErrNA) 
     Exit Function 
    End If 

    With WorksheetFunction 
     minI = .Max(1, i - 5) 
     maxI = .Min(rng.Rows.Count, i + 5) 

     avrg = .Average(rng.Cells(1, 1).Offset(minI - 1).Resize(maxI - minI + 1)) 
    End With 
End Function 

이 UDF를 Index 열 (주 시트)에서 값의 첫 번째 항목 (예 : 10 또는 20)을 찾으면 그 위의 5 개 값과 그 아래 5 개를 취하여 Value (주 시트)의 해당 값의 평균을 반환합니다. 우리가 인덱스 i 위 아래 5 개 값 5 개 값을 취할 수없는 경우

minI = .Max(1, i - 5) 
maxI = .Min(rng.Rows.Count, i + 5) 

: 당신이 열 Index에서 값의 평균을해야하는 경우, UDF에서이 라인에서 rng.Cells(1, 2) 또한

주의에 rng.Cells(1, 1) 변경 (예 : 목표 값의 인덱스가 2 인 경우) 처음부터 모든 값을 시작에서 두 번째 경우까지 모든 값을 범위 끝까지 가져옵니다.

다음 워크 시트에서 호출 할 수 있습니다.이 수식을 DashC4 : =avrg(C3,Main!$C$6:$D$1126)에 입력하고 드래그하십시오.

중 하나 VBA에서

:

Sub test() 
    Dim rng As Range 
    Dim rngInd As Range 
    Dim cell As Range 

    Set rng = ThisWorkbook.Worksheets("Main").Range("C6:D1126") 
    Set rngInd = ThisWorkbook.Worksheets("Dash").Range("C3:L3") 

    For Each cell In rngInd 
     cell.Offset(1).Value = avrg(cell.Value, rng) 
    Next cell 
End Sub 

두 경우 모두 기능에서 찾을 수 없습니다 #N/Aindx 경우 반환합니다.

+1

절대 천재. 정말 고맙습니다. 그것은 완벽하게 작동합니다. – Fwafa