2012-01-10 3 views
0

누군가가 다음과 같은 코드를 제공 할 수 있습니까? "C"의 값이 비어 있으면 "B"로 표시됩니다 (C 및 D의 빈 값이 아닌 경우). "B"가 공백이면 "A"를 찾습니다 (B 및 D의 빈 사본 값이 아닌 경우). "A"가 비어 있으면 다음으로 넘어갑니다 (A 및 D의 빈 복사 값이 아니라면).데이터 이동 붙여 넣기

페이지 맨 아래부터 시작하여 위로 이동하려면 스크립트가 필요합니다. 논리가 행을 실행 한 예를 들어, 행 9과 끝에서 시작 1.

과 같아야 아래의 데이터를 사용하여 최종 결과 : 이동하는 것이 필수적입니다 이유

END RESULT 
color  12 
primary 35 
blue  1 
shape  685 
rounded 1 
oval  25 
size  21 
big  56 
giant  10 


DATA: 
    A  B  C  D 
1 size big  giant 10 
2 size big    56 
3 size     21 
4 shape rounded oval 25 
5 shape rounded   1 
6 shape     685 
7 color primary blue 1 
8 color primary   35 
9 color     12 
+0

샘플 데이터를 편집하고 A가 비어있는 경우가 하나 이상 포함되어야하는 결과가 더 명확한 경우 질문이 더 명확 해집니다. –

+0

새 질문을 시작하기 전에 피드백을 제공하고 마지막 질문을 해결 표시하는 것은 어떻습니까? – Reafidy

답변

1

내가 이해가 안 돼요 행들 사이에 관계가 없기 때문입니다.

E1에 다음 수식을 복사하고 아래로 복사하면 원하는 값을 얻을 수 있습니다.

=IF(C1="",IF(B1="",A1,B1),C1) 

이것은 역순으로 나열된 것이므로 필요한 결과를 나열하는 방법과 다릅니다. 정렬을 원하십니까 아니면 계산 순서를 보여 주시겠습니까?

추가 정보에 응답에서 추가 섹션 F 열, 현재 F9의 바닥 유형

이동합니다

=ROW(F$9)-ROW(F9) 

복사 열이 당신에게 번호를 제공하기까지이 공식 0 최대 이제 F 열을 기준으로 오름차순 또는 내림차순으로 정렬 할 수 있습니다.

나는 Siddharth Rout를 남겨두고 이것에 해당하는 VBA를 제공 할 것입니다. 그런데 Siddharth는 두 개의 추가 열을 만들었으므로 결과는 열 순서대로 표시됩니다. 나는 이것이 좋은 추가라고 생각했다. 수식 접근법을 선호하는 경우 수식을 사용하여 동일하게 수행 할 수 있습니다.

+0

Color가 Blue보다 위에있는 Primary 위에 있어야하기 때문에 역순으로 시퀀싱해야합니다. – rjk

0

Tony는 이미 원하는 것을 달성하는 가장 쉬운 방법을 제공하지만, 여전히 정확한 결과를 제공하는 코드를 원할 경우이 방법을 사용해보십시오. 출력 결과는 다음과 같습니다. G

Option Explicit 

Sub Sample() 
    Dim LastRow As Long, Rw As Long, i As Long 

    LastRow = Range("D" & Rows.Count).End(xlUp).Row 
    Rw = 1 

    For i = LastRow To 1 Step -1 
     If Len(Trim(Range("C" & i).Value)) = 0 Then 
      If Len(Trim(Range("B" & i).Value)) = 0 Then 
       If Len(Trim(Range("A" & i).Value)) <> 0 Then 
        Range("F" & Rw).Value = Range("A" & i).Value 
        Range("G" & Rw).Value = Range("D" & i).Value 
       End If 
      Else 
       Range("F" & Rw).Value = Range("B" & i).Value 
       Range("G" & Rw).Value = Range("D" & i).Value 
      End If 
     Else 
      Range("F" & Rw).Value = Range("C" & i).Value 
      Range("G" & Rw).Value = Range("D" & i).Value 
     End If 

     Rw = Rw + 1 
    Next i 
End Sub