나는 배열을 이해하려고 노력하고 있지만 개념에 내 머리를 완전히 감쌀 수는 없습니다. 다음 데이터 세트가 있습니다.
그리고 B 열의 값이 0보다 큰지 확인하기 위해 다음 코드를 작성했습니다. 그렇다면 값을 배열에 입력 한 다음 메시지 상자에 최소값을 출력합니다.
Sub MinFunc()
Dim ValLng(1 To 5) As Long, x As Long
x = 3
For i = 1 To 5
If Cells(x, 2).Value > 0 Then
ValLng(i) = Cells(x, 1).Value
Cells(x, 2).Value = Cells(x, 2).Value - 1
x = x + 1
End If
Next i
MsgBox (Application.WorksheetFunction.Min(ValLng))
End Sub
이제 코드에 두 가지 문제가 있습니다.
포인트 1과 2를 달성 할 수있는 방법을 알려주시겠습니까?
당신의 도움을 주셔서 감사합니다!
필요한 것은 동적 크기의 배열을 갖는 것입니다.
먼저 일정한 크기를 정의하지 않고 배열을 정의하고 Dim ValLng() As Variant
.
둘째, Redim
처음에는 큰 크기로 사용하십시오 ReDim ValLng(0 To 1000)
.
셋째, For
루프 내부의 모든 일치 항목으로 배열을 채운 후 크기를 조정하여 배열을 최적화하고 ReDim Preserve ValLng(0 To x - 1)
. 배열을 사용하지만 그 안에 값을 유지 Redim Preserve
한다는 것을 의미 Redim
합니다.
아래 코드를 사용하면 시작할 수 있습니다.
Option Explicit
Sub MinFunc()
Dim ValLng() As Variant, x As Long, i As Long
Dim MinRes, RngFind As Range
ReDim ValLng(0 To 1000) '<-- init dynamic array size to a very large value , will optimize later
x = 3
'-- just for example, loop until the last cell with data in Column B
For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
If Cells(x, 2).Value > 0 Then
ValLng(i) = Cells(x, 1).Value
Cells(x, 2).Value = Cells(x, 2).Value - 1
x = x + 1
End If
Next i
ReDim Preserve ValLng(0 To x - 1) '<-- resize array to actual size found
MinRes = Application.WorksheetFunction.Min(ValLng)
Set RngFind = Cells.Find(What:=MinRes, After:=Range("A1"), _
LookIn:=xlValues, LookAt:=xlWhole) '<-- use find method
Cells(RngFind.Row, 3) = MinRes '<-- put the Minimum value at column C at the same row
End Sub
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다