2016-08-30 25 views
2

特定の変数の前に+記号を追加しようとしています。 例:私がしなければサブ/関数を使用して変数を変更する

Sub mySub() 
    Dim cash As Variant 
End Sub 

それがうまく機能:

Dim plus As String 
plus = "+" 


If cash > 0 Then 
    cash = plus & cash 
    Else 
    cash= cash 
End If 

しかし、私はすべての私の変数を取り、彼ら場合は、それらの前にある+記号を追加し、サブや関数を探していましたポジティブです。

sub NewSub(i As Variant) 
    If i > 0 Then 
     i = plus & i 
     Else 
     i = i 
    End If 
End sub 

しかし、私に何を(私は、Excelのセルで私の変数を表示)表示されませんように動作していないようです。機能も機能しません。

これを行うためのサブ/関数の作成方法に関するアイデアはありますか?変数をループすることはできますか?

+1

セルの書式設定を使用しましたか? –

答えて

3

まず、すべての変数を明示的に宣言し、実行時ではなくVBAエディタで不一致エラーをキャッチするOption Explicitを使用します。

次に、左端に「プラス」記号を付けることによって数値変数を文字列に変更する場合、元の変数はバリアント型でなければなりません。サブプロシージャにパラメータを渡してサブを変更する場合は、パラメータはByRefでなければなりません。

また、変数を関数にプッシュして新しい値を返すこともできます。

Option Explicit 

Sub main() 
    Dim cash As Variant, cash2 As Variant 

    cash = 10 
    Debug.Print cash '10 (as number) 

    AddPlus cash 
    Debug.Print cash '+10 (as string) 

    cash = 10 
    Debug.Print cash '10 (as number) 

    cash = udfAddPlus(cash) 
    Debug.Print cash '+10 (as string) 

End Sub 

Sub AddPlus(ByRef i As Variant) 
    If i > 0 Then 
     i = "+" & i 
    Else 
     i = i 
    End If 
End Sub 

Function udfAddPlus(i As Variant) 
    If i > 0 Then 
     udfAddPlus = "+" & i 
    Else 
     udfAddPlus = i 
    End If 
End Function 

Debug.Printコマンドは、VBEのImmediate windowに出力を送信します。

+0

これは完璧に感謝しています!今では関数を使ってさまざまな変数をループする方法を知っていますか?(関数をcash1で開始し、cashnで停止するように指示する) – lo1ngru

+1

宣言するための*現金*変数が数多くある場合は、配列を使用します。 'dim cash(3)variant 'は4つのバリアント変数を生成する。現金(0)、現金(1)、現金(2)、現金(3)である。 [LBound](https://msdn.microsoft.com/en-us/library/t9a7w1ac(v = versus90).aspx)から[UBound](https://msdn.microsoft.com/en)にループスルーします。 -us/library/office/gg278658.aspx)。 – Jeeped

関連する問題