엑셀 주문에서 매출 빼기

엑셀 주문에서 매출 빼기

지난 몇 시간 동안 제가 겪고 있는 문제와 비슷한 것을 찾으려고 노력했는데 현재 귀에서 연기가 나오고 있습니다!

시트가 두 개 있는데 하나는명령두 번째는매상.

자동으로 도움이 필요해요빼기~에서명령기반으로매상.

나는 모든 판매를 통해 실행되는 스크립트를 개발하려고 노력 중입니다.위치그리고안건정확히 동일하면 주문 수량에서 판매 수량을 빼서 "새 만기" 수량을 제공합니다.

문제가 되지 않는 주문 없이 판매가 발생하지만 해당 결과가 다른 탭으로 이동할 수 있다면 좋을 것입니다. 다음은 n00b 용어로 요구되는 내용을 요약한 것입니다.

Sheet1~이다판매된, Sheet2이다주문하다.

만약에Sheet1 C2&F2Sheet2( 의 모든 행과 동일합니다 .A2,D2상관 필드임) 빼기Sheet1 G2, 에서Sheet2 F2.

여기에서 볼 수 있는 예시를 추가했습니다.여러 조건이 충족되면 빼기 https://app.box.com/s/2m8nfjo8lieh5mfb9wgspy73f1bvzp0e

결과 탭에서 노란색으로 강조 표시된 모든 내용은 변경되었을 것입니다. 노란색으로 강조표시되지 않은 품목은 판매되지 않은 품목입니다. 녹색과 빨간색 형식은 참조용이므로 어려운 경우에는 필요하지 않습니다. (이상적일 것임) 열 H는 이것이 가능하다면 주문 수량이 0에 도달하면 스크립트가 동일한 기준으로 다음 주문에 대한 시트를 계속 검색하고 남은 수량을 빼는 것을 보여줍니다. 무엇이든 도움이 될 것입니다. 현재 주말 동안 수동으로 이 작업을 수행하고 있으며 일반적으로 주당 150개 이상의 판매가 이루어지며 매우 시간이 많이 걸립니다.

간단히 말해서 스크립트를 통해 각 판매 행을 살펴보고 공장과 부품 번호가 동일한 경우 주문 시트에서 수량을 빼려고 합니다. 주문 시트를 언제 정렬하는지에 따라 정렬하여 올바른 순서에서 제거하겠습니다.

어떤 도움을 주셔서 감사합니다!

답변1

VBA가 필요하지 않다고 생각합니다.

SUMIFS()를 보세요.

우리 조직의 역방향 프록시가 app.box에 대한 액세스를 허용하지 않기 때문에 귀하의 스크린샷을 볼 수는 없지만 다음과 같이 가정합니다.

  • Sheet1의 "C" 열에는 위치가 포함되어 있습니다.
  • Sheet1의 "F" 열에는 항목이 포함되어 있습니다.
  • Sheet1의 "G" 열에는 판매된 수량이 포함됩니다.
  • Sheet2의 "A" 열에는 위치가 포함되어 있습니다.
  • Sheet2의 "D" 열에는 항목이 포함되어 있습니다.
  • Sheet2의 "G" 열에는 주문된 수량이 포함되어 있습니다.
  • Sheet2의 "H" 열에 미결제 수량이 포함되어 있습니다.

시트2에서 2행에 나열된 품목 및 위치에 대한 총 판매 수량은 다음과 같습니다.

=IF(OR(A2="",D2=""),0,SUMIFS(Sheet1!G:G,Sheet1!C:C,A2,Sheet1:F:F,D2))

따라서 Sheet2!H2에 사용되는 공식은 단순히 주문 수량에서 이를 빼는 것입니다.

=G2-IF(OR(A2="",D2=""),0,SUMIFS(Sheet1!G:G,Sheet1!C:C,A2,Sheet1:F:F,D2))

