2012-07-06 2 views
0

나는 아래 그림 참조한다 : 내가 바로의 두 개의 컬럼으로 FirstValue 열을 분할하고자 enter image description hereExcel : 세 번째, 홀수/짝수 매개 변수 열을 기반으로 열을 두 개의 열로 나누는 방법?

을; 그러나 필자는 매개 변수 열을 기반으로 열을 분할하려고합니다. 매개 변수 값이 홀수 일 경우 OtherValue1 열에 만 값을 복사하려고합니다. 매개 변수 값이 짝수이면 OtherValue2 열에 만 값을 복사하려고합니다. 포럼을 읽고 엑셀의 "Text to Columns"기능을 사용해 본 결과 해결책을 찾지 못했습니다.

VBA를 사용하여 구현하는 방법이 있습니까?

* 참고 : 워크 시트의 길이는 실제로는 약 10,000 행이므로 속도가 또한 도움이됩니다.

편집 : 여기는 제가 지금까지 가지고있는 코드입니다. 동일한 형식을 가정 데이터

의 끝으로 D2에 =IF(MOD(E2,2)=1,B2,"")
, C2에서 .Cells(2, MF1Col).Formula = "=IF(MOD(paraformula,2)=1,WTRfor,"")"

Dim rw As Worksheet 
Dim secondCell, MF1Cell, MF2Cell, paraCell, MF1formula, MF2formula, paraformula, WTRfor As Range 
Dim secondCol As Long, MF1Col As Long, MF2Col As Long, paraCol As Long 
Set rw = ActiveSheet 

With rw 

    Set secondCell = .Rows(1).Find("FirstValue”) 

    ' Check if the column with “FirstValue” is found 

    'Insert Two Columns after FirstValue 
    If Not secondCell Is Nothing Then 
     secondCol = secondCell.Column 
     .Columns(secondCol + 1).EntireColumn.Insert 
     .Columns(secondCol + 2).EntireColumn.Insert 
     .Cells(1, secondCol + 1).Value = "OtherValue1" 
     .Cells(1, secondCol + 2).Value = "OtherValue2" 
     .Activate 

    Set MF1Cell = .Rows(1).Find("OtherValue1") 
    MF1Col = MF1Cell.Column 
    Set MF2Cell = .Rows(1).Find("OtherValue2") 
    MF2Col = MF2Cell.Column 
    Set paraCell = .Rows(1).Find("Parameter") 
    paraCol = paraCell.Column 

    Set paraformula = Range(.Cells(2, paraCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)) 
    Set MF1formula = Range(.Cells(2, MF1Col).Address(RowAbsolute:=False, ColumnAbsolute:=False)) 
    Set WTRfor = Range(.Cells(2, secondCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)) 
    .Cells(2, MF1Col).Formula = "=IF(MOD(" & paraformula & ",2)=1," & WTRfor & ","""")" 
    Range(.Cells(2, MF1Col).Address).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    ActiveSheet.Paste 

    Set MF2formula = Range(.Cells(2, MF2Col).Address(RowAbsolute:=False, ColumnAbsolute:=False)) 
    .Cells(2, MF2Col).Formula = "=IF(MOD(" & paraformula & ",2)=0," & WTRfor & ","""")" 
    Range(.Cells(2, MF2Col).Address).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    ActiveSheet.Paste 

End If 
End With 
+0

을 매개 변수 열에서 소수점이 존재하지 않습니다. VBA에서 큰 따옴표를 얻는 정수는 – Jonny

+0

이며, 그 중 4 개가 필요하므로', "")'가됩니다. – SeanC

+0

@SeanCheshire, 이제 OtherValue 열에 나타나는 것은 # 이름? 수식에는 인식 할 수없는 텍스트가 포함되어 있습니다. "정확한 텍스트 만 넣고 주소는 참조하지 않습니다. – Jonny

답변

3

=IF(MOD(E2,2)=0,B2,"")

사본이를 : 나는이 코드 줄에서 개체 오류를 얻고있다 (데이터, Col1, Col2, 매개 변수), 상대 주소 지정 사용
열 1 : =IF(MOD(OFFSET(C2,0,2),2)=1,OFFSET(C2,0,-1),"")C2를 현재 셀로 바꾸기열 2 : =IF(MOD(OFFSET(D2,0,1),2)=0,OFFSET(D2,0,-2),"")복사 및 붙여 넣기,

다시 현재 셀과 D2 교체 - 당신이 올바른 첫 번째가되면, 엑셀 셀 D2를 들어 현재 셀

+0

만약 그들이있는 열 행 일관성이 없습니다. 셀 필드 (예 : E2, B2가 아닌) 대신 열 머리글로 검색하도록 업데이트 할 수 있습니까? – Jonny

+0

확인 편집 - 셀 주변을 둘러 보도록 업데이트했습니다. – SeanC

+0

C2 또는 D2를 전혀 포함하지 않도록 확장 할 수 있습니까? 이'Rows (1) .Find ("OtherValue1")와'.Cells (1, columnVariable + 2) .Value'와 같은 것은 – Jonny

1

의 수식을 조정합니다 :

=IF(MOD(E2,2),B2,"") 

설명 :범위 E2가 2로 나눌 수없는 경우 B2의 표시 값은 아무것도 표시하지 않습니다.

당신은 셀 C2의 MOD 주위에 'NOT'을 삽입하여이 작업을 취소 할 수 있습니다 :

=IF(NOT(MOD(E2,2)),B2,"") 
+1

수식 교환 - C 열은 홀수, D 열은 – SeanC

+0

숀, 감사합니다 숀, 편집 됨. – danielpiestrak

0

VBA :

Sub odd_even() 

a = 1               ' start row 
b = 10               ' end row 
c = 1               ' column with values inputs 

For d = a To b             ' FOR loop from start row to end row 

    If ActiveSheet.Cells(d, c) Mod 2 Then      'mod becomes high when value is odd 
     ActiveSheet.Cells(d, c + 2) = ActiveSheet.Cells(d, c) 'odd value gets copied to the odd-column (two to the right of the values) 
     ActiveSheet.Cells(d, c + 3) = ""      'same row on even-column gets cleared 
    Else: 
     ActiveSheet.Cells(d, c + 3) = ActiveSheet.Cells(d, c) 'even value gets copied to the even-column (three to the right of the values) 
     ActiveSheet.Cells(d, c + 2) = ""      'same row on odd-column gets cleared 
    End If 

Next d               ' go to next row 

End Sub 
+1

이 질문은 3 개월 전에 요청되었으며 의견을 읽은 경우 이미 답변되었습니다. – user1406062

관련 문제