2016-09-30 21 views
4

この問題は私を狂わせてしまいます!私は、次のVBA Excelのコードを持っている:それは最初の列の値を下にループしているとして、それが値FALSEまたはTRUE値を越えていた場合、VBA-Excel "FALSE"文字列を "False"に変換する

Sub Test() 

Dim sTempVal As String 

For i = 1 to 100 
    sTempVal = ActiveSheet.Cells(i, 1).Value 
    MsgBox sTempVal 
Next i 

を、それが自動的に「「偽」またはそれを読み込みます真 "である。なぜVBAが自動的に大文字と小文字を変更するのですか?セルにその値の正確な大文字小文字を保持することが本当に必要です。私は文字列としてsTempVal変数をDim'ingすることによって、それはちょうどセルの場合とすべての値を読み取ると思った。これはFALSEとTRUEにのみ適用されることに注意してください。それ以外の値は、セルに表示されているとおりに読み込まれます。

答えて

8
Sub Test() 

Dim sTempVal As String 

For i = 1 to 100 
    sTempVal = ActiveSheet.Cells(i, 1).Text 
    MsgBox sTempVal 
Next i 

の.textは "何あなたが見ることはあなたが得るものです。" です

EDIT#1:あなたは.Valueを使用する場合

VBA文字列に変換し、それはその変換のための独自の規則を使用する場合、ブールなどの項目を読み込みます。この小さなマクロを

=1=1 

と実行します:あなたは、セルを選択し、数式を入力する場合たとえば

は、

Sub WhatIsTruth() 
    MsgBox ActiveCell.Value 
End Sub 

あなたが表示されます。

enter image description here

.Textを使用してこの問題を回避します。

+1

あなたはOPのために説明する迅速な行を追加することができます彼らが具体的にその質問をしたときに '.Value'で起こっていますか? – Dave

+1

@Dave私の**編集#1 **を参照してください** ............これは何ですか?それのために –

+0

Ta。 OPの理解に役立ちます:) – Dave

4

Range.Valueは、Stringではなく、Variantを返します。変数をString変数に代入しているため、暗黙的にキャストされます。 - Excelのキャストは同棲上位である

sTempVal = CStr(ActiveSheet.Cells(i, 1).Value) 

BooleanからStringにVBAのキャストが適切な同棲さ:

この行...

sTempVal = ActiveSheet.Cells(i, 1).Value 

...と等価です。たとえば:あなたはセルにあるもののExcelの文字列表現をしたい場合は

Debug.Print CStr(0 = 0) 'Prints "True" 

、あなたの代わりにRange.Textプロパティを使用することができます。これはなぜ

sTempVal = ActiveSheet.Cells(i, 1).Text 
関連する問題