VBA-makro, kako spremeniti vnos iz Midva sva. -> Mi2 sva.
VBA-makro, kako spremeniti vnos iz Midva sva. -> Mi2 sva.
Ponovno se obračam po pomoč in sicer naslednje naloge ne morem nikakor rešiti! Problem pa je naslednji
vnesli naj bi npr: Midva sva pisati trigonometrijo!
to bi se moralo spremeniti v Mi2 sva šla pisati 3gonome3jo!
Ugotoviti znam samo na katerem mestu se nahaja npr "dva", nikakor pa mi ne uspe zamenjava!
Startala sem z malo lažjo nalogo in sicer da poskusim zamenjavo samo ene besede se pravi npr dva v 2 pa mi nito to ne uspe!
Tako da sem po celem dnevu že malo obupala! Prosila bi vas za pomoč!!
Sub spremeni()
Dim beseda As String
Dim tabela As Variant
Dim tabela1 As Variant
Dim i As Integer
Dim nova As String
tabela = Array("ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet", "nič")
tabela1 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
beseda = InputBox("Vnesite besede za pretvorbo!")
For i = 0 To 9
nova = InStr(beseda, CStr(tabela(i)))
MsgBox nova
Next
End Sub
Hvala.
vnesli naj bi npr: Midva sva pisati trigonometrijo!
to bi se moralo spremeniti v Mi2 sva šla pisati 3gonome3jo!
Ugotoviti znam samo na katerem mestu se nahaja npr "dva", nikakor pa mi ne uspe zamenjava!
Startala sem z malo lažjo nalogo in sicer da poskusim zamenjavo samo ene besede se pravi npr dva v 2 pa mi nito to ne uspe!
Tako da sem po celem dnevu že malo obupala! Prosila bi vas za pomoč!!
Sub spremeni()
Dim beseda As String
Dim tabela As Variant
Dim tabela1 As Variant
Dim i As Integer
Dim nova As String
tabela = Array("ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet", "nič")
tabela1 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
beseda = InputBox("Vnesite besede za pretvorbo!")
For i = 0 To 9
nova = InStr(beseda, CStr(tabela(i)))
MsgBox nova
Next
End Sub
Hvala.
Sub spremeni()
Dim beseda As String
Dim tabela As Variant
Dim tabela1 As Variant
Dim i As Integer
Dim nova As String
tabela = Array("ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet", "nič")
tabela1 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
beseda = InputBox("Vnesite besede za pretvorbo!")
For i = 0 To 9
nova = InStr(beseda, CStr(tabela(i)))
If nova <> 0 Then
tabela(i) = tabela1(i)
MsgBox tabela1(i)
End If
Next
End Sub
No tole mi je še uspelo končo pogruntati!!
Sedaj mi dela če napišem dva izpiše mi pa pol 2!!
Še vedno pa nisem rešila problema kako naj mi izpiše Mi2!!
Morda kak predlog!
Lp, missy
Dim beseda As String
Dim tabela As Variant
Dim tabela1 As Variant
Dim i As Integer
Dim nova As String
tabela = Array("ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet", "nič")
tabela1 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
beseda = InputBox("Vnesite besede za pretvorbo!")
For i = 0 To 9
nova = InStr(beseda, CStr(tabela(i)))
If nova <> 0 Then
tabela(i) = tabela1(i)
MsgBox tabela1(i)
End If
Next
End Sub
No tole mi je še uspelo končo pogruntati!!
Sedaj mi dela če napišem dva izpiše mi pa pol 2!!
Še vedno pa nisem rešila problema kako naj mi izpiše Mi2!!
Morda kak predlog!
Lp, missy
Pozdravljeni,
Lepo, da se trudite in tudi bolje je tako, kot da vam kar jaz napišem končno rešitev. zatorej trije napotki:
Lepo, da se trudite in tudi bolje je tako, kot da vam kar jaz napišem končno rešitev. zatorej trije napotki:
- Programsko kodo pišite z zamiki, kajti sicer je dokaj neberljiva (spodaj poglejte kako bi moral izgledati vaša koda)
- Ukaz InStr vam bo samo povedal, kje v nizu se nahaja nek iskan niz
- Zamenjavo pa bo izvedel ukaz Replace, npr Poglejte si torej ukaz Replace, ki je ključ do rešitve...
Koda: Izberi vse
replace("midva vadiva trigonometrijo", "dva", "2")
- Ko boste imeli že delujočo rešitev, pa se poskusite znebiti še spremenljivke tabela1, saj je ne potrebujete
Koda: Izberi vse
Sub spremeni()
Dim beseda As String
Dim tabela As Variant
Dim tabela1 As Variant
Dim i As Integer
Dim nova As String
tabela = Array("ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet", "nič")
tabela1 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
beseda = InputBox("Vnesite besede za pretvorbo!")
For i = 0 To 9
nova = InStr(beseda, CStr(tabela(i)))
If nova <> 0 Then
tabela(i) = tabela1(i)
MsgBox tabela1(i)
End If
Next
End Sub
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Pozdravljeni,
hvala za vaše nasvete, žal nisem vidla, da mi je kodo tko spacalo, ker sem kar prilepila iz vba-bom bolj pozorna!! No tole mi je uspelo narediti in upam, da sem na dobri poti! Hja ostaja mi še vaš predlog, da ne potrebujem tabele1, bom poslusila še to in vam sporočim kako mi bo uspelo!
Moram se vam zahvalit za vso pomoč in nasvete, ker mi to zelo pomaga in mi daje moč da nadaljujem-HVALA!
Lp, Missy.
hvala za vaše nasvete, žal nisem vidla, da mi je kodo tko spacalo, ker sem kar prilepila iz vba-bom bolj pozorna!! No tole mi je uspelo narediti in upam, da sem na dobri poti! Hja ostaja mi še vaš predlog, da ne potrebujem tabele1, bom poslusila še to in vam sporočim kako mi bo uspelo!
Moram se vam zahvalit za vso pomoč in nasvete, ker mi to zelo pomaga in mi daje moč da nadaljujem-HVALA!
Koda: Izberi vse
Sub spremeni()
Dim beseda As String
Dim tabela As Variant
Dim tabela1 As Variant
Dim i As Integer
Dim nova As String
tabela = Array("ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet", "nič")
tabela1 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
beseda = InputBox("Vnesite besede za pretvorbo!")
For i = 0 To 9
nova = InStr(beseda, CStr(tabela(i)))
If nova <> 0 Then
nova = Replace(beseda, tabela(i), tabela1(i))
beseda = nova
End If
Next
MsgBox beseda
End Sub
Nekako mi je uspelo rešiti to brez tabele1, sam problem nastane ko pridem do nič ko izpiše 10 namesto 0, kar je seveda logično, če i povečujem za ena!
To moram še rešiti čeprav se mi še ne sanja! Kak namig bi bil dobrodošel!
Lp, Missy.
Koda: Izberi vse
For i = 0 To 9
nova = InStr(beseda, CStr(tabela(i)))
If nova <> 0 Then
nova = Replace(beseda, tabela(i), i + 1)
beseda = nova
End If
Next
MsgBox beseda
Lp, Missy.
Ponovno pozdravljeni!
Mam vprašanje, ki je povezano s to nalogo, ki sva jo s skupnimi močmi rešila!
In sicer poskušam spremeniti nalogo tako, da bi delovala obratno, vendar imam problem, ker če je sama števila mi je ne sme spremeniti!!!
primer: S5 je 5ek 13. -> Spet je petek 13.
Lahko mi tudi samo namignete kako naj se tega problema lotim!
Hvala, missy.
Mam vprašanje, ki je povezano s to nalogo, ki sva jo s skupnimi močmi rešila!
In sicer poskušam spremeniti nalogo tako, da bi delovala obratno, vendar imam problem, ker če je sama števila mi je ne sme spremeniti!!!
primer: S5 je 5ek 13. -> Spet je petek 13.
Koda: Izberi vse
Sub zamenjajbrezstevil()
Dim novo As String
Dim besedilo As String
Dim tabela As Variant
tabela = Array("nič", "ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet")
tabela1 = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
besedilo = InputBox("Vnesi stavek za pretvorbo!")
For i = 0 To 9
nasel = InStr(besedilo, CStr(tabela1(i)))
If nasel <> 0 Then
novo = Replace(besedilo, CStr(tabela1(i)), tabela(i))
End If
Next
MsgBox novo
End Sub
Hvala, missy.
Pozdravljeni,
1.
:) Ker imate napako v kodi, vam podani primer (S5 je 5ek 13) reši povsem pravilno. Razlo je v tem, da najprej zamenja enico in to zapiše v spremenljivko nova in ko zamenja trojko spet vzame originalni niz. Torej da se vsaj pribljižava končni rešitvi, najprej popraviva vašo kodo tako, da bo pravilno delal napačno :) Reči želim, da vaša koda sploh ne zamenja vseh številk, temveč le največjo vse ostale spremembe so izgubljene. Torej pravilna koda, ki dela napačno je takšnale:
2.
Ok, sedaj pa k vašemu problemu, ki pa ni tako trivialen, kot se vam zdi na prvi pogled. Poglejte vi preprosto rečete: "V nizu mi zamenjaj vse 0 z nič"... To ni prava pot do rešitve, saj ne veste ali se kakšna ničla ne nahaja v številki, ki pa je ne smete pretvoriti.
Algoritem, ki bo rešil vaš problem je sledeč:
1.
:) Ker imate napako v kodi, vam podani primer (S5 je 5ek 13) reši povsem pravilno. Razlo je v tem, da najprej zamenja enico in to zapiše v spremenljivko nova in ko zamenja trojko spet vzame originalni niz. Torej da se vsaj pribljižava končni rešitvi, najprej popraviva vašo kodo tako, da bo pravilno delal napačno :) Reči želim, da vaša koda sploh ne zamenja vseh številk, temveč le največjo vse ostale spremembe so izgubljene. Torej pravilna koda, ki dela napačno je takšnale:
Koda: Izberi vse
Sub zamenjajbrezstevil()
Dim besedilo As String
Dim tabela As Variant
tabela = Array("nič", "ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet")
tabela1 = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
besedilo = InputBox("Vnesi stavek za pretvorbo!")
For i = 0 To 9
nasel = InStr(besedilo, CStr(tabela1(i)))
If nasel <> 0 Then
besedilo = Replace(besedilo, CStr(tabela1(i)), tabela(i))
End If
Next
MsgBox besedilo
End Sub
Ok, sedaj pa k vašemu problemu, ki pa ni tako trivialen, kot se vam zdi na prvi pogled. Poglejte vi preprosto rečete: "V nizu mi zamenjaj vse 0 z nič"... To ni prava pot do rešitve, saj ne veste ali se kakšna ničla ne nahaja v številki, ki pa je ne smete pretvoriti.
Algoritem, ki bo rešil vaš problem je sledeč:
- Niz razbij na posamezne besede.
- Vzami prvo besedo
- Če je beseda številka potem jo kar dopiši v končni rezultat
- Sicer besedo pretvori in jo zapiši v končni rezultat
- Če si prišel do konca niza, potem nehaj, sicer vzami nsalednjo besedo in pojdi na korak 3.
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Pozdravljeni,
če uporabljate najnovejšo pisarno (Office 97) potem imate na voljo funkcijo Split, ki vam aredi to kar želite. Če pa imate starejšo različico pa lahko uporabite funkcijo, ki vam jo prilagam spodaj:
Uporaba funkcije je preprosta, prvi paremeter je niz, ki ga želite razbiti, drugi parameter pa je ločilo, ki loči posamezne dele, v vašem primeru je to presledek. Primeri uporabe:
če uporabljate najnovejšo pisarno (Office 97) potem imate na voljo funkcijo Split, ki vam aredi to kar želite. Če pa imate starejšo različico pa lahko uporabite funkcijo, ki vam jo prilagam spodaj:
Koda: Izberi vse
'Avtor: Matjaž Prtenjak
'Junij 2002
Function mSplit(text As String, meja As String) As Variant
Dim rezultat() As Variant
Dim stevec As Integer
Dim pozicija As Integer
Dim dolzina As String
Dim tmp As String
tmp = text
stevec = 0
pozicija = 0
dolzina = Len(meja)
Do
ReDim Preserve rezultat(stevec)
pozicija = InStr(tmp, meja)
rezultat(stevec) = Left$(tmp, pozicija - 1)
stevec = stevec + 1
tmp = Mid$(tmp, pozicija + dolzina)
Loop While InStr(pozicija, tmp, meja) > 0
ReDim Preserve rezultat(stevec)
rezultat(stevec) = tmp
mSplit = rezultat()
End Function
Koda: Izberi vse
' razbije na posamezne besede
rezultat = msplit(MojNizZnakov, " ")
' če bi imeli npr. podatke ločene zpodpičjem
rezultat = msplit(MojNizZnakov, ";")
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Pozdravljeni,
najprej hvala za ime funkcije, ki sem jo rabila! Tko poskušala sem rešiti, vendar imam še vedno en problem, ker ne vem kako naj zapišem število k končnemu razultatu! Kar sem poskusila mi ni delovalo!
Moja koda je sledeča:
Tam kjer sem naredila črto, ne vem kaj naj pripišem, ker če napišem kar "& nasel " ne dela! Če bi se v spr našel zapisala prva beseda niza pol bi to še šlo, tko pa ker vrne neničelno enodimenzionalno tabelo s številko podniza! Tukaj se mi je nekako ustavilo in bi rabila pomoč, da se rešim!!
Hvala pa lep dan, missy.
najprej hvala za ime funkcije, ki sem jo rabila! Tko poskušala sem rešiti, vendar imam še vedno en problem, ker ne vem kako naj zapišem število k končnemu razultatu! Kar sem poskusila mi ni delovalo!
Moja koda je sledeča:
Koda: Izberi vse
Sub zamenjajbrezstevil()
Dim nasel As Variant
Dim besedilo As String
Dim tabela As Variant
tabela = Array("nič", "ena", "dva", "tri", "štiri", "pet", "šest", "sedem", "osem", "devet")
tabela1 = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
besedilo = InputBox("Vnesi stavek za pretvorbo!")
For i = 0 To 9
nasel = Split(besedilo, " ")
If IsNumeric(nasel) Then
besedilo = besedilo & __________
Else
besedilo = Replace(besedilo, CStr(tabela1(i)), CStr(tabela(i)))
End If
Next
MsgBox besedilo
End Sub
Tam kjer sem naredila črto, ne vem kaj naj pripišem, ker če napišem kar "& nasel " ne dela! Če bi se v spr našel zapisala prva beseda niza pol bi to še šlo, tko pa ker vrne neničelno enodimenzionalno tabelo s številko podniza! Tukaj se mi je nekako ustavilo in bi rabila pomoč, da se rešim!!
Hvala pa lep dan, missy.
Pozdravljeni,
Za rešitev bo potrebno program drugače zastaviti. vaša funkcija zna sedaj v nekem nizu zamenjati vse cifre z besedami - to bo torej podfunkcija. Glavna funkcija pa bo stavek razbila na besede in za vsako besedo poklicala funkcijo za pretvorbo. Prilagam vam algoritem v psevdokodi:
No poskusite s tem algoritmom. Kot boste videli v nadaljevanju a vas bodo zjebavala še ločila v stavkih
Za rešitev bo potrebno program drugače zastaviti. vaša funkcija zna sedaj v nekem nizu zamenjati vse cifre z besedami - to bo torej podfunkcija. Glavna funkcija pa bo stavek razbila na besede in za vsako besedo poklicala funkcijo za pretvorbo. Prilagam vam algoritem v psevdokodi:
Koda: Izberi vse
razbij stavek na besede
NovStavek = ""
za vsako besedo
če je beseda cifra
NovStavek = NovStavek + beseda ' tu nič ne pretvarjamo
sicer
NovStavke = NovStavek + Pretvori(beseda) ' tu kličemo funkcijo za pretvorbo
ponavljaj
Izpisi NovStavek
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator