Microsoft Excel

Herbers Excel/VBA-Archiv

IF Bedingung mit Dropdownabfrage in VBA

Betrifft: IF Bedingung mit Dropdownabfrage in VBA von: Oli
Geschrieben am: 01.09.2014 11:04:55

Hallo zusammen,

ich habe folgende Herausforderung.
Unten stehendes Makro funktioniert soweit einwandfrei.
Aktuell wird aus Sheet 2 der Inhalt aus Zelle 37 ausgelesen und bei Übereinstimmung im Sheet 3 in einer Matrix ein Eintrag hinterlegt.

Mein Problem ist aktuell, dass ich in Sheet 3 noch ein Dropdownliste in den Cellen C19-C26 aufgenommen habe.
Das Marko sollte nun erweitert werden um die Funktion, dass nur wenn im Sheet2 in der jeweilgen Zelle 101 der Eintrag identisch ist mit der Dropdownliste C19-C26 dann soll ein Eintrag möglich sein.

Ich habe es mit einer IF Funktion versucht, jedoch beisse ich mir die Zähne mit den 8 dropdownlisten aus.

Könnte mir jemand bitte einen Denkanstoss geben?

Tausend Dank

Oli

-----------------------------------------------------------------------------------

Private Sub cmdUpdateGrid_Click()


Dim iTotalEmployees As Integer
Dim iRow As Integer
Dim iColumn As Integer
Dim iCurrentRow As Integer

Dim iClearGridRow As Integer
Dim iClearGridColumn As Integer

Dim iRowCounter As Integer

iTotalEmployees = Sheet2.Cells(1, 2).Value
iCurrentRow = 3



'* Blank out grid
iClearGridColumn = 3
    
    For X = 0 To 2
        
        iClearGridRow = 5
        
        For y = 0 To 2
     
        Sheet3.Cells(iClearGridRow, iClearGridColumn).Value = ""
        iClearGridRow = iClearGridRow + 2
        
        Next y
     
    iClearGridColumn = iClearGridColumn + 1
     
    Next X


'* Populate Grid
    For X = 0 To iTotalEmployees - 1
    
            Select Case Sheet2.Cells(iCurrentRow, 37).Value
        
            Case "A"
                iRow = 9
            Case "B"
                iRow = 7
            Case "C"
                iRow = 5
            Case "D"
                iRow = 7
            Case "E"
                iRow = 9
            Case "F"
                iRow = 5
            Case "G"
                iRow = 9
            Case "H"
                iRow = 5
            Case "I"
                iRow = 7
            Case Else
                iRow = 99
            
        End Select
        
       
        
        Select Case Sheet2.Cells(iCurrentRow, 37).Value
      
            Case "A"
                iColumn = 3
            Case "B"
                iColumn = 4
            Case "C"
                iColumn = 5
            Case "D"
                iColumn = 5
            Case "E"
                iColumn = 5
            Case "F"
                iColumn = 4
            Case "G"
                iColumn = 4
            Case "H"
                iColumn = 3
            Case "I"
                iColumn = 3
            Case Else
                iColumn = 99
            
        End Select
      
              

        
        If iRow <> 99 And iColumn <> 99 Then
          
            '* Check for blanks
            If Sheet3.Cells(iRow, iColumn).Value = "" Then
                Sheet3.Cells(iRow, iColumn).Value = Sheet2.Cells(iCurrentRow, 2).Value & " " &  _
Sheet2.Cells(iCurrentRow, 3).Value
            Else
                Sheet3.Cells(iRow, iColumn).Value = Sheet3.Cells(iRow, iColumn).Value & vbLf &  _
Sheet2.Cells(iCurrentRow, 2).Value & " " & Sheet2.Cells(iCurrentRow, 3).Value
            End If
        
        End If
        
        iCurrentRow = iCurrentRow + 1
        
    Next X


'* Initialize Variables
iCurrentRow = 5



'* Resize Rows
    For X = 0 To 2
        
        Rows(iCurrentRow).EntireRow.AutoFit
    
        iCurrentRow = iCurrentRow + 2
    
    Next X


'* Reset Current Row
iCurrentRow = 5

'* Check for minimum size and resize if necessary
    For X = 0 To 2
        
        If Rows(iCurrentRow).RowHeight < 75.75 Then
            Rows(iCurrentRow).RowHeight = 75.75
        End If
    
        iCurrentRow = iCurrentRow + 2
    
    Next X


End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

  

Betrifft: AW: IF Bedingung mit Dropdownabfrage in VBA von: fcs
Geschrieben am: 01.09.2014 15:17:00

Hallo Oli,

aus deiner Beschreibung kann man die erforderliche(n) Prüfung(en) für die "jeweilgen Zelle 101" und die DropDownliste "C19-C26" .

Besonders: Wie wird "jeweilige" = Spalte? ermittelt.

Gruß
Franz


  

Betrifft: AW: IF Bedingung mit Dropdownabfrage in VBA von: Oli
Geschrieben am: 01.09.2014 15:41:10

Hallo Franz,

