1桁が含まれていますが、書式が正しくないため、テキストとして扱われます。VBA - 文字列内の文字を置き換えます。
そのため、何もして、ドットのためのコンマのためのドットを交換する必要があります。私はコードを持っています:
しかし、それは何もしません。エラーはありません。ただロードしてから何も起こりません。私が間違っていたことや、何がうまくいくのか、アドバイスできますか?
多くの感謝!
1桁が含まれていますが、書式が正しくないため、テキストとして扱われます。VBA - 文字列内の文字を置き換えます。
そのため、何もして、ドットのためのコンマのためのドットを交換する必要があります。私はコードを持っています:
しかし、それは何もしません。エラーはありません。ただロードしてから何も起こりません。私が間違っていたことや、何がうまくいくのか、アドバイスできますか?
多くの感謝!
として保存されたデータを残して、ドットは次のように使用されている - それは、彼らがどうあるべきかに戻ってセパレータ小数(千)をリセットする前に番号の範囲を変換するためにtext to columns
を使用しています小数点区切り記号とカンマが1000個の区切り記号として使用されます。それを言って、次のコードは私のために働き、期待される出力を生成します。
コードをテストするには、ウェブページの数字をコピーしてシートに貼り付けました。下のようになります...
コード:
Sub Test()
With Range("P:P")
.Replace ".", ""
.Replace ",", "."
.NumberFormat = "0.00"
End With
End Sub
出力:
これはそれを行うための方法です:
Public Sub TestMe()
Debug.Print generateNumber("1.525,32")
'works with mixed formats:
Debug.Print generateNumber("12,525.33")
Debug.Print generateNumber("1,112.525,35")
End Sub
Public Function generateNumber(strInput As String) As Double
strInput = Replace(Replace(strInput, ".", ""), ",", "")
generateNumber = CDbl(Left(strInput, Len(strInput) - 2))
'getting the first digit after the comma
generateNumber = generateNumber + 0.1 * CLng(Mid(strInput, Len(strInput) - 1, 1))
'getting the second digit after the comma
generateNumber = generateNumber + 0.01 * CLng(Mid(strInput, Len(strInput), 1))
End Function
入力が標準である場合には、整数の後に2桁の数字で、それが標準出力を返します。
異なる国では区切り記号が異なるため、小さなプラスの書式設定があります。
あなたのコードはうまく動作します。あなたのケースでうまくいかない場合は、その列がテキストとして書式設定されていると思います。書式を数値または標準に変更するだけです。
これを試してみてください。
Private Sub Correction_of_dot()
Columns("P:P").Select
Selection.NumberFormat = "General"
Dim i As String
Dim k As String
i = "."
k = ""
Columns("P:P").Replace what:=i, replacement:=k, lookat:=xlPart, MatchCase:=False
i = ","
k = "."
Columns("P:P").Replace what:=i, replacement:=k, lookat:=xlPart, MatchCase:=False
End Sub
マクロ介入がテキスト値で列を選択することである必要はありません簡単な解決策、後藤Data
タブ==>Text to Columns
==>次==>次==>General
を選択列データ形式。
カンマ(高度なオプションの下)、10進数または桁区切りである場合にもExcelを伝えることができます...
てみてくださいこれを使ってコードは、最初に、小数点の区切り記号が列にあるものと一致するように言語を変更します。それはExcelにそれをテキストとして保存された数字として認識させます。今の数字私の地域の設定を1として
Sub CorrectIncorrectNumberFormat()
With Application
.UseSystemSeparators = False
.DecimalSeparator = ","
.ThousandsSeparator = "."
End With
'Update to your applicable range I've set it to sheet1 Column A
With Sheet1
With Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 1))
.TextToColumns Destination:=.Cells(1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
End With
End With
With Application
.DecimalSeparator = "."
.ThousandsSeparator = ","
.UseSystemSeparators = True
End With
End Sub
あなたは可能性があり、列をループと置換機能を使用しています。
Dim i As Long
Dim finalRow As Long
finalRow = SheetX.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 to finalRow
SheetX.Cells(i, 1).Value = Replace(SheetX.Cells(i, 1).Value, ".", "")
SheetX.Cells(i, 1).Value = Replace(SheetX.Cells(i, 1).Value, ",", ".")
Next i
注:これはテストしませんでしたが、動作するはずです。 また、CodeXが適切なシートにSheetXを変更し、必要に応じて列参照を変更します(この例では列1)。
これらのサブセットはいつ呼び出されますか?列のデータ型を必要な形式に変更するのは簡単ではありませんか? – Quirinux
コードが正しく表示されますが、Worksheets( "Sheet1")などのワークシートを明示的に宣言する価値があります... – Leroy