Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1676to1680
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

Zahlenteil eines Strings + X

Zahlenteil eines Strings + X
07.03.2019 09:56:28
Phil
Hallo zusammen,
ich habe meine Frage nicht im Forum gefunden, daher versuch ich es einmal so.
Im Kern habe ich eine Datei mit um die 60 Blättern in der bei dem Wert EKAE-*** der numerische Teil (***) plus eine vorher definierte Zahl X (Im Worksheet Parameter angegeben) gerechnet werden soll. Der *** Wert weicht pro tabellenblatt ab und kann einstellig, zweistellig oder dreistellig sein.
Bsp.:
Anbei meine Idee wie es laufen soll, was logischerweise nicht zur VBA Syntax passt.
' Schleife zum auswählen aller sichtbarer Worksheets
With ThisWorkbook
ReDim Preserve meAr(.Sheets.Count)
For i = 1 To .Sheets.Count
If .Sheets(i).Visible = xlSheetVisible Then
meAr(ii) = .Sheets(i).Name
ii = ii + 1
End If
Next i
ReDim Preserve meAr(ii - 1)
.Sheets(meAr).Select
Range("A1:AH66").Select
Selection.Replace What:="EKAE-***", Replacement:="EKAE-*** + X ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

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

Betreff
Datum
Anwender
Anzeige
AW: Zahlenteil eines Strings + X
07.03.2019 11:00:36
EtoPHG
Hallo Excel-Profi,
Was zum Teufel ist ein:
eine vorher definierte Zahl X (Im Worksheet Parameter angegeben)?
Das man Wildcards *** nicht mit Wildcards ersetzen kann müsste Dir als Profi wohl klar sein, denn mit (manuell) Suchen kann man zwar mit Wildcards, aber ersetzen muss man jeden eindeutigen String(Teil) mit einem anderen String(Teil). Daher kann der Code nicht mit der Replace-Methode durchgeführt werden, sondern müsste im Bereich jeweils jede Zelle einzeln behandeln.
Aber beantworte bitte die obige Frage, denn ich weiss nicht woher die zu addierende Zahl kommen soll!
Gruess Hansueli
Anzeige
AW: Zahlenteil eines Strings + X
07.03.2019 11:22:33
Phil
Wie bereits erwähnt ist mir klar, dass das wie es im Code steht nicht geht, daher der Hinweis. Das war lediglich zum Verständnis wie die Logik funktionieren soll.
Da ich weiß, dass es so nicht geht aber keine Ahnung habe wie es anders geht schreibe ich ins Forum. Deshalb sind meine VBA Verständnisse bescheiden. Entschuldige, dass ich bei meinem ersten Beitrag anscheinend nicht das richtige Excel-Level angegeben habe.
Sheets("Parameter").Select
Ekea_Addition = Cells (5, 2) (das wäre der Additionswert, der auf die EKEA Werte addiert werden sollte)
Das ist für den Code auch nicht so relevant. Das Hauptproblem ist für mich, ob und wenn ja wie es geht, dass der Zahlenwert nach EKAE- mit einer Zahl addiert werden kann.
Das Skript muss nur einmal im Monat ausgeführt werden, und der zu addierende Wert ist immer unterschiedlich bzw. in manchen Monaten 0.
Bisher ist es vollständig Manuell. Über Strg F muss ich z.B EKAE-112 suchen und mit EKAE-113 ersetzen. Und das auf jedem einzelnen Tabellenblatt
Anzeige
AW: VBA
07.03.2019 11:36:26
Fennek
Hallo,
für eine Zelle geht:

