2011-09-17 6 views
0

Excel 셀 내용 (날짜)을 사용하여 다른 시트의 범위를 검색하고 셀에 포함 된 해당 날짜에 대한 정보를 반환하려면 어떻게해야합니까? 범위에서 그 날짜의 오른쪽. 나는 날짜가 영업일과 휴일이 아닌지, 그리고 그 달의 끝인지를 확인해야한다. 범위는이Excel 셀 내용을 사용하여 다른 시트의 범위를 검색하고 정보를 반환합니다.

Column 1  Column 2  Column 3 Column 4 Column 5 
    Date  Day of Week  BD or WE HD or NH Y or N 

BD = 영업일, 우리 = 주말, HD는 = 휴일, NH는 휴일, 이달의 Y = 끝, N은 월 의 끝이 아니다 = 안 = 2016을 통해 2011 년 모든 날짜는 회계 범위 내

워크 시트의 셀에 사용자가 입력 한 날짜를 사용하여 범위를 검색하고 날짜를 찾고 그 날짜의 정보를 사용하여 좋은 날짜인지 여부를 결정하고 싶습니다. 프로그래밍에 익숙하지는 않지만 현재 프로그래밍 언어보다 20 년 정도 뒤늦게 VBA 코드를 배우고 있습니다. VBA 코드를 사용하고 싶습니다. 왜냐하면 입력 한 날짜가 휴일이 아니고 휴일이 아니기 때문에 날짜를 올리고 날짜가 올 때까지 날짜를 확인하고 싶기 때문입니다. 나는 또한 달의 끝인 경우에 1을 낮추기를 원합니다. 나는 If 문과 Looping을 입력 할 수 있다고 믿지만, 사용자가 입력 한 날짜를 입력 상자가 아닌 셀에 입력하고 해당 날짜에 대한 정보를 범위에서 반환하는 방법을 아는 데 문제가 있습니다. Loop 내에서 원하는 날짜를 얻을 때까지 사용하십시오. 도움을 주시면 감사하겠습니다. 감사합니다

답변

1

사용자가 첫 번째 시트에 정보를 입력하면 Visual Basic 코드를 트리거하는 것처럼 보일 것입니다 (첫 번째 시트 및 해당 코드 명; Sheet1이라고 부름). 따라서 당신은 이달 말이면

Private Sub Worksheet_Change(byval target as range) 

Dim SelDate as Date 

If VBA.IsDate(Cells(target.Row,target.Column)) Then 
SelDate=Cells(target.Row, target.Column) 

'Assume other range is on sheet with the codename Sheet2, starting at top of page in first column 

LookRow = 1 

    Do Until (Sheet2.Cells(LookRow, 1) >= SelDate and Sheet2.Cells(LookRow, 3) = "BD" and Sheet2.Cells(LookRow, 4) = "HD" and Sheet2.Cells(LookRow,5) = "N") or Sheet2.Cells(LookRow, 1) = "" 
    LookRow = LookRow + 1 
    Loop 

    If Cells(LookRow, 1) <> "" Then 
    Cells(target.Row, "OutputCol") = Sheet2.Cells(LookRow, 1) 
    End If 
End If 

End Sub 

이 코드는 실제로까지 일을 날짜를 범프 ... Visual Basic 편집기 따라서

사용할 수에 Sheet1의 내에서 서브 루틴을 작성해야 귀하의 질문에 명시되지 않은 일로 인해 업무 일이 아닌 날이 만료되는 경우 어떤 일이 발생하는지 명시하지 않았습니다. 당신은 IF 진술에 대처할 수 있다고 말했어 그래서 나는 그 세부 사항에 너무 관심이 없다. 날짜와 날짜를 동시에 낮추려면 SelDate를 찾기 위해 별도의 루프가 필요하고

"OutputCol"은 출력을 첫 번째 시트에 놓고 싶을 때 사용합니다. 일반적으로 코드를보다 견고하게 만들기 위해 범위 이름을 참조하여 열을 정의하는 것이 좋습니다. Expert help with that can be found here. 또한 오류 처리를 사용합니다.

한 번에 하나의 날짜 만 찾습니다. 여러 날짜를 시트에 붙여 넣으면 범위의 왼쪽 상단 셀에서만 작동합니다. Worksheet_Change 이벤트에 정의 된 "Target"은 전체 선택을 포함하므로 target.Count> 1 일 때 전체 열을 다시 처리하거나 target.Rows.Count를 사용하여 루프 할 행 수를 표시 할 수 있습니다

관련 문제