sorry hab mich sehr kurz gehalten, wie ich gerade sehe..

Das aktuelle makro liest aus sheet2 den Wert aus Celle37 aus (ab Zeile 3 bis unendlich /aktuell ca. 300 einträge)

"Select Case Sheet2.Cells(iCurrentRow, 37).Value "

und je nach übereinstimmung der Werte A - I (sind der Inhalt in Zelle 37 = AK3,AK4 usw. ) wird der Wert aus B3 und B4 in ein Feld geschrieben. Hierzu folgende formel

If Sheet3.Cells(iRow, iColumn).Value = "" Then
Sheet3.Cells(iRow, iColumn).Value = Sheet2.Cells(iCurrentRow, 2).Value & " " & Sheet2.Cells(iCurrentRow, 3).Value
Else
Sheet3.Cells(iRow, iColumn).Value = Sheet3.Cells(iRow, iColumn).Value & vbLf & Sheet2.Cells(iCurrentRow, 2).Value & " " & Sheet2.Cells(iCurrentRow, 3).Value
End If ).

In Sheet 2 habe ich in Zelle 101 = CW3, CW4 usw. ein weiteres Kriterium.
D.h. in Sheet3 wollte ich über eine Dropdownliste dieses Kriterium als Auswahlfeld definieren und je nachdem welches Kriterium ausgewählt wurde, sollten nur diese Zeilen mit obriger Casefunktion abgefragt werden. Wenn Kriterium aus Auswahlliste nicht mit der Zeile übereinstmmt, dann sollte diese überlesen werden.

Hofe es ist etwas klarer...

Tausen Dank


  

Betrifft: AW: IF Bedingung mit Dropdownabfrage in VBA von: fcs
Geschrieben am: 02.09.2014 10:27:56

Hallo Oli,

die Beschreibung ist jetzt klarer. Du gehst aber etwas schludrig mit dem Begriff Zelle/Cells um bzw. verwendest ihn falsch. Mit "Cells37", "Zelle 37" und "Zelle 101" meinst du tatsächlich die Spalte 37 bzw. 101 in der jeweiligen Zeile.

Zur Lösung deines Problems musst du "nur" in der For-Next-Schleife, die die Mitarbeiter abarbeitet, eine If-Bedingung für die zusätzliche Prüfung einbauen, die den in Sheet3 gewählten Wert mit dem Wert in Spalte 101 (CW) der jeweiligen Zeile vergleicht.

Gruß
Franz

  '* Populate Grid
      For X = 0 To iTotalEmployees - 1
          If Sheet2.Cells(iCurrentRow, 101).Value = Sheet3.Range("A4").Value Then 'neu -"A4" _
                 anpassen = Zelle mit Ausgewähltem Wert
              Select Case Sheet2.Cells(iCurrentRow, 37).Value

              Case "A"
                  iRow = 9
              Case "B"
                  iRow = 7
              Case "C"
                  iRow = 5
              Case "D"
                  iRow = 7
              Case "E"
                  iRow = 9
              Case "F"
                  iRow = 5
              Case "G"
                  iRow = 9
              Case "H"
                  iRow = 5
              Case "I"
                  iRow = 7
              Case Else
                  iRow = 99
              
          End Select
          
         
          
          Select Case Sheet2.Cells(iCurrentRow, 37).Value
        
              Case "A"
                  iColumn = 3
              Case "B"
                  iColumn = 4
              Case "C"
                  iColumn = 5
              Case "D"
                  iColumn = 5
              Case "E"
                  iColumn = 5
              Case "F"
                  iColumn = 4
              Case "G"
                  iColumn = 4
              Case "H"
                  iColumn = 3
              Case "I"
                  iColumn = 3
              Case Else
                  iColumn = 99
              
          End Select
        
                
  
          
          If iRow <> 99 And iColumn <> 99 Then
            
              '* Check for blanks
              If Sheet3.Cells(iRow, iColumn).Value = "" Then
                  Sheet3.Cells(iRow, iColumn).Value = Sheet2.Cells(iCurrentRow, 2).Value & " " & _
 _
                      Sheet2.Cells(iCurrentRow, 3).Value
              Else
                  Sheet3.Cells(iRow, iColumn).Value = Sheet3.Cells(iRow, iColumn).Value & vbLf & _
 _
                      Sheet2.Cells(iCurrentRow, 2).Value & " " & Sheet2.Cells(iCurrentRow, 3). _
Value
              End If
          
          
          End If
          
        End If                                             'neu
        iCurrentRow = iCurrentRow + 1
          
      Next X



  

Betrifft: AW: IF Bedingung mit Dropdownabfrage in VBA von: Oli
Geschrieben am: 02.09.2014 15:20:28

Hallo Franz,

in der Tat nehme ich öfters das worte Zelle/Celle für unterschiedliche Dinge.
Sorry dafür..

Und funktioniert einwandfrei...

Tausend Dank!!

Oli


 

Beiträge aus den Excel-Beispielen zum Thema "IF Bedingung mit Dropdownabfrage in VBA"