2017-01-02 7 views
1

これらの領域をこれらの領域に分割して新しい列を作成するためのExcel in Macrosを作成しようとしています。私は実行時エラー13を取得し続けるExcelマクロヘルプ。配列に基づいて新しい列を作成する。

これまでのコードはここにあります。

Sub Region() 

Dim Pacific As Variant 
Pacific = Array("WA", "OR", "ID", "CA", "NV", "AZ", "NM", "HI", "AK") 

Dim Continental As Variant 
Continental = Array("AR", "IA", "CO", "KS", "LA", "MS", "MT", "ND", "NE", "OK", "SD", "UT", "WY") 

Dim SouthEast As Variant 
SouthEast = Array("GA", "AL", "FL", "SC", "KY", "TN") 

Dim Midwest As Variant 
Midwest = Array("MN", "WI", "IL", "IN", "MI", "OH") 

Dim NorthAtlantic As Variant 
NorthAtlantic = Array("ME", "NH", "MA", "RI", "CT", "VT", "NY", "PA", "NJ", "DE", "MD", "WV", "VA", "NC") 

Dim Texas As Variant 
Texas = Array("TX”) 

Dim state As String , result As String 
score = Range("F1").Value 
If state = Pacific Then 
    result = "PACIFIC" 
ElseIf state = Continental Then 
    result = "Continental" 
ElseIf state = SouthEast Then 
    result = "SouthEast" 
ElseIf state = Midwest Then 
    result = "Midwest" 
ElseIf state = NorthAtlantic Then 
    result = "North Atlantic" 
ElseIf state = Texas Then 
    result = "Texas" 
Else 
    result = "fail" 
End If 
Range("Z1").Value = result 
End Sub 

答えて

1

AFAIKは、配列内の文字列の出現を検索するVBA内の単純な問題ではありません。ループを使用するか、おそらくWorksheetFunction.Matchを使用する必要があります。

簡単な方法は、完全に配列を避けるためかもしれ - あなたのコードを簡単にSelect Caseステートメントを使用するためにリファクタリングすることができます

Sub Region() 

    Dim state As String , result As String 
    state = Range("F1").Value 

    Select Case state 
     Case "WA", "OR", "ID", "CA", "NV", "AZ", "NM", "HI", "AK" 
      result = "PACIFIC" 
     Case "AR", "IA", "CO", "KS", "LA", "MS", "MT", "ND", "NE", "OK", "SD", "UT", "WY" 
      result = "Continental" 
     Case "GA", "AL", "FL", "SC", "KY", "TN" 
      result = "SouthEast" 
     Case "MN", "WI", "IL", "IN", "MI", "OH" 
      result = "Midwest" 
     Case "ME", "NH", "MA", "RI", "CT", "VT", "NY", "PA", "NJ", "DE", "MD", "WV", "VA", "NC" 
      result = "North Atlantic" 
     Case "TX" 
      result = "Texas" 
     Case Else 
      result = "fail" 
    End Select 

    Range("Z1").Value = result 
End Sub 

注:また、2つのコードの問題を抱えていました。

  1. あなたは

    score = Range("F1").Value 
    

    を持っていた私は、あなたが

    state = Range("F1").Value 
    
  2. を意味考えるときあなたは"TX”代わりの"TX"を持っていた - 私はがあなたのバージョンで問題を引き起こすかどうかわからないんだけどExcelの、それは私の中で行います。


それが列Fのすべてのセルに適用されるように、この機能を拡張するには、各行をループする必要があります。

Sub Region() 

    Dim state As String , result As String 
    Dim lastRow As Long 
    Dim r As Long 

    With ActiveSheet 
     lastRow = .Cells(.Rows.Count, "F").End(xlUp).Row 
     For r = 1 to lastRow 

      state = .Cells(r, "F").Value 

      Select Case state 
       Case "WA", "OR", "ID", "CA", "NV", "AZ", "NM", "HI", "AK" 
        result = "PACIFIC" 
       Case "AR", "IA", "CO", "KS", "LA", "MS", "MT", "ND", "NE", "OK", "SD", "UT", "WY" 
        result = "Continental" 
       Case "GA", "AL", "FL", "SC", "KY", "TN" 
        result = "SouthEast" 
       Case "MN", "WI", "IL", "IN", "MI", "OH" 
        result = "Midwest" 
       Case "ME", "NH", "MA", "RI", "CT", "VT", "NY", "PA", "NJ", "DE", "MD", "WV", "VA", "NC" 
        result = "North Atlantic" 
       Case "TX" 
        result = "Texas" 
       Case Else 
        result = "fail" 
      End Select 

      .Cells(r, "Z").Value = result 
     Next 
    End With 
End Sub 
+0

ありがとうございました!これはチャームのように機能しました! –

+0

もう少し質問があります。これを列全体に適用するにはどうすればよいですか? –

+0

@TimothyYelverton - ループを示すために答えが更新されました – YowE3K

-1

ドンは、tをあなたが行ったようにテーブルを作成するAccessを使用して、それはなぜアクセスである(私はあなたが書いたコードの一部実用化があると推定)は、作成しようとしている、さらに論理テーブルにリンクなぜエム最初に作成された...

+2

この答えは本当にOPを助けていません。 「アクセスを使用する」というExcelに関する(完全に有効な)質問に答えると、それが実際に作成された理由は本当にあまり役に立ちません。 – MichaelMilom

+0

MichaelMilom LOL ... – Nicolas

関連する問題