Mam cztery wartości:
OT 10
OT 11 1AT
1P; OT 12
OT 13; 10P
Korzystając z tego wzoru:
=IF(ISNUMBER(SEARCH("OT",C1)),IF(SUM(LEN(C1)-LEN(SUBSTITUTE(C1, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&C1, LARGE(INDEX(ISNUMBER(--MID(C1,ROW(INDIRECT("$1:$"&LEN(C1))),1))* ROW(INDIRECT("$1:$"&LEN(C1))),0), ROW(INDIRECT("$1:$"&LEN(C1))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(C1)))/10),""),)
Jestem w stanie przekonwertować te wartości na następujące wartości:
10
111
112
1310
Czy istnieje sposób, aby naprawić tę formułę tak, aby ciągnęła tylko liczbę sąsiadującą z „OT”, bezpośrednio w prawo, z dokładnie jedną spacją między nimi? Prawidłowe dane wyjściowe to:
10
11
12
13
Wynik może być tylko dwu- lub trzycyfrową liczbą, jeśli oryginalna wartość to OT 100 2AT
, to wyjście powinno mieć wartość 100
.
2 odpowiedzi
To zwróci liczbę po OT
:
=--SUBSTITUTE(SUBSTITUTE(MID(A4,FIND("OT",A4)+3,FIND(" ",REPLACE(A4&" ",1,FIND("OT",A4)+3,""))),";",""),"/","")
NEST inne
= PODSTAW (MID (C1, ZNAJDŹ ("DO"; C1) +3,3), "", "")
Lub w przypadku, gdy powinno być tylko; lub / gdzieś: = SUBSTITUTE (SUBSTITUTE (SUBSTITUTE (MID (C1, FIND ("OT", C1) +3,3), "", ""), ";", ""), "/", "" )
var src = 'OT 10 |OT 11 1AT |1P; OT 12|OT 13; 10P|OT 14/ 10P'.split('|');
for(var i=0;i<src.length;i++) {
var pos = src[i].indexOf('OT');
console.log("FIND OT (XL) position", pos+1, "MID", src[i].substr(pos+3,3).replace(/;/g,'').replace(/\//g,''));
}
Podobne pytania
Nowe pytania
excel
Tylko w przypadku pytań dotyczących programowania w odniesieniu do obiektów lub plików programu Excel albo tworzenia złożonych formuł. Możesz połączyć tag Excela z VBA, VSTO, C #, VB.NET, PowerShell, automatyzacją OLE i innymi znacznikami i pytaniami związanymi z programowaniem, jeśli dotyczy. Ogólna pomoc dotycząca MS Excel dla funkcji pojedynczego arkusza jest dostępna w Super User.