2016-07-05 7 views
0

私がテストに使用するtxtファイルをビルドするためのvbaコードを作成しようとしています。私は問題にぶつかっている。私の結果の中には、00を使って落としたものがありますStr = Str & "00" & Left(CashRightJust(Range("h63"), 11), 9) これは基本的にはセルH63​​を見るように指示していますが、量を右に揃えていますが、
私の問題は、現在、.25のような実際の変更をテストする必要があることです。このコードを単独で使用すると、変更の最後にゼロが追加されます。 .00以上であれば反映するようにこのコードを調整する必要があります。00編集またはゼロを追加しないでくださいExcel VBA - 指定した文字数でゼロを削除して追加する

これは意味があると思います。私はまだこれでかなり新しいですし、かなり遠くになっていますが、まだ迷っている瞬間があります。ありがとうございました。

Spreadsheet created to build code to send to txt file

Function Detail_Rec1() 




    Dim strlencount As Integer 
    Dim strspacer As Integer 



    If Range("b63").Value <> "5" Then 
     Exit Function 
    End If 

    Str = Str & Range("b63").Value  **Result: 5** 
    Str = Str & Range("c63").Value  **Result: 400** 
    Str = Str & Range("d63").Value  **Result: 1234567**  

    Str = Module1.SpaceAdd(Str, 1)  **Result: 1 space** 

    Str = Str & Trim(Range("e63").Value) 
    strlencount = Len(Trim(Range("e63").Value)) 
    strspacer = 30 - strlencount 
    Str = Module1.SpaceAdd(Str, strspacer) **Result: Company name with spacefill for 30 character; name is left justified** 

    Str = Str & Trim(Range("f63").Value) 
    strlencount = Len(Trim(Range("f63").Value)) 
    strspacer = 11 - strlencount 
    Str = Module1.SpaceAdd(Str, strspacer) **Result: Company ID number; left justify; space filled total 11 characters** 

    Str = Str & Range("G63").Value   Result: 116 

    Str = Str & CashRightJust(Range("h63"), 11) **Result: 1000; only 1000 no cents; dollars only; 11 character zero filled right justify** 
    Str = Str & CashRightJust(Range("i63"), 11)**Result: 1000; only 1000 no cents; dollars only; 11 character zero filled right justify** 
    Str = Str & CashRightJust(Range("j63"), 11)**Result: 1000; only 1000 no cents; dollars only; 11 character zero filled right justify** 

    Str = Str & Trim(Range("k63").Value) 
    strlencount = Len(Trim(Range("k63").Value)) 
    strspacer = 4 - strlencount 
    Str = Module1.ZeroAdd(Str, strspacer) **Result: Rate of 4 characters entered; 4 character length** 


    Str = Module1.SpaceAdd(Str, 1) **Result: 1 space** 

    Str = Str & CashRightJust(Range("l63"), 11) **Result: 3348.75 needs to be 334875. 11 characters, right justified, no decimal.** 


    Str = Str & CashRightJust(Range("m63"), 11) 


    Str = Str & CashRightJust(Range("n63"), 11) 


    Str = Str & CashRightJust(Range("o63"), 11) 



    Str = Str & "00000" & Right(Range("p63").Value, 6) 
    strlencount = Len(Trim(Range("p63").Value)) 
    strspacer = 6 - strlencount 
    Str = Module1.ZeroAdd(Str, strspacer) 

[符号化されている行のExcelの画像] [テキストファイルの表示方法] [2] 2]

私は必要なもののために私の最終的な結果は

23.45です - 2345 23.00 - 2300スペックがドルのみを示している場合を除き、それは23である必要があります 丸めなし。 私は、これはビジュアル

追加情報をより多くのアウトに役立ちます願っています:現在$ AMTSのために使用されている私のモジュールは以下の通りです:

If Str = 0 Then 
     CashRightJust = ZeroAdd(Str2, c) 
     Exit Function 
    Else 
     If InStr(Str, ".") > 0 Then 
      Str2 = Right(Str, 2) 

      If InStr(Str2, ".") > 0 Then 
       strnew = Str & "0" 
      Else 
       strnew = Str 
      End If 
     Else 
      strnew = Str & "00" 
     End If 

Excel snapshot of info being coded

540ボブのタイヤ987654321 116000000010000000000005000000009503525 00000334875

これは次のとおりです。 540ボブのタイヤ987654321 11600000100000000005000000000950003525 000334875

私はtxtファイルの画像を投稿できませんでした。十分な評判がありません。ごめんなさい;これが表示される方法です

+2

いくつかの入力サンプルと希望の出力値を追加できますか?あなたの機能が何をするのかははっきりしていません。 – arcadeprecinct

+0

なぜRight(Str、3)<。 ".00"ならばStr = Str& ".00" 'のようなものはありませんか? –

+0

私は試してみることができます:あなたがマットに言ったことを試してみて、それがうまくいくかどうか教えてください。 –

答えて

0

このようなことを試すことができますか?あなたの文字列全体がセルA1にあると仮定し、これはドルとセントが必要でない状況です(そういう場合には文字列を多かれ少なかれあなたのように聞こえるため、あなたはその状況に対処できると思います)。

lenOfStr = 11 
newStr = "" 
subStr = Right(Cells(1, 1), lenOfStr) 
If Right(subStr, 2) = "00" Then 'we need to keep these 
    lenOfStr = 9 
End If 
foundLeftmost = False 
For i = 1 To lenOfStr 
    If Mid(subStr, i, 1) <> "0" and Mid(subStr, i, 1) <> "." Then 
     newStr = newStr & Mid(subStr, i, 1) 'start collecting for the new string 
     foundLeftmost = True 
    End If 
    If foundLeftmost and Mid(subStr, i, 1) <> "." Then 'need to include zeros that may show up in the middle of the substring 
     newStr = newStr & Mid(subStr, i, 1) 
    End If 
Next i 
subStr = newStr 

最終結果はsubStrに格納されます。うまくいけば私はあなたの問題を正しく理解しました。私がしなかったら私に知らせてください。

+0

コードでこれを使用する前に明確にしましょう。もし私がこの権利を読んでいるなら、それは11文字の分野を求めています。 11文字で右揃え。 2番目の位置が00の場合は? 2番目の位置が.63の場合はどうなりますか?必要に応じてそれらも保管しますか?私はBCしか聞かない。 –

+0

入力した文字列は11文字をはるかに超えています。このコードは右端の11文字を取得します。それは先行するすべてのゼロを削除し、もしあれば、最も右の2つのゼロを保持する。 '.'を無視します。文字列の小数点について何をすべきですか? –

+0

だから、関数DollarConvertを文字列として使用するモジュールとして使用する方法を書いてみましょう –

関連する問題