< návrat zpět
MS Excel
Téma: Z formátu jako text na číslo pomocí VBA
Zaslal/a MilaF 3.5.2022 13:38
Dobrý den,
mám určitá data, která exportuji, avšak někdy se mi exportují jako text a někdy jako obecné. Řádků může být x.
Potřeboval bych pomocí makra udělat úpravu pro sloupec J, případně i pro sloupce K, L a M a převést tam uvedená data z formátu jako text vyloženě na číslo.
Cílem je, aby koncový uživatel nemusel do těchto dat ručně zasahovat a opravovat chyby, ale aby je pak importoval dál.
Bohužel nevím, jak to ve VBA udělat. Zkoušel jsem nahrát makro, kde tu chybu odstraním, ale zaznamenalo se mi jen toto:
' Prevedeni_na_cislo Makro
' Sheets("EXPORT").Select
' Range("J2").Select
' Range(Selection, Selection.End(xlDown)).Select
Předem děkuji za úvahu a řešení.
Anonym(3.5.2022 14:49)#052628 Text, který představuje číslo, lze převést na číslo vynásobením 1.
Nakopírovat jedničku do paměti, (CTRL_C),
vybrat oblast
Vložit jinak - Násobit
Automatický převod na číslo představuje riziko - často si převede na datum.
citovat
Sub PrevodNaCislo()
With Worksheets("EXPORT")
.Range(.Range("J1"), .Cells(Rows.Count, "J").End(xlUp)).TextToColumns Destination:=.Range("J1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=False
End With
End Sub
Prípadne to použiť opakovane aj na iné stĺpce (s patričnou zmenou písmena stĺpca na všetkých 3 miestach!)
citovat
MilaF(4.5.2022 9:29)#052633 elninoslov, děkuji.
Podařilo se mi ještě vygooglit toto (upravil jsem pro sloupce J a M):
Sub prevod_na_cislo()
Dim sloupecJ As Range
Set sloupecJ = Range("J1:J" & Cells(Rows.Count, "J").End(xlUp).Row)
For Each r In sloupecJ
If IsNumeric(r) Then
r.Value = CSng(r.Value)
r.NumberFormat = "0.00"
End If
Next
End Sub
citovat
lubo(4.5.2022 18:53)#052646 Podle dat také funguje
Dim r As Range
Set r = Range("J:J")
r.NumberFormat = "General"
Range("G:G").FormulaLocal = Range("G:G").Value
Nebo lépe:
Sub Makro1()
Dim r As Range
Dim r1 As Range
Dim v() As Variant
Dim i1 As Long
Dim i2 As Long
' vybrat jen texty
Set r = Range("J:J").SpecialCells(xlCellTypeConstants, 2)
For Each r1 In r.Areas
v = r1.Value
For i1 = LBound(v, 1) To UBound(v, 1)
For i2 = LBound(v, 2) To UBound(v, 2)
If IsNumeric(v(i1, i2)) Then v(i1, i2) = CDbl(v(i1, i2))
Next i2
Next i1
r.NumberFormat = "General"
r.Value = v
Next r1
End Subcitovat