2016-12-10 6 views
1

マイコードは、選択したセルに対してのみ機能します。私もそれは行が追加された場合は作業を継続するために取得しようとしています列内のすべてのセルに関数を適用する

Sub Splitter() 

Dim i As Integer 
Dim Text As String 
Dim Item As Variant 

Text = ActiveCell.Select 
Item = Split(ActiveCell, "-") 

For i = 0 To UBound(Item) 
    Cells(3, i + 2).Value = Item(i) 
Next i 

If Range("B3").Value = "CHOP" Then 
    Range("D3").Value = "chopsticks" 
ElseIf Range("B3").Value = "NAPK" Then 
    Range("D3").Value = "napkins" 
ElseIf Range("B3").Value = "RICE" Then 
    Range("D3").Value = "white rice" 
ElseIf Range("B3").Value = "SOYS" Then 
    Range("D3").Value = "soy sauce" 
ElseIf IsEmpty(Range("D3").Value) = True Then 
    Range("D3").Value = "other" 
End If 

End Sub 

:私は

はここで、これまで私のコードである、それはA列のすべてのセルのために仕事をしたいです。

+0

? 「ABCD-xxx」のようなものか、あるいは「ABCD-xxx-xxx-xxx」があることがありますか? (複数のハイフンがある場合は、列Aの元のセルの3番目の「部分」または「その他」の列Dに入れたいものに影響します。 – YowE3K

+0

あなたのコードは「選択」のために叫んでいますCase Range( "B3")。Value'、次に 'Case" CHOP "'など。 –

+0

私のデータにはABCD-xxxxだけがあります。だから私は適切な機能を行う方法を考え出しましたが、選択したセルにしか適用できず、行全体をどのように適用するかわかりません –

答えて

0

次のコードは、列Aのすべての行を3行目から最後の行までのデータでループします。

の代わりにSelect Case .Range("B" & LRow).Valueを使用しています。

あなたの最後のElseIf IsEmpty(Range("D3").Value) = True Thenはタイプエラーで、あなたはElseIf IsEmpty(Range("B3").Value) = True Thenだったとします。

コードあなたが列Aに持っていないデータのどのような

Option Explicit 

Sub Splitter() 

Dim i As Integer 
Dim Text As String 
Dim Item As Variant 
Dim LastRow As Long 
Dim LRow As Long 

' modify "sheet1" to your sheet's name 
With Sheets("Sheet1") 

    ' find last row in Column A 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 

    For LRow = 3 To LastRow 

     Item = Split(.Range("A" & LRow), "-")    
     For i = 0 To UBound(Item) 
      .Cells(LRow, i + 2).Value = Item(i) 
     Next i 

     Select Case .Range("B" & LRow).Value 
      Case "CHOP" 
       .Range("D" & LRow).Value = "chopsticks" 

      Case "NAPK" 
       .Range("D" & LRow).Value = "napkins" 

      Case "RICE" 
       .Range("D" & LRow).Value = "white rice" 

      Case "SOYS" 
       .Range("D" & LRow).Value = "soy sauce" 

      Case "CHOP" 
       .Range("D" & LRow).Value = "chopsticks" 

      Case Else 
       .Range("D3").Value = "other" 

     End Select 

    Next LRow   
End With 

End Sub 
+0

これはかなり完璧です!列BがCHOP、NAPK、SOYS、RICE以外のものであれば、それは「その他」である必要があるだけです。私はもともと、それらのものでなければ空であろうから、空でないものを置く。 –

+0

@TravisWilliamCarter編集したコードを試してみてください。それが意味するものは –

+0

$です!あなたは巨大なヘルプです! –

関連する問題