IT박스

.text, .value 및 .value2의 차이점은 무엇입니까?

itboxs 2020. 5. 31. 21:06
반응형

.text, .value 및 .value2의 차이점은 무엇입니까?


스크립트에 대한 도움을 요청하지는 않지만 설명은 명확합니다. 최근에 Excel에서 많은 VB 스크립팅을 해왔 으므로이 질문에서 Excel을 실제로 언급하고 있습니다. .text, .value 및 .value2의 차이점은 무엇입니까? 언제 target.text, target.value 및 target.value2를 사용해야합니까? 나는 value2 옵션을 사용하지 않았지만 여전히 그것이 사용되는 것을 알고 싶습니다.

때로는 .text를 사용하면 오류가 발생하고 셀 내에서 텍스트를 확인하거나 조작 할 때 .value를 사용해야합니다. 그런 다음 때로는 .value를 사용해야한다고 생각되면 오류가 발생하고 .text를 사용해야합니다. 일반적으로 문제의 유무에 관계없이 수락하지만 때로는 차이가 있습니다. 나는 이것에 어떤 논리가 있어야한다는 것을 알고 있지만 그것을 알아낼 수는 없습니다.

또한 .text 또는 .value를 지정하지 않고 대상으로 남겨두면 처음에는 작동하지만 누군가가 결국 스크립트 오류를 ​​일으킬 수 있으므로 항상 .something을 사용하는 것이 가장 좋습니다. . 내가 묻는 것은 누군가가 나에게 각각의 올바른 사용법과 사용시기에 관한 일종의 지침, 경험 법칙을 줄 수 있는지 여부입니다.

설명해 주셔서 감사합니다. 나는 그것을 더 잘 이해합니다. 둘 다 좋은 설명입니다. 아래는 작동하는 일부 코드의 작은 예입니다. target.text이어야한다고 생각했지만 target.value를 사용할 때 오류가 발생했습니다.

If LCase(Target.Value) = LCase("HLO") And Target.Column = 15 Then
    Target.Value = "Higher Level Outage"
End If

value 나 value2를 생각할 때, 특히 당신이 제공 한 대답 후에 숫자로만 사용해야한다고 생각하기 때문에 여전히 약간 혼란 스럽습니다. 그러나 내 예제에서 나는 엄격히 텍스트에 대해 이야기하고 있는데, 이것은 내 스크립트가 말하는 많은 것입니다 (셀의 텍스트, 숫자보다 더).


.Text셀 화면에 표시되는 내용을 나타내는 문자열을 제공합니다. ####을 얻을 수 있기 때문에 .Text를 사용하는 것은 일반적으로 나쁜 생각입니다.

.Value2 셀의 기본 값을 제공합니다 (빈, 문자열, 오류, 숫자 (이중) 또는 부울 수 있음).

.Value 셀이 통화 또는 날짜 형식 인 경우 VBA 통화 (소수 자릿수를자를 수 있음) 또는 VBA 날짜를 제공한다는 점을 제외하고는 .Value2와 동일합니다.

.Value 또는 .Text를 사용하는 것은 일반적으로 셀에서 실제 값을 얻지 못하고 .Value2보다 느리기 때문에 나쁜 생각입니다.

더 광범위한 논의는 내 텍스트 대 가치 대 가치 2를 참조하십시오.


다음에 대한 MSDN 정보를 제외한 첫 번째 답변 양식 Bathsheba는 제외합니다.

.Value
.Value2
는 .text

분석 된 속성 간의 차이점을 더 잘 이해하기 위해이 표를 분석 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


target.Value당신에게 Variant유형 을 줄 것입니다

target.Value2당신 Variant에게도 유형을 것이지만 a DateDouble

target.Texta에 강제를 시도 String하고 기본 VariantString유형 에 강제 되지 않으면 실패합니다.

가장 안전한 방법은

Dim v As Variant
v = target.Value 'but if you don't want to handle date types use Value2

VBA.VarType(v)명시 적 강제를 시도하기 전에 사용하는 변형 유형을 확인하십시오 .


C #의 규칙에 대하여 날짜가 포함 된 셀 (예 : 2014-10-22)을 읽고 있다고 가정합니다.

사용할 때:

.Text,
2014-10-22 화면의 통합 문서에서 볼 수 있듯이 형식화 된 날짜 표시가 나타납니다 . 이 속성의 유형은 항상 string만족 스럽지만 항상 만족스러운 결과를 반환하지는 않습니다.

.Value컴파일러는 날짜를 DateTime객체 로 변환하려고 시도 합니다 : {2014-10-22 00:00:00} 대부분 날짜를 읽을 때만 유용합니다.

.Value2, 셀의 실제 기본 가치를 제공합니다. 날짜의 경우 날짜 일련 번호는 41934 입니다. 이 속성은 셀 내용에 따라 다른 유형을 가질 수 있습니다. 날짜 일련 번호의 경우 유형은 double입니다.

So you can retrieve and store the value of a cell in either dynamic, var or object but note that the value will always have some sort of innate type that you will have to act upon.

dynamic x = ws.get_Range("A1").Value2;
object  y = ws.get_Range("A1").Value2;
var     z = ws.get_Range("A1").Value2;
double  d = ws.get_Range("A1").Value2;      // Value of a serial is always a double

.Text is the formatted cell's displayed value; .Value is the value of the cell possibly augmented with date or currency indicators; .Value2 is the raw underlying value stripped of any extraneous information.

range("A1") = Date
range("A1").numberformat = "yyyy-mm-dd"
debug.print range("A1").text
debug.print range("A1").value
debug.print range("A1").value2

'results from Immediate window
2018-06-14
6/14/2018 
43265 

range("A1") = "abc"
range("A1").numberformat = "_(_(_(@"
debug.print range("A1").text
debug.print range("A1").value
debug.print range("A1").value2

'results from Immediate window
   abc
abc
abc

range("A1") = 12
range("A1").numberformat = "0 \m\m"
debug.print range("A1").text
debug.print range("A1").value
debug.print range("A1").value2

'results from Immediate window
12 mm
12
12

If you are processing the cell's value then reading the raw .Value2 is marginally faster than .Value or .Text. If you are locating errors then .Text will return something like #N/A as text and can be compared to a string while .Value and .Value2 will choke comparing their returned value to a string. If you have some custom cell formatting applied to your data then .Text may be the better choice when building a report.


Out of curiosity, I wanted to see how Value performed against Value2. After about 12 trials of similar processes, I could not see any significant differences in speed so I would always recommend using Value. I used the below code to run some tests with various ranges.

If anyone sees anything contrary regarding performance, please post.

Sub Trial_RUN()
    For t = 0 To 5
        TestValueMethod (True)
        TestValueMethod (False)
    Next t

End Sub




Sub TestValueMethod(useValue2 As Boolean)
Dim beginTime As Date, aCell As Range, rngAddress As String, ResultsColumn As Long
ResultsColumn = 5

'have some values in your RngAddress. in my case i put =Rand() in the cells, and then set to values
rngAddress = "A2:A399999" 'I changed this around on my sets.



With ThisWorkbook.Sheets(1)
.Range(rngAddress).Offset(0, 1).ClearContents


beginTime = Now

For Each aCell In .Range(rngAddress).Cells
    If useValue2 Then
        aCell.Offset(0, 1).Value2 = aCell.Value2 + aCell.Offset(-1, 1).Value2
    Else
        aCell.Offset(0, 1).Value = aCell.Value + aCell.Offset(-1, 1).Value
    End If

Next aCell

Dim Answer As String
 If useValue2 Then Answer = " using Value2"

.Cells(Rows.Count, ResultsColumn).End(xlUp).Offset(1, 0) = DateDiff("S", beginTime, Now) & _
            " seconds. For " & .Range(rngAddress).Cells.Count & " cells, at " & Now & Answer


End With


End Sub

여기에 이미지 설명을 입력하십시오

참고 URL : https://stackoverflow.com/questions/17359835/what-is-the-difference-between-text-value-and-value2

반응형