Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Witam, ostatnio troche amatorsko bawię sie w VBA, ułatwiając sobie życie. Niestety jest problem którego nie umiem obejść: stworzyłam sobie skrypcik który sprawdza ew. poprawia błędy w wartościach komórek w excelu, np. banalnie - usuwa zbędne spacje etc. W "moim" arkuszu są jednak zarówno cyfry, litery jak i oba w jednej komórce. Z poziomu arkusza - ręcznie ustawiam dla całości format tekstowy. Niestety np. jak skrypt sprawdza czy są zbędne spacje (np. na końcu) to z wartości "00123 " otrzymuję "123". I spacji nie ma ale zer na początku też - to czasami uciążliwe myślenie excela za nas uznaje wartość komórki za cyfry.. Jak to obejść? Hilfe..Anna Czajka edytował(a) ten post dnia 25.05.07 o godzinie 14:45

konto usunięte

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

możesz wkleić ten fragment kodu?

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Public Sub Odstepy2() 'usuń spacje przed i po
Dim strWartoscKom, strWynikKom As String
Dim strKolumna
Dim intrekordy, j, i As Integer

intrekordy = 10
intLicznikRek = 2 '1 to naglowek
Do While intLicznikRek <= intrekordy
'od A do AZ
For i = 64 To 65 '.a-.z - zewnętrzna - brak oraz A
For j = 65 To 90 'a.-a. -65-90- wewnętrzne a-z
If i = 64 Then
strKolumna = Chr(j)
Else:
strKolumna = Chr(i) & Chr(j)
End If
If IsError(ActiveSheet.Range(strKolumna & intLicznikRek).Value) = False Then

strWartoscKom = ActiveSheet.Range(strKolumna & intLicznikRek).Value
strWynikKom = Trim(strWartoscKom)
ActiveSheet.Range(strKolumna & intLicznikRek).Value = strWynikKom

If strWartoscKom <> strWynikKom Then
ActiveSheet.Range(strKolumna & intLicznikRek).Interior.ColorIndex = 8 'NIEBIESKI
End If
End If
Next j
Next i
intLicznikRek = intLicznikRek + 1
Loop

End Sub

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Problem jest wówczas gdy do komórki jest wpisana cyfra "00123" ale typ ustawiony jest na ogólny. Wówczas ucina zera. Chciałabym spytać czy ktoś wie jak można typ przechowywanej w komórce wartości ustawić za pomocą VBA by nie trzeba było każdorazowo robić tego ręcznie..

konto usunięte

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Sub TrimSpaces()

Dim sel As Range
Dim cel As Range

Set sel = Selection
For Each cel In sel

cel.NumberFormat = "@"
cel.value = trim(cel.value)

Next

End Sub

dla zaznaczenia usuwa zbędne spacje
i dla każdej komórki ustawia format na tekstowy
jezeli było __00123_ to zostaje 00123

Pozdrawiam

TomekTomasz G. edytował(a) ten post dnia 25.05.07 o godzinie 17:33

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Takie proste :)
DZIĘKI :)

konto usunięte

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Anna C.:
Takie proste :)
DZIĘKI :)

Cieszę się że mogłem pomóc :-)

Miłego dnia

Tomek
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Panie Tomku,

czy zechciałby mi Pan wyjaśnić, czemu dla przykładu z wpisanej do komórki wartości 80 90 przy użyciu Pana makra nie otrzymuję 8090? Czy w danym arkuszu makro można użyć tylko raz???
Napisał Pan "i dla każdej komórki ustawia format na tekstowy". Czyli po odpaleniu makra wszystkie komórki mają format tekstowy?
Czy mógłbym prosić Pana lub kogoś ze znakomitych znawców Excela o podanie kodu makra, które zarówno dla tekstu jak i dla cyfr usuwa zbędne spacje tzn.
tekst "to jest__Ola" otrzymam "to jest Ola"
liczba 7 9 8 otrzymam 798.
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Panie Tomku,

