Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1560to1564
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

Vorm Schneiden Prüfen

Vorm Schneiden Prüfen
01.06.2017 17:32:49
AnWo
Guten Tag,
mein frage ist, kann ich eine Zelle Prüfen und den String in die Zelle daneben eintragen und berechnen?
Ich glaube ein Beispiel:
A1: 12Bäume
A2: 00Bäume
A3: 04Baume
wenn A1=00Bäume;dann 00 +(tabellenblatt 2 A1); String übertragen (z.b. 12)
den Anfang habe ich:
.Offset(0, 7).Formula = "=IF(NOT(ISERROR(FIND(""00Bäume"",D2,2))),1,0)"
.Offset(0, 7).Value = .Offset(0, 7).Value
nur nicht 1 und 0 als Ergebnis,sondern Bestenfall eine "wenn funktion" / sonst "00 übertragen".
Sorry für die verkorkste Sprache aber ich habe die letzten 3h so viele Gedanken durchgehauen...(und es wird danach die ersten 2 Stellen geschnitten)
Gruß Andreas

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vorm Schneiden Prüfen
01.06.2017 18:39:11
Piet
Hallo Andreas
.Offset(0, 7).Formula = "=IF(NOT(ISERROR(FIND(""00Bäume"",D2,2))),1,0)"
.Offset(0, 7).Value = .Offset(0, 7).Value

Darf ich mal ganz höflich fragen was das bitte für ein Anfang ist? Geht es hier um Vba oder um eine Formel?
Wenn es Vba ist braucht man keine komplizierte Formel in eine Zelle setzen, sondern wertet direkt per Vba aus!
Im Augenblick verstehe ich aber die ganze Aufgabe noch nichtso richtig!
Hier mai ein Vba Code zum Auswerten - als Anfang -
Der 1. Code ist für die Zelle A1 auszuwerten, der 2. Code für eine ganze Spalte über For Next!
mfg Piet
Sub Bäume_auswerten()
Dim Txt As String, Zahl As Integer
Txt = Range("A1").Value
Zahl = Left(Txt, 2)
If InStr(Txt, "Bäume") Then
Range("A1").Offset(0, 7) = Zahl
End If
End Sub
Sub Bäume_auswerten()
Dim Txt As String, Zahl As Integer
'Letzte Zeile in Spalte A ermitteln
lz = Cells(Rows.Count, "A").End(xlUp).Row
'Schleife für alle Zeilen in Spalte A
For j = 1 To lz
Txt = Range("A1").Offset(j, 0).Value
Zahl = Left(Txt, 2)
If InStr(Txt, "Bäume") Then
Range("A1").Offset(j, 7) = Zahl
End If
Next j
End Sub

Anzeige
AW: Vorm Schneiden Prüfen
01.06.2017 19:41:47
Hajo_Zi
lasse den Fragesteller entscheiden ob offen.
Es ist Heute nicht mehr üblich eine Rückmeldung zu geben und so ist der Beitrag über 6 Tage offen.

