2016-11-07 2 views
0

Как это записать в VBA? Я знаю, что много критериев, но я старался быть основательным.VBA, если столбец («A»). Cell (i) .Value начинается с «x», затем столбца («G»). Cell (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

Зачем писать это в VBA вместо того, чтобы вводить соответствующие формулы в G и H, что является естественным способом работы 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

Кажется законным, но вы можете использовать 1 случай выбора вместо 2. Читаемость улучшится. – 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)' correct? – Adavid02

+0

yup, моя ячейка диапазона. – Vityata