2013-09-04 4 views
1

시작하려면 멍청한 놈입니다. 어제 처음으로 VBA를 문자 그대로 보았습니다. 그래서 당신이 당신의 답장을 멍청히한다면 고맙습니다. 롤.VBA 복수 행 대응 셀을 작성하는 방법 Excel의 문 Excel

일주일에 몇 번씩 직장에서 스프레드 시트를 받았습니다. 우편 번호를 나눠서 거기에있는 관점 저장소로 옮겨야합니다. 약 20 개의 우편 번호가 있습니다. 정렬 옵션을 사용하더라도 여전히 잠시 걸립니다. 마르코를 사용하여 각 지퍼 코드에 매장을 제공하고 싶습니다.

여기가 내 문제입니다. 나는 "우편 번호가"M1 "으로 쓰여지는"Bullhead "를 원한다면"J1 "을 보려고합니다.

나는 몇 시간의 시행 착오를 겪었습니다. 최상의 결과를 내놓으십시오. 나는 다른 것들을 많이 시도했다. (맨 아래에 내가 생각해 낸 것입니다)

여기에 문제가 있습니다. 이 모든 것을 스프레드 시트 아래로 내려야합니다. 즉. if m3 = 86409 J3 = Kingman. if m4 = 86409 j4 = Kingman. M5000, J5000까지 계속.

도움을 주시면 감사하겠습니다. 제가하고 싶은 일은 간단하지만 대답을 스스로 찾을 수 없거나 이해할 수 없었습니다. 나는 다시 시작해야한다고 생각합니다. 그리고 다른 접근법을 택하십시오. 그래도 무슨 생각하는지.

Sub MoversBirthdays() 
    Dim zipcode As Long, Store As String 
    zipcode = Range("J2").Value 
    If zipcode = "86426" Or "86427" Or "86429" Or "86430" Or "86435" Or "86436" Or "86437" Or "86438" Or "86439" Or "86440" Or "86442" Or "86446" Or "89028" Or "89029" Or "89046" Or "92304" Or "92332" Or "92363" Then Store = "Bullhead" Else: Store = "Kingman" 
    If zipcode = "" Then Store = "" 
    Range("M2").Value = Store 
End Sub 

답변

1
Sub MoversBirthdays() 

    Dim varZip As Variant 
    Dim arrStore() As String 
    Dim StoreIndex As Long 

    With Range("J2", Cells(Rows.Count, "J").End(xlUp)) 
     If .Row < 2 Then Exit Sub 'No data 
     ReDim arrStore(1 To .Rows.Count) 
     For Each varZip In .Value 
      StoreIndex = StoreIndex + 1 
      Select Case varZip 
       Case 86426 To 86427, 86429 To 86430, 86435 To 86440, 86442, 86446, 89028 To 89029, 89046, 92304, 92332, 92363 
        arrStore(StoreIndex) = "Bullhead" 
       Case "" 
        arrStore(StoreIndex) = "" 
       Case Else 
        arrStore(StoreIndex) = "Kingman" 
      End Select 
     Next varZip 
    End With 

    If StoreIndex > 0 Then Range("M2").Resize(StoreIndex).Value = Application.Transpose(arrStore) 

End Sub 
+0

지금 사용해 보겠습니다. 고맙습니다!!!!!!!!!!! – Daniel

+0

깨달음 나는 우편 번호와 상점 열을 전환했다 (원래 우편 번호는 M 열을보고 J 열에 상점을 출력했다). 나는 그것을 해결하기 위해 내 대답을 편집했다. – tigeravatar

+0

빠른 질문입니다. 우편 번호가있는 셀이 비어 있으면 kingman이 말합니다. 광산에서와 같이 공란을위한 쉬운 방법이 있습니까? 아니면 왕자에게도 List of Zips를 사용하는 것이 나을 것입니다. – Daniel

0

은 당신의 코드에 문제가 몇 가지 있습니다.

우선 zipcodeLong으로 정의하지만 문자열과 비교합니다. String으로 정의되거나 Long과 비교되어야합니다.

둘째, If 값 목록을 사용할 수 없습니다. 그것은 파싱하지만, If zipcode is 86426; Or If 86427; Or If 86429...으로 해석됩니다. 각 우편 번호에 실제로 If zipcode = "xxx"이라고 말하면됩니다.

그러나 Excel을 사용 중이므로 zip 목록을 워크 시트에 넣고 비교를 위해 참조 할 수 있습니다. 목록을 열 A입니다 가정하면, 다음 코드는 당신이 필요로 할 것입니다 : 지퍼가 비어 있으면 실제로 빈과 열 M의 값을 덮어 쓸 필요가없는 경우

Sub MoversBirthdays2() 
    Dim zipcode As String, Store As String 
    Dim c As Range 
    For Each c In Range("j2:j5000") 
     zipcode = c.Value 

     If zipcode = "" Then 
      Store = "" 
     Else 
      If WorksheetFunction.CountIf(Range("a:a"), zipcode) > 0 Then 
       Store = "Bullhead" 
      Else 
       Store = "Kingman" 
      End If 
     End If 
     c.Offset(0, 2) = Store 
    Next 
End Sub 

, 다음 수 좀 더 단순 해져야합니다.

Sub MoversBirthdays2() 
    Dim zipcode As String, Store As String 
    Dim c As Range 
    For Each c In Range("j2:j5000") 
     zipcode = c.Value 

     If zipcode <> "" Then 
      If WorksheetFunction.CountIf(Range("a:a"), zipcode) > 0 Then 
       Store = "Bullhead" 
      Else 
       Store = "Kingman" 
      End If 
      c.Offset(0, 2) = Store 
     End If 
    Next 
End Sub 
+0

Ty에 대한 응답입니다. 여기서 가장 큰 문제는 새로운 워크 시트를 얻을 때마다 지퍼를 삽입해야한다는 것입니다. 타이거즈 대답은 대부분 내가 필요한 것입니다. 하지만 당신의 다른 접근 방식에 크게 감사드립니다. – Daniel