Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1244to1248
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

and Anweisung VBA

and Anweisung VBA
klü
Liebe VBA Profis,
ich bin ein wirklicher VBA Neuling und komme mit meinem ersten Makro nicht so richtig weiter.
Die Daten kommen stammen aus einem Aktivitätssensor und am Ende will ich unterscheiden können ob die Tiere inaktiv oder aktiv waren. Dafür habe ich mir folgende Grenzen gesetzt:
Wenn der Wert in Spalte 2 (Aktivität x)>=0 =0=-4=14 =11=-49=5 Die Ausgaben für die inaktiven Daten sind richtig aber für die aktiven Daten wird stets "etwas anderes" ausgeben. In Spalte 7 habe ich vermerkt was als Ergebnis dort stehen sollte. Ich habe es in der Beispieldatei in VBA als Modul1 und Klasse 1 gespeichert.
Die Datei ist hier hinterlegt:
https://www.herber.de/bbs/user/78365.xlsm
Sub Unterscheidung()
Set inputs = Sheets("Sheet1")
Set output = Sheets("Sheet1")
Row = 1
Do While inputs.Cells(Row, 1) > 0
Row = Row + 1
output.Cells(Row, 1) = inputs.Cells(Row, 1)
output.Cells(Row, 2) = inputs.Cells(Row, 2)
output.Cells(Row, 3) = inputs.Cells(Row, 3)
output.Cells(Row, 4) = inputs.Cells(Row, 4)
output.Cells(Row, 5) = inputs.Cells(Row, 5)
If inputs.Cells(Row, 2) >= 0 And inputs.Cells(Row, 2) = 0 And   _
_
inputs.Cells(Row, 3) = -5 And inputs.Cells(Row, 4) = 14 And inputs.Cells(Row, 2) =   _
_
11 And inputs.Cells(Row, 3) = -49 And inputs.Cells(Row, 4) = 5 And inputs.Cells(Row, 4) 

Vielen lieben Dank schonmal für eure Hilfe!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: and Anweisung VBA
11.01.2012 13:05:39
Josef

Hallo ?,
input und output verweisen auf de selbe Tabelle! Ist das so gewollt?
Sub Unterscheidung()

Set inputs = Sheets("Sheet1")
Set output = Sheets("Sheet1") '?


Row = 1

With inputs
  Do While .Cells(Row, 1) > 0
    Row = Row + 1
    output.Cells(Row, 1) = .Cells(Row, 1)
    output.Cells(Row, 2) = .Cells(Row, 2)
    output.Cells(Row, 3) = .Cells(Row, 3)
    output.Cells(Row, 4) = .Cells(Row, 4)
    output.Cells(Row, 5) = .Cells(Row, 5)
    
    
    If (.Cells(Row, 2) >= 0 And .Cells(Row, 2) <= 13) And _
      (.Cells(Row, 3) >= 0 And .Cells(Row, 3) <= 10) And _
      (.Cells(Row, 4) >= -5 And .Cells(Row, 4) <= 4) Then
      .Cells(Row, 5) = "inaktiv"
      ElseIf (.Cells(Row, 2) >= 14 And .Cells(Row, 2) <= 130) And _
        (.Cells(Row, 3) >= 11 And .Cells(Row, 3) <= 160) And _
        ((.Cells(Row, 4) >= -49 And .Cells(Row, 4) <= -6) Or _
        (.Cells(Row, 4) >= 5 And .Cells(Row, 4) <= 77)) Then
        .Cells(Row, 5) = "aktiv"
      Else
        .Cells(Row, 5) = "etwas anderes"
      End If
    Loop
  End With
  
End Sub



« Gruß Sepp »

Anzeige
AW: and Anweisung VBA
11.01.2012 13:15:47
klü
Hallo Josef,
damit wollte ich nur erreichen das er mir die Ergebnisse im gleichen Tabellenblatt ausgibt in dem auch die Ausgangsdaten stehen.
LG Klü
AW: and Anweisung VBA
11.01.2012 13:16:15
Rudi
Hallo,
1. Verwende niemals VBA-Schlüsselwörter als Variablen (Row ist eine Eigenschaft)
2. Deklariere alle Variablen.
Mit Select Case anstatt If ... And ... Then... ElseIf ... End If
Sub Unterscheidung()
Dim wksInput As Worksheet, wksOutput As Worksheet
Dim lRow As Long
Dim arrOutput, iOutput
Set wksInput = Sheets("Sheet1")
Set wksOutput = Sheets("Sheet2")
arrOutput = Array("was anderes", "Inaktiv", "Aktiv")
lRow = 1
Do While wksInput.Cells(lRow, 1) > 0
lRow = lRow + 1
iOutput = 0
wksOutput.Cells(lRow, 1).Resize(, 5) = wksInput.Cells(lRow, 1).Resize(, 5)
Select Case wksInput.Cells(lRow, 2)
Case 0 To 13
Select Case wksInput.Cells(lRow, 3)
Case 0 To 10
Select Case wksInput.Cells(lRow, 4)
Case -5 To 4: iOutput = 1
End Select
End Select
Case 14 To 130
Select Case wksInput.Cells(lRow, 3)
Case 11 To 160
Select Case wksInput.Cells(lRow, 4)
Case -49 To -6, 5 To 77: iOutput = 2
End Select
End Select
End Select
wksInput.Cells(lRow, 5) = arrOutput(iOutput)
Loop
End Sub

Gruß
Rudi
Anzeige
AW: and Anweisung VBA
11.01.2012 13:23:44
klü
Perfekt Rudi,
es funktioniert. Jetzt muss ich mir das nochmal genauer anschauen damit ich das beim nächsten Mal auch selber hinbekomme!
Vielen lieben Dank du hast mir weitere Nächte mit Bauchschmerzen erspart!
(In)aktive Tiere per VBA oder Funktion ermitteln
11.01.2012 13:38:18
NoNet
Hallo Klü,
folgende Bemerkungen zu Deiner Mappe :
- Lösche die Klasse "Klasse1", der Code ist hier falsch platziert
- ROW und OUTPUT sind VBA Schlüsselwörter und sollten daher keineswegs als Variablennamen verwendet werden, da dies zu Verwirrungen und teilweise auch zu Fehlermeldungen führen kann
- Die Ausgabe der "INPUT"-Werte in den "OUTPUT"-Bereich ist überflüssig - zumindest wenn es sich dabei um ein und dasselbe Tabellenblatt handelt
- Es ist nützlich, die Variablen zuvor zu deklarieren (mit DIM...), mit OPTION EXPLICIT wird das sogar erforderlich !
- der entscheidende Fehler war, dass für "aktive" Tiere bei "Aktivität Y" 2 Grenzen gelten : (-49 bis -6) und (5 bis 77) - diese beiden Bedingungen müssen mit OR im Code verknüpft werden !
Hier mein Korrekturvorschlag für den Code :
Option Explicit 'Erfordert, dass ALLE Variablen im Modul zuvor deklariert werden müssen !
Sub Unterscheidung()
'Diesen Code bitte in ein MODUL (z.B. "Modul1") - nicht in ein KLASSEN-Modul !
'ROW ist ein VBA-Schlüsselwort und sollte daher NICHT als Variablenname verwendet werden !
'Output ist ebenfalls ein VBA-Schlüsselwort - hier gilt das Gleiche !
Dim lngRow As Long
Dim shInput As Worksheet, shOutput As Worksheet
Dim rngAktX As Range, rngAktY As Range, rngDif As Range 'Variablen für die INPUT-Werte
Set shInput = Sheets("Sheet1")
Set shOutput = Sheets("Sheet1")
lngRow = 1
Do While shInput.Cells(lngRow, 1) > 0
lngRow = lngRow + 1
Set rngAktX = shInput.Cells(lngRow, 2) 'Aktivität X aus Spalte B zuweisen
Set rngAktY = shInput.Cells(lngRow, 3) 'Aktivität Y aus Spalte C zuweisen
Set rngDif = shInput.Cells(lngRow, 4)  'Differenz aus Spalte D zuweisen
'Ausgabe der Outputs in Inputs ist überflüssig !
'        output.Cells(lngrow, 1) = inputs.Cells(lngrow, 1)
'        output.Cells(lngrow, 2) = inputs.Cells(lngrow, 2)
'        output.Cells(lngrow, 3) = inputs.Cells(lngrow, 3)
'        output.Cells(lngrow, 4) = inputs.Cells(lngrow, 4)
'        output.Cells(lngrow, 5) = inputs.Cells(lngrow, 5)
If rngAktX >= 0 And rngAktX = 0 And rngAktY = -4 And rngDif = 14 And rngAktX = 11 And rngAktY = -49 And rngDif = 5 And rngDif 
Das Ganze lässt sich auch ohne VBA direkt mit einer Funktion in Spalte E lösen (in E2 eingeben und runterkopieren) :
=WENN(UND(B2>=0;B2=0;C2=14;B2=11;C2=-49;D2=5;D2
Gruß, NoNet
Anzeige
AW: (In)aktive Tiere per VBA oder Funktion ermitteln
11.01.2012 14:40:58
klü
Vielen Dank NoNet für die Erklärungen.
Ich bin echt begeistert das ich so schnell Antworten bekommen habe. Dafür nochmal vielen Dank auch für den Tip warum meine Anweisung nicht funktioniert hat und die alternative Anweisung in Excel!
Liebe Grüße
Klü

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige