2013-08-08 2 views
0

기존 목록 (Col B)에 값을 추가하는 매크로 (VBA/작성 코드 신규)를 작성하려고합니다. 값은 InputBox에 의해 정의 된 다음 사전 순으로 목록에 추가됩니다. 매크로를 작동시킬 수 있지만 전체 행 대신 범위에 셀을 추가하고 싶습니다.열 범위에만 셀 추가

내 스프레드 시트에는 열 A부터 K까지의 데이터가 있습니다.이 열은 '행'을 삽입하려는 영역입니다. 그러나 캐치가 있습니다. 열을 추가하지 않으려는 열 L에서 AF까지 다른 데이터 집합이 있습니다. 이것은 내가 완전한 행을 삽입 할 수 있기 때문에 내가 실패한 곳입니다.

이 방법이 있습니까? 삽입 할 위치를 선택하지 못하게하는 새로운 값의 위치 (알파벳순)에 따라 삽입이 수행되어야하는 것처럼 보이는 모든 메서드에서 실행되지 않았습니다. 나는 코드를보기 위해 매크로 기록을 시도했으나 그 값에 의해 정의 된 선택 때문에 그 입력을 조작 할 수 없었다.

여기 제가 지금까지 가지고있는 코드는 ... 제가 아직 배우고있는 것처럼 조금 clunky 수 있습니다.

Sub Add_Project() 
Dim NewProject As String, iRow As Long, ProjRng As Range, RowRng As Range 
'The ProjRng MUST represent the project column! 
    Set ProjRng = Range("B:B") 
'Defines the range of columns to add a row to 
    Set RowRng = Range("B:K") 
'Create message box for user input on project name 
    NewProject = InputBox("Enter Project Name") 
    If NewProject = "" Then Exit Sub 
'Determines if the New Project name already exists 
    iRow = Application.WorksheetFunction.Match(NewProject, ProjRng) 
    If Cells(ProjRng.row + iRow - 1, ProjRng.Column) = NewProject Then 
     MsgBox ("Project already exists") 
Exit Sub 
    End If 
'Inserts a new row with containing the new Project name 
    With Cells(ProjRng.row + iRow, ProjRng.Column) 
     .EntireRow.Insert 
     .Offset(-1, 0).Value = NewProject 
    End With 
Exit Sub 
End Sub 

매크로가 내가 지시 한대로하고 있다는 것을 알고 있습니다. 나는 칼럼 A : K의 범위에만 추가하는 것과 함께 "EntireRow"를 추가하는 섹션을 조작하고 싶습니다. 내가 제안 할 수있는 곳에 대한 제안이나 조언은 많은 도움이 될 것입니다. 감사합니다.

답변

1
Sub Add_Project() 

    Dim strNewProject As String 
    Dim iRow As Long 

    strNewProject = InputBox("Enter Project Name") 
    If Len(strNewProject) = 0 Then Exit Sub 'Pressed cancel 

    If WorksheetFunction.CountIf(Columns("B"), strNewProject) > 0 Then 
     MsgBox "Project already exists" 
     Exit Sub 
    End If 

    iRow = WorksheetFunction.Match(strNewProject, Columns("B")) + 1 
    Intersect(Range("A:K"), Rows(iRow)).Insert xlShiftDown 
    Cells(iRow, "B").Value = strNewProject 

End Sub 
+0

tigeravatar - 많은 도움을 주셔서 감사합니다 !! 코드가 완벽하게 작동합니다. 코드를 간소화하여 불필요한 많은 선을 제거 할 수 있었던 점에 감사드립니다. 나는 VBA의 세계에 계속 적응하면서이 권고를 배우기 위해 이것을 자세히 공부할 것입니다. – Lazyeye

+0

하나의 명확한 질문입니다. If/CountIf 함수와 Match를 비교하는 데 장단점이 있습니까? 나는 당신의 방법을 좋아하고 이것이 호감가는 것인가 아니면 좋은 코딩인지를 알고 싶어한다. 고마워! – Lazyeye

+0

저는 Match보다 오류 발생이 훨씬 적기 때문에 Countif를 선호합니다. 그래서 뭔가 존재하는지 여부를 테스트하는 좋은 방법이라고 생각합니다. Match는 무언가가 어디에 있는지 알아야 할 때 유용합니다. 정확한 일치는 매우 오류가 발생하기 쉽기 때문에 피하려고합니다. 목록에서 어디로 가는지 알 필요가있는 곳과 같은 것이 좋을 것입니다. – tigeravatar