단, 주문이 완료되고 동일한 위치 및 항목에 대한 후속 주문이 최소한 부분적으로 완료된 경우 판매된 총계는 2행의 주문보다 클 수 있으며 주문됨 - 판매됨은 0보다 작습니다! 그러나 그것은 방어하기 쉬운 일입니다 ...

=MAX(0,G2-IF(OR(A2="",D2=""),0,SUMIFS(Sheet1!G:G,Sheet1!C:C,A2,Sheet1:F:F,D2)))

그러나 이는 현재 라인 위의 주문을 고려하지 않습니다! MIN(0, + ThisOrderQuantity- LocationItemQtySold)이 있어야 하는데 MIN(0, - )이 있습니다. Sheet2의 현재 행 위에 있는 모든 주문의 합계는 다음과 같습니다.ThisOrderQuantityPreviouslyOrderedQuantitiesLocationItemQtySold

=OFFSET(G2,0,0,ROW()-2, 1)

... 음... 그것은 2행에서 중단될 것입니다. 우리는 첫 번째 행을 포함하여 모든 행에서 작동하는 것을 원합니다. 그럼 2열에서 우리 자신을 보호하자.

=IF(ROW()<3,0,OFFSET(G2,0,0,ROW()-2, 1))

하지만 동일한 위치와 품목에 대해 이전 주문만 원할 경우 이는 모두 이전 주문입니다. 또 다른 SUMIFS()가 필요합니다. Sheet2 행 10의 경우 이는 다음과 같습니다.

=IF(ROW()<3,0,SUMIFS(OFFSET(G2,0,0,ROW()-2, 1),OFFSET(A:A,0,0,ROW()-2,1),A10,OFFSET(D:D,0,0,ROW()-2,1),D10))

좋아요, 이제 그것들을 결합할 수 있습니다. H2의 경우 열을 통해 아래로 드래그할 수 있으면 공식은 다음과 같습니다.

=MAX(0,G2+IF(OR(A2="",D2=""),0,IF(ROW()<3,0,SUMIFS(OFFSET(G2,0,0,ROW()-2, 1),OFFSET(A:A,0,0,ROW()-2,1),A2,OFFSET(D:D,0,0,ROW()-2,1),D2))-SUMIFS(Sheet1!G:G,Sheet1!C:C,A2,Sheet1:F:F,D2)))

단, 위치/항목에 대해 3개의 주문이 있고 첫 번째 주문만 체결된 경우 세 번째 주문의 "만기" 수량은 해당 주문에 두 번째 주문 수량을 더한 금액이 됩니다! 이전의 모든 주문이 아직 완전히 채워지지 않은 경우에도 "마감" 수량을 망치지 않는지 확인해야 합니다. 따라서 예정 금액이 주문 금액보다 크지 않도록 MAX 기능을 추가해야 합니다.

=MIN(G2,MIN(0,G2+IF(OR(A2="",D2=""),0,IF(ROW()<3,0,SUMIFS(OFFSET(G2,0,0,ROW()-2, 1),OFFSET(A:A,0,0,ROW()-2,1),A2,OFFSET(D:D,0,0,ROW()-2,1),D2))-SUMIFS(Sheet1!G:G,Sheet1!C:C,A2,Sheet1:F:F,D2))))

그것을 H2에 붙여넣고, 그 수식을 H의 나머지 부분으로 드래그하고, 내가 한 일을 디버깅하면(스포일러, 아직 하지 않았기 때문입니다), 그러면 끝입니다! VBA가 필요하지 않습니다.

(경고: 주문 없이 판매가 '발행되지 않음'이라고 말씀하셨습니다. 이러한 경우에 해당 사항을 고려하시기 바랍니다.나중에주문이 있으면 해당 주문이 즉시 채워집니다!)

2017년 2월 3일 업데이트: MIN 및 MAX 관련 문제가 해결되었습니다. MAX와 MIN이어야 합니다.

관련 정보