czy zechciałby mi Pan wyjaśnić, czemu dla przykładu z wpisanej do komórki wartości 80 90 przy użyciu Pana makra nie otrzymuję 8090? Czy w danym arkuszu makro można użyć tylko raz???
Napisał Pan "i dla każdej komórki ustawia format na tekstowy". Czyli po odpaleniu makra wszystkie komórki mają format tekstowy?
Czy mógłbym prosić Pana lub kogoś ze znakomitych znawców Excela o podanie kodu makra, które zarówno dla tekstu jak i dla cyfr usuwa zbędne spacje tzn.
tekst "to jest__Ola" otrzymam "to jest Ola"
liczba 7 9 8 otrzymam 798.
Wojciech M.

Wojciech M. Senior Software
Engineer | Data
Science Team at
Analyx®

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Marek Z.:
Panie Tomku,

czy zechciałby mi Pan wyjaśnić, czemu dla przykładu z wpisanej do komórki wartości 80 90 przy użyciu Pana makra nie otrzymuję 8090?

Panie Marku,

Funkcja VBA Trim usuwa zbędne spacje jedynie na początku i na końcu tekstu. Natomiast funkcja Excela Trim (Usuń.Zbędne.Odstępy) usuwa zbędne spacje także pomiędzy słowami. Żadna z tych funkcji nie usunie jednak spacji z "80 90", ponieważ wartość ta jest traktowana nie jako liczba, lecz jako tekst, 2 słowa oddzielone spacją.
Czy w danym arkuszu makro można użyć tylko raz???

Makro można użyć wiele razy w danym arkuszu.
Napisał Pan "i dla każdej komórki ustawia format na tekstowy". Czyli po odpaleniu makra wszystkie komórki mają format tekstowy?

Tak, odpowiada za to poniższa linia, którą może Pan zakomentować, jeżeli będzie miał Pan taką potrzebę.

cel.NumberFormat = "@"
> Czy mógłbym prosić Pana lub kogoś ze znakomitych znawców
Excela o podanie kodu makra, które zarówno dla tekstu jak i dla cyfr usuwa zbędne spacje tzn.
tekst "to jest__Ola" otrzymam "to jest Ola"
liczba 7 9 8 otrzymam 798.

Musimy w pewien sposób określić, czy potraktować daną wartość jako tekst czy liczbę. Jednym z rozwiązań jest sprawdzenie, czy wszystkie znaki w tekście są cyfrą lub spacją - jeżeli tak to usuwamy wszystkie spacje, jeżeli nie to usuwamy jedynie zbędne spacje funkcją Trim Excela. Zamieszczam to rozwiązanie poniżej.

Sub TrimSpaces()

Dim sel As Range
Dim cel As Range
Dim i As Long
Dim isString As Boolean

isString = False
Set sel = Selection

For Each cel In sel

For i = 1 To Len(cel.Value)
If Not (Mid(cel.Value, i, 1) = " " Or IsNumeric(Mid(cel.Value, i, 1))) Then
isString = True
Exit For
End If
Next i

cel.NumberFormat = "@"

If (isString = True) Then
cel.Value = Application.WorksheetFunction.Trim(cel.Value)
isString = False
Else
cel.Value = Replace(cel.Value, " ", "")
End If

Next cel

End Sub
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Bardzo serdecznie dziękuję za wyjaśnienie. Pana makro działa aż miło.
Prawdziwe jest stwierdzenie, że: Człowiek uczy się od narodzin do śmierci i... zawsze jest coś o czym nie będzie wiedział". Dobrze, że są ludzie, którzy mogą i chcą pomóc bezinteresownie.
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: [excelo pogotowie] typ przechowywanych w komórce wartości...

Bardzo serdecznie dziękuję za wyjaśnienie. Pana makro działa aż miło.
Prawdziwe jest stwierdzenie, że: Człowiek uczy się od narodzin do śmierci i... zawsze jest coś o czym nie będzie wiedział". Dobrze, że są ludzie, którzy mogą i chcą pomóc bezinteresownie.

Następna dyskusja:

[excelo pogotowie] numer s...




Wyślij zaproszenie do