Unhöflichkeit ist also üblich & Norm?! :-| owT
01.06.2017 21:39:30
Luc:-?
:-?
AW: Vorm Schneiden Prüfen
02.06.2017 08:26:07
AnWo
Guten Morgen,
erstmal Entschuldigung, ich war gestern nicht mehr wirklich in der Lage :-(
ich fange noch mal von vorne an (mit den Bäumen dacht ich wäre es einfacher zu verstehen):
Ich habe hier im Forum schon einen Anfang bekommen und dachte, dass ich den Rest alleine schaffe
Ich bekomme aus einem Vorgelagertem Programm eine Raumstempel und füge den in Spalte D ein:
00HKVA15 Küche
00HKVA15 Anschluß
09HKVA15 Wohnen
00HKVA15BH1 Badezimmer
00HKVA15UNB Abstell
momentan schreibt er die (15) in Spalte F -- zufrieden
entscheidet ob BH1 vorhanden ist und trägt es in Spalte K -- zufrieden
entscheidet ob UNB vorhanden ist und trägt es in Spalte H -- zufrieden
und jetzt wurde ich gerne das er prüft ob die ersten 2 Stellen 00 sind dann soll er rechenen:
=WENN(H2="j";AUFRUNDEN(G2/Projekt!$E$18;0);0)
sonst die ersten beiden Stellen übernehmen.

und im Anschluß bis zum Leerzeichen den String schneiden.
Was ich bisher habe:
Sub AnWo()
Dim z As Range
With Range("D2:D" & Cells(Rows.Count, 4).End(xlUp).Row)
.Offset(0, 2).Formula = "=MID(D2,7,2)*1"
.Offset(0, 2).Value = .Offset(0, 2).Value
.Offset(0, 7).Formula = "=IF(NOT(ISERROR(FIND(""BH1"",D2,2))),1,0)"
.Offset(0, 7).Value = .Offset(0, 7).Value
.Offset(0, 4).Formula = "=IF(NOT(ISERROR(FIND(""UNB"",D2,2))),""N"",""J"")"
.Offset(0, 4).Value = .Offset(0, 4).Value
.Offset(0, 6).Formula = "=IF(NOT(ISERROR(FIND(""00HK"",D2))),1,0"
.Offset(0, 6).Value = .Offset(0, 6).Value
For Each z In .Cells
z = Right(z, Len(z) - InStr(1, z, " "))
Next z
End With
End Sub
Ich hoffe das ist jetzt verständlich und höflich.
Danke
Andreas
Anzeige
Beispielmappe
02.06.2017 13:58:59
Werner
Hallo Andreas,
dann erstell mal eine Beispielmappe mit ein paar Datensätzen und trage in Spalte G händisch ein, wie das Ergebnis aussehen sollte.
Die Daten aus Spalte D am besten im Originalzustand zusätzlich in Spalte A einfüge, damit man sieht, wie sie aussehen bevor das Makro sie bearbeitet hat.
Übrigens trägt dein Code hier ein "N" ein, wenn UNB im String vorhanden ist, soll das so sein?
.Offset(0, 4).Formula = "=IF(NOT(ISERROR(FIND(""UNB"",D2,2))),""N"",""J"")"
Gruß Werner
AW: Beispielmappe
02.06.2017 14:29:01
Piet
Hallo Andreas,
anbei ein Code von mir der ohne Formeln auskommt. Man braucht nicht zuerst Zellen mit Formeln laden, um sie dann in Werte umzuwandeln. Eine Auswertung mit If Then kann man auch bequem in VBA machen. s.unten
Unklar ist, wo das Ergebnis stehen soll? Du hast dich dazu nicht geaeussert, nur das ein Wert aus "G2" geholt werden muss, um ihn durch "Projekt" Zelle E18 zu teilen. Ich habe in meinem Beispiel das Ergebnis in Spalte E geschrieben! Diese Ergebnis Spalte muss vorher immer gelöscht werden, sonst bleiben alte Werte drin stehen! - Die Ergebnis Spalte must du bitte selbst anpassen!
Ansonsten sollte das Makro laufen. Du kannst aber auch die Formel Lösung von Werner einsetzen, wenn dir das lieber ist.
mfg Piet
Sub AnWo()
Dim z As Range, Txt As String, Zahl As Integer
Dim Wert As Variant, Projekt As Variant
On Error Resume Next
'Hilfsspalte für Ergebnis löschen
Range("E2:E6").ClearContents
'Schleife nur für Spalte D auswerten
For Each z In Range("D2:D" & Cells(Rows.Count, 4).End(xlUp).Row)
Txt = Mid(z, 9, 3)   'Text BH1 oder UNB
Zahl = Mid(z, 1, 2)  '"00" als Zahl laden
'BH1 und UNB über Txt Auswertung eintragen
If Txt = "BH1" Then z.Offset(0, 7) = 1 Else z.Offset(0, 7) = 0
If Txt = "UNB" Then z.Offset(0, 4) = "N" Else z.Offset(0, 4) = "J"
'Spalte F ab 7. Buchstabe, 2 Stellen auflisten
z.Offset(0, 2) = Mid(z, 7, 2)
'Spalte D letzten Text auflisten
z.Cells(1, 0) = Right(z, Len(z) - InStr(1, z, " "))
'** Spalte E auf "00" setzen oder berechnen !!
Txt = z.Offset(0, 4)     '"J/N" aus Spalte H laden
Wert = z.Offset(0, 3)    'Wert aus Spalte G laden
'Projekt Wert aus Tabelle Projekt Zelle E18 laden
Projekt = Worksheets("Projekt").Range("$E$18").Value
'** Spalte E auf "00" setzen oder berechnen !!
If Zahl > 0 And Txt = "J" Then
z.Offset(0, 1) = WorksheetFunction.RoundUp(Wert / Projekt, 0)
Else
z.Offset(0, 1) = "'00"
End If
Next z
End Sub

Anzeige
AW: Beispielmappe
02.06.2017 16:41:32
Werner
Hallo Andreas,
hier deine Beispielmappe zurück. Da gibt es aber noch Unstimmigkeiten. Dein Ergenis hast du in der Beispielmappe in Spalte J eingetragen. Das wäre für den Code .Offset(0,6) Das habe ich in deiner Beispielmappe mal so eingebaut.
Gleichzeitig hast du aber folgende Codezeilen in deinem Online gestellten Code:
.Offset(0, 6).Formula = "=IF(NOT(ISERROR(FIND(""00HK"",D2))),1,0"
.Offset(0, 6).Value = .Offset(0, 6).Value
Das soll/wird auch in die Spalte J geschrieben und das kann so ja nicht funktionieren. Da ich nicht weiß, wo letztlich was hin soll, habe ich das Ergebnis der Formelberechnung in Spalte J geschrieben und die obigen Codezeilen auskommentiert.
https://www.herber.de/bbs/user/113988.xlsm
Teste mal.
Gruß Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige