2016-11-07 11 views
0

これをVBAでどのように記述できますか?私はそれが多くの基準であることを知っていますが、私は徹底しようとしました。列( "A")の場合のVBAセル(i)。値が "x"で始まり、列( "G")で始まるセル(i).value = "String"

IF Cell.Value in Column "Job Number" (column "A") begins with (11*,12*,13*,14*) THEN cell.value in Column "TEAME NAME" (column "G").ROW(i) = "AIRFRAME" 

IF Cell.Value in Column "Job Number" (column "A") begins with "35W" THEN cell.value in Column "TEAME NAME" (column "G").ROW(i) = "WIRING" 

IF Cell.Value in Column "Job Number" (column "A") begins with "34S" THEN cell.value in Column "TEAME NAME" (column "G").ROW(i) = "SOFTWARE" 

IF Cell.Value in Column "Job Number" (column "A") begins with "32EB" OR "35EB" THEN cell.value in Column "TEAME NAME" (column "G").ROW(i) = "AVIONICS" 

IF Cell.Value in Column "Job Number" (column "A") begins with "32EF" OR "35EF" BUT <> Cell.Value in Column "TEAM #" (column "H") = "Q3S251" THEN cell.value in Column "TEAME NAME" (column "G").ROW(i) = "AVIONICS" 

IF Cell.Value in Column "Job Number" (column "A") begins with "23X" BUT <> Cell.Value in Column "TEAM #" (column "H") = "Q3S251" THEN cell.value in Column "TEAME NAME" (column "G").ROW(i) = "UTILITIES & SUBSYSTEMS" 

IF Cell.Value in Column "TEAM #" (column "H") = "Q3S251" THEN cell.value in Column "TEAME NAME" (column "G").ROW(i) = "FUNCTIONAL TEST" 

IF Cell.Value in Column "TEAME NAME" (column "G").ROW(i) = "PROPULSION" THEN Cell.Value = "UTILITIES" 
+1

第1声明、第2、第3などが何かをしたら、それとも第1または第2または第3が何かをするなら、それはすべきでしょうか? 'case statements'を見てください。 – Niclas

+0

これらはすべて独立した条件です。 – Adavid02

+0

なぜGBAとHに適切な公式を入れるのではなく、VBAで書いているのですか?それはExcelの自然な働き方ですか? –

答えて

0
Sub ScrubSheets() 

Dim lastRow As Long 
Dim myRow As Long 

Application.ScreenUpdating = False 

' Find last row in column A 
lastRow = Cells(Rows.Count, "A").End(xlUp).Row 

' Loop for all cells in column A from rows 2 to last row 
For myRow = 2 To lastRow 
'  First check value of column G 
    If Cells(myRow, "G") = "PROPULSION" Then 
     Cells(myRow, "G") = "UTILITIES" 
    Else 
'   Then check column H 
     If Cells(myRow, "H") = "Q3S2531" Then 
      Cells(myRow, "G") = "FUNCTIONAL TEST" 
     Else 
'    Check four character prefixes 
      Select Case Left(Cells(myRow, "A"), 4) 
       Case "32EB", "35EB", "32EF", "35EF" 
        Cells(myRow, "G") = "AVIONICS" 
       Case Else 
'      Check 3 character prefixes 
        Select Case Left(Cells(myRow, "A"), 3) 
         Case "35W" 
          Cells(myRow, "G") = "WIRING" 
         Case "34S" 
          Cells(myRow, "G") = "SOFTWARE" 

         Case Else 
'        Check 2 character prefixes 
          Select Case Left(Cells(myRow, "A"), 2) 
           Case "11", "12", "13", "14" 
            Cells(myRow, "G") = "AIRFRAME" 
          Case "23" 
            Cells(myRow, "G") = "UTILITIES" & " & " & "SUBSYSTEMS" 
          End Select 
        End Select 
      End Select 
     End If 
    End If 
Next myRow 

Application.ScreenUpdating = True 

' Message that macro is complete 
    MsgBox "Macro complete!", vbOKOnly 

End Sub 
+0

legitと思われますが、2の代わりに1つのselect caseを使うことができます。可読性が向上します。 – Vityata

0

かなり多く、これはあなたが開始することができ、コード、次のとおりです。

Option Explicit 

Public Sub TestMe() 

    Dim my_cell As Range 

    Set my_cell = ActiveSheet.Cells(1, 1) 

    Select Case True 

     Case Left(my_cell, 3) = 11 Or Left(my_cell, 2) = 12: 
      my_cell.Offset(0, 5) = "new value 11" 
     Case Left(my_cell, 3) = "34S": 
      my_cell.Offset(0, 5) = "new value 34S" 
     Case Else: 
      my_cell.Offset(0, 5) = "case else" 
    End Select 

End Sub 

次のステップとしては、道あなたをあなたは正しくmy_cellを設定していることを確認し、条件と結果を作りますそれらを欲しい。楽しい! :)

+0

my_cellは 'lastRow = Range(" A "&Rows.Count).End(xlUp).Row my_cell = ActiveSheet.Cells(lastRow、1)'の範囲になります。 – Adavid02

+0

ええ、私のセルは範囲です。 – Vityata

関連する問題