2012-03-29 4 views
2

몇 가지 도움을 받아, 모든 데이터를 "텍스트"형식에서 "숫자"형식으로 변환하기 위해 조화롭게 작동하는 두 가지 기능을 조합했습니다. 그 다음에는 각 열을 고정 된 수의 문자로 설정합니다.엑셀 : VBA 매크로의 행/열 생략하기

내가 사용하고있는 두 가지 서브 루틴은 아래에 나열되어 있지만 각 함수의 특정 행/열을 생략하는 방법을 알 수는 없습니다.

psAdd 함수를 실행할 때 범위에서 처음 세 행을 생략하고 FormatFixedNumber 함수에 대해 여러 열을 생략하고 싶습니다. 후자에 대한 문제는 내가 1000+ 칼럼의 데이터와 칼럼이 변환되어야 하는지를 나타내는 1 또는 0을 포함하는 키 헤더 행을 가지고 있다는 것이다.

어떻게이 코드를 수정하여 첫 번째 하위에서 첫 번째 3 개 행을 건너 뛰고 두 번째 열에서 0으로 표시된 여러 개의 열을 건너 뛸 수 있습니까?

Sub psAdd() 
    Dim x As Range 'Just a blank cell for variable 
    Dim z As Range 'Selection to work with 

    Set z = Cells 
    Set x = Range("A65536").End(xlUp).Offset(1) 
    If x <> "" Then 
     Exit Sub 
    Else 
     x.Copy 
     z.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd 
     Application.CutCopyMode = False 'Kill copy mode 
    End If 
    x.ClearContents 'Back to normal 
End Sub 

Sub FormatFixedNumber() 

    Dim i As Long 

    Application.ScreenUpdating = False 
    For i = 1 To lastCol 'replace 10 by the index of the last column of your spreadsheet 
     With Columns(i) 
      .NumberFormat = String(.Cells(2, 1), "0") 'number length is in second row 
     End With 
    Next i 
    Application.ScreenUpdating = True 
End Sub 

답변

3

1. z와 시트에있는 모든 세포에서 작업하는 순간 첫 번째 코드

. z 3 행

  • 그렇다면를 초과하는 경우

  • 테스트 (redunant 세포를 피하기 위해)를 사용하기 전에 업데이트 할 UsedRange 강제

    • 에 의해 처음 세 행을 무시 - 당신은 UsedRange이를 줄일 수 있습니다 세 개의 행으로 zOffsetResize

      Sub psAdd() 
      Dim x As Range 'Just a blank cell for variable 
      Dim z As Range 'Selection to work with 
      ActiveSheet.UsedRange 
      Set z = ActiveSheet.UsedRange 
      If z.Rows.Count > 3 Then 
          Set z = z.Cells(1).Offset(3, 0).Resize(z.Rows.Count - 3, z.Columns.Count) 
      End If 
      'using Rows is better than hard-coding 65536 (bottom of xl03 - but not xl07-10) 
      Set x = Cells(Rows.Count,"A").End(xlUp).Offset(1) 
      If x <> "" Then 
          Exit Sub 
      Else 
          x.Copy 
          z.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd 
          Application.CutCopyMode = False 'Kill copy mode 
      End If 
      x.ClearContents 'Back to normal 
      End Sub 
      
    를 사용하여 크기를 조정 17,451,515,

    2 번째 코드

    실행은 I가 이해하면 헤더 셀

    Sub FormatFixedNumber() 
        Dim i As Long 
        Application.ScreenUpdating = False 
        For i = 1 To lastCol 'replace 10 by the index of the last column of your spreadsheet 
         If Cells(1, i) <> 0 Then 
          With Columns(i) 
           .NumberFormat = String(.Cells(2, 1), "0") 'number length is in second row 
          End With 
         End If 
        Next i 
        Application.ScreenUpdating = True 
    End Sub 
    
  • +1

    다음 행 1이라고 가정 같지 0. 않는 경우 각 헤더 셀에 대한 간단한 테스트는 진행 두 번째 코드 od 코드에 대해 정확하게 질문하면 0은 2 행에 있으므로 'If Cells (2, i) <> 0 Then Then'이됩니다. – assylias

    +0

    또한 첫 번째 코드 조각처럼 처음 몇 개의 머리글 행을 생략하는 두 번째 코드 조각이 필요합니다. – toolshed