Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Visual Basic / Excel

krakjacek 19 Wrz 2008 11:42 4377 11
  • #1 19 Wrz 2008 11:42
    krakjacek
    Poziom 9  

    Może ktoś wie jak rozwiązać następujący problem; W arkuszu excela mam kilka kolum z różnymi wartościami /liczbowe, tekstowe/. Rzecz w tym, że kolumna zawierająca tekst powinna być komórką liczbową. Przykładowo wyświetlany tekst to: 1.500,00 a ja potrzebuję wartość liczbową 1500. Czy zna ktoś sposób na zautomatyzowanie tej zmiany ?
    Oczywiście w kolumnie znajdują się różne teksty, ale zawsze w tej samej formie.

    0 11
  • #2 19 Wrz 2008 14:43
    thomson_87
    Poziom 19  

    Podaj co chcesz zrobić bo sposobów jest kilka zależnie od potrzeb.

    0
  • #3 19 Wrz 2008 14:49
    Zbych034
    Poziom 36  

    Daj arkusz jako załącznik. Zobaczymy o co Ci chodzi.
    Poz

    0
  • #4 19 Wrz 2008 16:25
    krakjacek
    Poziom 9  

    No to może rozwinę temat. W załączeniu plik. Kolumna "A" i "B" to pola tekstowe. Ponieważ plik ten ma być zaimportowany do accessa i tam poddany analizie z innymi podobnymi plikami - niezbędne jest, aby te kolumny były jako liczbowe a nie tekstowe. Dotyczy to trzech podobnych arkuszy, więc dobrze by było, gdyby można było tą czynność zautomatyzować za pomocą visual basic.
    Mam nadzieję, że napisałem to wystarczająco zrozumiale.

    0
  • #5 19 Wrz 2008 19:47
    Zbych034
    Poziom 36  

    Zobacz czy jak pomnożysz przez 1 to nie zrobi się cyfra. Nie mam dostępu teraz do excela więc nic więcej nie podpowiem teraz

    0
  • #6 22 Wrz 2008 08:14
    thomson_87
    Poziom 19  

    Nie jestem pewien czy o to ci chodzi co myślę, ale biorąc prawym myszy na pole wartości wybierasz formatuj komórki i wybierasz pole liczby i kategorie liczbowa i podajesz miejsce dziesiętne i wartość zero będzie bez przecinków itp.

    0
  • #7 22 Wrz 2008 09:47
    krakjacek
    Poziom 9  

    thomson_87 - to już próbowałem, ale excel nie formatuje tego pola do właściwej postaci.
    Mimo wszystko dzięki za próbę podpowiedzi.
    Myślę, że bez visual basic nic się w tym temacie nie zdziała.

    0
  • Pomocny post
    #8 22 Wrz 2008 22:10
    adamas_nt
    Moderator Programowanie

    Jeżeli możesz umieścić wynik w innej kolumnie niż B to wystarczy formuła:
    =JEŻELI(DŁ(B2)<=6;B2;(ZASTĄP(B2;SZUKAJ.TEKST(".";B2);1;"")))*1
    Pod warunkiem, że 1.250,00 to 1250.
    Jeżeli trzeba podstawiać w tej samej kolumnie, to można tę formułę przekształcić w makro, zapętlić, postawić warunki itd

    Dodano po 4 [godziny] 19 [minuty]:

    Eeeh, coś mnie naszło i zrobiłem coś takiego (działa z arkuszem w załączniku):

    Code:

    Sub konwertuj()
    n = 2 'poczatek od drugiego wiersza
    Do While koniec = 0

    wartosc = Cells(n, 2) 'kolumna B
    ciag = Len(wartosc)
    If ciag <= 6 Then 'liczby <1000
        liczba = wartosc
        Else
        If ciag = 8 Then 'liczby od 1000 do 9999
            liczba = Left(wartosc, 1) & Mid(wartosc, 3, 3)
            Else
                If ciag = 9 Then 'liczby od 10000 do 99999
                liczba = Left(wartosc, 2) & Mid(wartosc, 4, 3)
                End If
        End If
    End If
    Cells(n, 2) = CDbl(liczba)
    Cells(n, 2).NumberFormat = "0"

    wartoscA = Cells(n, 1) 'kolumna A
    ciagA = Len(wartoscA)
    If ciagA = 4 Then ' dla liczb od 0,01 do 9,99
        liczbaA = Left(wartoscA, 1) & Mid(wartoscA, 3, 2)
        Else
        If ciagA = 5 Then ' dla liczb od 10,00 do 99,99
            liczbaA = Left(wartoscA, 2) & Mid(wartoscA, 4, 2)
        End If
    End If
    'Cells(n, 1) = CDbl(wartoscA) ; blad oczywiscie
    Cells(n, 1) = CDbl(liczbaA) / 100 'poprawka
    Cells(n, 1).NumberFormat = "#,##0.00"

    n = n + 1
    If IsEmpty(Cells(n, 2)) Then 'petla dziala az znajdzie pusta komorka w kol B
    koniec = 1
    Else
    koniec = 0
    End If
    Loop
    End Sub

    0
  • #9 24 Wrz 2008 15:08
    krakjacek
    Poziom 9  

    "adamas_nt" - dzięki za tę wersję rozwiązania problemu. Piszę tak, bo zamierzony cel osiągnąłem przy pomocy innego kodu. Twój kod wydaje mi się ciekawy, więc zapewne go też przetestuję.
    Pozdrawiam:D

    0
  • #10 25 Wrz 2008 08:15
    adamas_nt
    Moderator Programowanie

    Cytat:
    zamierzony cel osiągnąłem przy pomocy innego kodu

    Tak z ciekawości zapytam:
    Jaką metodę zastosowałeś - szukanie/usuwanie kropki, podstawianie cyfr, czy może coś całkiem innego?
    ps.
    Poprawka w moim kodzie ;)

    0
  • #11 26 Wrz 2008 16:06
    krakjacek
    Poziom 9  

    Zamierzony efekt uzyskałem stosując kod umieszczony poniżej;


    Sub Og()

    pierwszy_wiersz = 2
    kolumna = 4
    ostatni_wiersz = ActiveSheet.UsedRange.Rows.Count

    For wiersz = pierwszy_wiersz To ostatni_wiersz
    Cells(wiersz, kolumna).Select
    ActiveCell.Value = ActiveCell.Value * 1
    Selection.NumberFormat = "0.00"
    Next wiersz

    Columns("E:E").Select
    Selection.Replace What:=".", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

    pierwszy_wiersz = 2
    kolumna = 5
    ostatni_wiersz = ActiveSheet.UsedRange.Rows.Count
    For wiersz = pierwszy_wiersz To ostatni_wiersz
    Cells(wiersz, kolumna).Select
    ActiveCell.Value = ActiveCell.Value * 1
    Selection.NumberFormat = "0"
    Next wiersz
    End Sub

    Pozdrawiam

    0
  • #12 26 Wrz 2008 18:48
    adamas_nt
    Moderator Programowanie

    krakjacek napisał:
    Replace What:=".", Replacement:=""

    Czyli usuwanie kropki.
    Dziękuję za zaspokojenie mojej ciekawości :)
    Pozdrawiam

    0