1

テキストとドルの値が混在するセルを含むスプレッドシートがあります。セル全体がテキストの文字列です。たとえば、セルに「Tom owes $65.5」が含まれている場合があります。

残念ながら、ドルの値に最後の「0」が付いていないスプレッドシートが提供されました。これらは単なるテキスト文字列であるため、セルを簡単にフォーマットできません。検索と置換を使用して値を正しい形式に変更しようとしましたが、何千ものレコードがあり、すべてのシナリオを試して説明するには時間がかかりすぎます。

文字列の一部が金額であるかどうかを確認し、必要に応じて末尾の 0 を追加する方法はありますか? 何かのようなもの

$* が 4 文字の
場合、最後に 0 を追加 $* が 3 文字未満の場合、最後に .00 を追加

また、金額は常にテキスト文字列の末尾にあるとは限らず、小数点以下 1 桁で終わるとは限りません。「$6.75」は文の途中にあります。また、歯車に別のレンチを投げるには、文字列に他の数字が含まれている可能性があるため、ドル記号に続く数字のみをターゲットにできる必要があります。

4

2 に答える 2

2

Excel でこれを行う手順。. .

これは、VBA を使用せずに Excel で完全に実行できると思います (ただし、ワークシートのスクリーン ショットを見せていただければ、これを実行するための小さなマクロを作成できます)。これから行うことの基本的な概要は次のとおりです。

  1. 混合データを含むセルの右側に列を挿入します (空白の場合は列を使用します)。
  2. (a) データにドル記号があるかどうかをチェックし、(b) ドル記号の右側から始まる値を取得し、(c) そのテキストを値に変換し、(d) 数式を各セルに挿入します。その値をセルに挿入します。
  3. 作成したばかりの列の右側に別の列を挿入します。
  4. その新しい列に、1 列目と 2 列目の値を連結する数式を挿入します。連結するときは、必ずテキスト関数を使用して金額をフォーマットしてください (以下に示す連結式に含めました)。

手順の説明。. .

現在のワークシート

私が想像していることから、ワークシートが現在どのように見えるかの基本的なデモンストレーションは次のとおりです。

ここに画像の説明を入力

ご覧のとおり、最初の列 (または元の列) には、テキストと金額が混在しています。

数式を 2 列目に挿入する

次に、次の式を 2 番目の列に挿入します。

=IF(IFERROR(SEARCH("$",A4)>0,0)>0,VALUE(RIGHT(A4,LEN(A4)-SEARCH("$",A4))),"False")

2 番目の列に入力された数式の画像

数式を 3 番目の列に挿入します

ここで、最初の列の値の左側と 2 番目の列の値の右側を連結する数式を挿入します (再度テキストとして書式設定した後)。式は次のとおりです。

=IF(B7<>"False",CONCATENATE(LEFT(A7,FIND("$",A7)-1),TEXT(B7,"$#,##0.00")),"")

3 列目に入力された数式の画像

これで、値をコピーして最初の列に貼り付けるだけで完了です。


編集

それらをコピー/貼り付けする場合は、おそらくその連結式を変更して値を元の値に戻す必要があることを忘れていました。編集した式は次のとおりです。

=IF(B7<>"False",CONCATENATE(LEFT(A7,FIND("$",A7)-1),TEXT(B7,"$#,##0.00")),A7)
于 2013-07-19T22:38:23.747 に答える
2

この VBA ユーザー定義関数 (UDF) は、あなたが望むことを行うと思います。これはhttp://yoursumbuddy.com/regex-function-sum-numbers-string/での私の精力的な作業に基づいています:

Function FixDollarsInStrings(Instring As String) As String

Dim regex As VBScript_RegExp_55.RegExp
Dim rgxMatch As VBScript_RegExp_55.Match
Dim rgxMatches As VBScript_RegExp_55.MatchCollection
Dim Outstring As String
Set regex = New VBScript_RegExp_55.RegExp
With regex
    .Global = True
    .Pattern = "(^| )\$(\d+|\.|,)+((?= )|$)"
    Outstring = Instring
    If .test(Instring) Then
        Set rgxMatches = .Execute(Instring)
        For Each rgxMatch In rgxMatches
            If IsNumeric(Trim(Replace(rgxMatch, ",", ""))) Then
                Outstring = Replace(Outstring, Trim(rgxMatch), Format(rgxMatch, "$#,##0.00"))
            End If
        Next rgxMatch
    End If
End With
FixDollarsInStrings = Outstring
End Function

Microsoft VbScript Regular Expressions 5.5動作させるには、まず VBE の [ツール] > [参照] で参照を設定する必要があります。次に、このコードを通常のモジュールにコピーします。

次に、次のように呼び出します。

=fixDollarsInStrings(A2)

ここに画像の説明を入力

于 2013-07-19T22:12:27.793 に答える