Sub Main
X = 1
Tx = split(cells(1,1), "-")
cells(1,1) = Tx(0) & "-" &  Tx(1) + x
End Sub
mfg
AW: Zahlenteil eines Strings + X
07.03.2019 12:35:12
EtoPHG
Hallo Phil,
Du sagst zurecht VBA bescheiden, aber woher dann die (unüberlegte) Überzeugung
Das ist für den Code auch nicht so relevant. ?
Du fragst nach Lösungen, für unvollständige Angaben.
Probier mal mit folgendem Code in ein (Standard)-Modul.
Sub Text_Addieren()
Const procTitle As String = "EKEA-Werte aufaddieren"
Const preFix As String = "EKAE-"
Const Bereich As String = "A1:AH66"
Dim addWert As Integer, wsCnt As Integer, addCnt As Long
Dim ws As Worksheet, rC As Range
addWert = Val(Worksheets("Parameter").Cells(5, 2))
If vbYes = MsgBox("Wollen Sie " & Str(addWert) & " zu EKAE-*** " & vbCrLf & _
"in allen Arbeitsblättern addieren?", vbYesNo, procTitle) Then
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then
wsCnt = wsCnt + 1
For Each rC In ws.Range(Bereich)
If Left(rC.Text, Len(preFix)) = preFix Then
rC = preFix & Trim(Str(Val(Mid(rC.Text, Len(preFix) + 1)) + addWert))
addCnt = addCnt + 1
End If
Next rC
End If
Next ws
MsgBox Str(addCnt) & " " & preFix & "Werte in" & vbCrLf & _
"in " & Str(wsCnt) & " Tabellenblättern geändert!", vbInformation, ""
End If
End Sub
Gruess Hansueli
Anzeige
AW: Zahlenteil eines Strings + X
07.03.2019 13:03:09
Phil
Hi Hansueli,
vielen Dank schon einmal. Ich habe den code nun als Standardmodul eingefügt, jedoch ändert er so noch 0 Werte.
So sieht z.B. eine Zelle aus in der es ersetzt werden soll:
='E:\Pfad\KER\18\08\[#Date_1808.xlsx]05 EKAE-50'!F12
In der MSG Box fragt er auch ob er 2 zu den EKAE dazufügen soll, macht es aber nicht.
Unterirdische Anforderungsbeschreibung...
07.03.2019 13:58:45
EtoPHG
für einen Excel-Profi, Phil
Kein Wort davon in der Anfrage, dass sich die zu ersetzenden String/Werte in Formeln! befinden. Eher die Irreführung (auf Zell-Inhalte) im Zitat: bei dem Wert EKAE-*** der numerische Teil (***)
Also meine letzte Antwort!
Sub Formel_Text_Addieren()
Const procTitle As String = "EKEA-Werte aufaddieren"
Const searchTerm As String = " EKAE-"
Const Bereich As String = "A1:AH66"
Dim fndTerm As String, newTerm As String, searchPos As Integer
Dim addWert As Integer, wsCnt As Integer, addCnt As Long
Dim ws As Worksheet, rC As Range
addWert = Val(Worksheets("Parameter").Cells(5, 2))
If vbYes = MsgBox("Wollen Sie " & Str(addWert) & " zu" & searchTerm & "*** " & vbCrLf & _
"in allen Arbeitsblättern addieren?", vbYesNo, procTitle) Then
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then
wsCnt = wsCnt + 1
For Each rC In ws.Range(Bereich)
If rC.HasFormula Then
searchPos = InStr(rC.Formula, searchTerm) + Len(searchTerm)
If searchPos > Len(searchTerm) Then
fndTerm = searchTerm & Trim(Str((Val(Mid(rC.Formula, searchPos)))))
newTerm = searchTerm & Trim(Str((Val(Mid(rC.Formula, searchPos)) +  _
addWert)))
rC.Formula = Replace(rC.Formula, fndTerm, newTerm)
addCnt = addCnt + 1
End If
End If
Next rC
End If
Next ws
MsgBox Str(addCnt) & " " & searchTerm & "Werte in" & vbCrLf & _
"in " & Str(wsCnt) & " Tabellenblättern geändert!", vbInformation, ""
End If
End Sub
Falls das nicht funktioniert, lasse den Thread offen und warte auf einen anderen barmherzigen Samariter ;-)
Gruess Hansueli
Anzeige
AW: Unterirdische Anforderungsbeschreibung...
07.03.2019 14:49:01
Phil
Hi,
tausend Dank! Es funktioniert.
Zahl innerhalb (String) der Formel per VBA ändern
08.03.2019 08:32:11
EtoPHG
Hallo Phil,
Danke für die Rückmeldung und schönes Wochenende.
Ich hab nur den Betreff noch so geändert, dass er für eine ev. Archiv-Recherche sinnvoller ist.
Gruess Hansueli

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige