টেক্সট, .মূল্য এবং। মূল্য 2 এর মধ্যে পার্থক্য কী?


179

আমি কোনও স্ক্রিপ্টের সাহায্য চাইছি না, তবে আমার প্রশ্নটি স্পষ্টির জন্য। ইদানীং আমি এক্সেলে প্রচুর ভিবি স্ক্রিপ্টিং করছি, তাই আমি এই প্রশ্নে সত্যই এক্সেলকে উল্লেখ করছি। টেক্সট, .মূল্য এবং। মূল্য 2 এর মধ্যে পার্থক্য কী? আমার কখন টার্গেট.টেক্সট, টার্গেট.ভ্যালু এবং টার্গেট.ভ্যালু 2 ব্যবহার করা উচিত? আমি কখনই মান 2 বিকল্পটি ব্যবহার করি নি তবে এখনও এটির জন্য কী ব্যবহার করা হবে তা জানতে চাই।

কখনও কখনও যদি আমি টেক্সট ব্যবহার করি তবে এটি আমাকে একটি ত্রুটি দেয় এবং আমার ব্যবহার করা দরকার val মূল্য যখন আমি কেবল কোনও ঘরের মধ্যে পাঠ্যটি পরীক্ষা করে নিই বা পরিচালনা করি। তারপরে মাঝে মাঝে যখন আমার মনে হয় আমার .আর ব্যবহার করা উচিত তবে আমি একটি ত্রুটি পাই এবং আমার .text ব্যবহার করা দরকার। সাধারণত এটি হয় বা কোনও ইস্যু ছাড়াই গ্রহণ করে তবে কখনও কখনও এটি কোনও পার্থক্য করে। আমি জানি এটির জন্য কিছু যুক্তি থাকতে হবে, তবে আমি তা খুঁজে বের করতে পারি না।

আমি আরও জানতে পেরেছি যে আপনি যদি এটি নির্দিষ্ট হিসাবে উল্লেখ না করে লক্ষ্য হিসাবে ছেড়ে দেন। পাঠ্য বা। মূল্য এটি শুরুতে কাজ করবে, তবে তারপরে কেউ এমন কিছু করে যা শেষ পর্যন্ত স্ক্রিপ্টটিকে ত্রুটির কারণ হিসাবে চিহ্নিত করে, তাই এটিতে সর্বদা কিছু ব্যবহার করা ভাল is । আমি অনুমান করি যে আমি যদি জিজ্ঞাসা করছি তা হ'ল যদি কেউ আমাকে কোনও ধরণের গাইডলাইন, থাম্বের নিয়ম দিতে পারে তবে প্রতিটি কীভাবে সঠিকভাবে ব্যবহার করতে হয় এবং কখন এটি ব্যবহার করা প্রয়োজন।

বলছি ছেলেদের জন্য ধন্যবাদ। আমি এক ধরনের এটি আরও ভাল বুঝতে। তারা উভয়ই ভাল ব্যাখ্যা। নীচে আমার কোডগুলির কিছু ক্ষুদ্র উদাহরণ যা কাজ করে। আমি ভেবেছিলাম এটি টার্গেট.টেক্সট হওয়া উচিত, তবে এটি লক্ষ্যবস্তু ব্যবহার করার সময় ত্রুটি ঘটবে val

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

আমি এখনও কিছুটা বিভ্রান্ত হয়ে পড়েছি কারণ যখন আমি মান বা মান 2 সম্পর্কে চিন্তা করি, বিশেষত আপনার দেওয়া উত্তরগুলির পরে, আমি মনে করি সেগুলি কেবল সংখ্যার জন্য ব্যবহার করা উচিত। যাইহোক, আমার উদাহরণে আমি কঠোরভাবে পাঠ্যের বিষয়ে কথা বলছি, যা আমার স্ক্রিপ্টটি অনেকটা বোঝায় (কোষে পাঠ্য সংখ্যা, সংখ্যার চেয়ে বেশি)।


LCase (Target.Value) ব্যর্থ হবে যদি Target.Value একটি স্ট্রিংয়ের জন্য বাধ্যতামূলক না হয় যেহেতু LCase এর একটি আর্গুমেন্টের জন্য একটি স্ট্রিং প্রয়োজন। আমার উত্তর অনুসারে আপনার প্রথমে ভারটাইপ পরীক্ষা করা উচিত। এছাড়াও নোট করুন আপনি পরিবর্তে ইউকেস ব্যবহার করতে পারেন এবং সরাসরি "এইচএলও" এর সাথে তুলনা করতে পারেন: আক্ষরিকরূপে পরিচালনার ক্ষেত্রে খুব বেশি পয়েন্ট নয়।
বাথশেবা

ভারটাইপ সম্পর্কে তথ্যের জন্য ধন্যবাদ। যতদূর পর্যন্ত এটির জন্য এলসিএস বা ইউকেস, এটি আমি কোনটি ব্যবহার করেছি তা সত্যিই বিবেচিত হবে না। কিছু লোক এটিকে hlo টাইপ করেন এবং অন্যরা এটিকে HLO হিসাবে টাইপ করেন। যা আমি দেখেছি তা থেকে দেখা গেছে যে লোয়ার কেসটি প্রায়শই ব্যবহৃত হয়।
ক্রিস

উত্তর:


236

.Textঘরের জন্য স্ক্রিনে যা প্রদর্শিত হবে তা উপস্থাপন করে একটি স্ট্রিং আপনাকে দেয়। টেক্সট ব্যবহার করা সাধারণত একটি খারাপ ধারণা কারণ আপনি #### পেতে পারেন

.Value2 আপনাকে ঘরের অন্তর্নিহিত মান দেয় (খালি, স্ট্রিং, ত্রুটি, সংখ্যা (ডাবল) বা বুলিয়ান হতে পারে)

.Value সেলটি মুদ্রা বা তারিখ হিসাবে ফর্ম্যাট করা থাকলে এটি আপনাকে কোনও ভিবিএ মুদ্রা দেয় (যা দশমিক স্থানগুলি কাটাতে পারে) বা ভিবিএ তারিখ দেয় সেগুলি ব্যতীত আপনাকে .Value2 হিসাবে একই দেয়।

.Value বা .Txt ব্যবহার করা সাধারণত একটি খারাপ ধারণা কারণ আপনি ঘর থেকে আসল মান নাও পেতে পারেন এবং সেগুলি .Value2 এর চেয়ে ধীর হয় are

আরও বিস্তৃত আলোচনার জন্য আমার পাঠ্য বনাম মান বনাম মান 2 দেখুন


6
সংখ্যাটি কীভাবে স্ট্রিংয়ে রূপান্তরিত হয় তা নিয়ন্ত্রণ করতে আমি সম্ভবত ফর্ম্যাট ব্যবহার করব: var = ফর্ম্যাট (পরিসর ("a1") 2 মান 2, "#")
চার্লস উইলিয়ামস

2
আমি আশা করি এটি আলাদা প্রশ্ন নয় তবে: ডিফল্টটি কী? ওপি অস্পষ্টভাবে দাবি করে যে পাঠ্য / মান / মান 2 রেখে যাওয়া সমস্যাযুক্ত, তবে অবশ্যই এটির একটির সাথে এটি ডিফল্ট ?
মার্টিন এফ

3
এই উওলড পোস্টটি জাগানোর জন্য দুঃখিত, তবে যখন আপনার যা প্রয়োজন তা হ'ল আমি যখন Dateএকটি Double(ব্যবহার করে .Value2) তে জোর করে ফেলার সুবিধা দেখতে ব্যর্থ হচ্ছি Date। আপনি যখন কোনও মান খুঁজছেন তখন .Valueতার চেয়ে বেশি পছন্দ করা উচিত নয় ? সংযুক্ত নিবন্ধটি খুব খুব পরিষ্কার করে না। পারফরম্যান্স না কারণ কোনও রূপান্তর? অবশ্যই, তবে তারপরে যদি আপনার ভিবিএ কোডটি একটি নিয়ে কাজ করে তবে আপনি নিজেই রূপান্তর সম্পাদন করে সেই প্রান্তটি হারাবেন, সুস্পষ্টভাবে বা স্পষ্টভাবে ... (প্রসঙ্গে - ওজনে নির্দ্বিধায় বোধ করবেন).Value2DateDate
ম্যাথিউ গুয়ন্ডন

2
@ ম্যাটস মগ - সমস্যাটি হ'ল এক্সেলের সত্যিকারের তারিখের ডেটা টাইপ নেই - এক্সেলের তারিখ এবং সময় কেবল দ্বিগুণ যেগুলি ব্যবহারকারী দ্বারা তারিখ, সময় বা মুদ্রা হিসাবে প্রদর্শিত হতে পরিবর্তিত হয়েছে বা পরিবর্তিত হয়েছে তার উপর নির্ভর করে সংখ্যা। সুতরাং মান একটি ভিবিএ তারিখে এক্সেলকে দ্বিগুণ করে দিচ্ছে তবে মান 2 কোনও চাপ দিচ্ছে না ... তারিখের জন্য ডাবলকে দ্বিগুণ চাপ দেওয়া সম্ভবত কোনও ক্ষতি করছে না যতক্ষণ কোড বুঝতে পারে যে তার পরিবর্তনশীল বিন্যাসের উপর নির্ভরশীল: পেশাদার এবং যেভাবেই হোক না কেন - আমাদের সমস্যাটি এড়াতে আমাদের আরও বেশি প্রয়োজন দেশীয় এক্সেল ডেটা ধরণের।
চার্লস উইলিয়ামস

2
একটি টাইপ রূপান্তর ছাড়া অন্য কক্ষের সমান আমি একটি সেল মান সেট চান, তখন (উদাহরণস্বরূপ, একটি সংখ্যা পাঠ্য হিসাবে সংরক্ষিত একটি সংখ্যা রূপান্তর করা ছাড়াই) আমি এই ব্যবহার করুন: Format$(Range.Value2, Range.NumberFormat)
ক্রিসবি

55

এমএসডিএন তথ্য বাদে প্রথম উত্তর ফর্ম বাথশেবা ব্যতীত:

.ভ্যালু .ভ্যালু
2।
পাঠ্য

বিশ্লেষণ করা বৈশিষ্ট্যের মধ্যে পার্থক্য সম্পর্কে ভাল বোঝার জন্য আপনি এই সারণীগুলি বিশ্লেষণ করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন


4
@ ক্রিস, .Valueপাঠ্য এবং সংখ্যার জন্য সর্বদা স্ট্যান্ডার্ড সম্পত্তি হিসাবে ব্যবহার করুন । .Value2আপনি তারিখ এবং কিছু সংখ্যার কথা চিন্তা করলে ব্যবহার করুন । .Textআপনার যদি ঘর / ব্যাপ্তিতে থাকা কোনও কিছুর ফর্ম্যাটিং রাখতে প্রয়োজন হয় এবং সর্বদা ব্যবহার করুন । সুতরাং, আপনার প্রশ্নের উদাহরণ যদি সঠিক হয়!
কাজিমিয়ারজ জাওর

1
কেন তারিখটি 10:12 থেকে 10:05 এ পরিবর্তিত হয়েছে? টাইপো?
ক্যাটরিন

1
আমি মনে করি ফলাফল উত্পন্ন করার সময় এবং স্ক্রিন শট তৈরির সময়ের মধ্যে কেবল সময় অতিবাহিত হয়েছে
কাজিমিয়ারেজ জাওর ২

25

target.Valueআপনাকে এক Variantপ্রকার দেবে

target.Value2আপনাকে Variantপাশাপাশি একটি টাইপ দেবে তবে একটি Dateজোর করে একটি aDouble

target.Textএকটি থেকে নিগৃহীত প্রচেষ্টা Stringএবং যদি অন্তর্নিহিত ব্যর্থ হবে Variantএকটি থেকে coercable নয় Stringটাইপ

সবচেয়ে নিরাপদ কাজটি হ'ল কিছু

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

VBA.VarType(v)আপনি সুস্পষ্ট জবরদস্তির চেষ্টা করার আগে ব্যবহার করে বৈকল্পিকের ধরণটি পরীক্ষা করুন ।


11

সি # তে সম্মেলনের বিষয়ে। ধরা যাক আপনি একটি ঘর পড়ছেন যার মধ্যে একটি তারিখ রয়েছে, যেমন 2014-10-22।

ব্যবহার করার সময়:

.Text, আপনি অন-স্ক্রিনে ওয়ার্কবুকে দেখা যায়, তারিখটির ফর্ম্যাট উপস্থাপনা পাবেন:
2014-10-22 । এই সম্পত্তির ধরণ সর্বদা থাকে stringতবে সর্বদা সন্তোষজনক ফলাফল না দেয়।

.Value, সংকলক তারিখটিকে কোনও DateTimeবস্তুতে রূপান্তরিত করার চেষ্টা করে : -10 2014-10-22 00:00:00 dates সম্ভবত তারিখগুলি পড়ার সময় কেবলমাত্র দরকারী।

.Value2, আপনাকে ঘরের আসল, অন্তর্নিহিত মান দেয়। তারিখগুলির ক্ষেত্রে এটি একটি তারিখ সিরিয়াল: 41934 । এই বৈশিষ্ট্যের ঘরের বিষয়বস্তুর উপর নির্ভর করে আলাদা ধরণের থাকতে পারে। তারিখ সিরিয়াল যদিও, টাইপ হয়double

সুতরাং আপনি কোনও ঘরে কোনও কক্ষের মূল্য পুনরুদ্ধার করতে এবং সঞ্চয় করতে পারেন dynamic, varবা objectনোট করুন যে মানটিতে সর্বদা কিছু প্রকারের সহজাত প্রকার থাকবে যা আপনাকে কার্যকর করতে হবে।

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

2

। পাঠ্যটি হ'ল বিন্যাসিত কক্ষের প্রদর্শিত মান; .মূল্য হ'ল তারিখ বা মুদ্রা সূচকের সাথে সম্ভবত বাড়ানো ঘরের মান; .Value2 হ'ল কাঁচা অন্তর্নিহিত মান যে কোনও বহিরাগত তথ্য ছিনিয়ে নেওয়া।

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

আপনি যদি ঘরের মানটি প্রক্রিয়া করে থাকেন তবে কাঁচা .ভ্যালু 2 পড়া .ভ্যালু বা। পাঠ্যের চেয়ে প্রান্তিকভাবে দ্রুত। আপনি যদি ত্রুটিগুলি চিহ্নিত করে থাকেন তবে পাঠ্যটি #N/Aপাঠ্যের মতো কিছু ফিরে আসবে এবং একটি স্ট্রিংয়ের সাথে তুলনা করা যেতে পারে V আপনার ডেটাতে যদি কিছু কাস্টম সেল ফর্ম্যাটিং প্রয়োগ করা থাকে তবে প্রতিবেদন তৈরির সময় পাঠ আরও ভাল পছন্দ হতে পারে।


0

কৌতূহলের বাইরে, আমি দেখতে চেয়েছিলাম কীভাবে এর Valueবিরুদ্ধে অভিনয় করা হয়েছিল Value2। প্রায় 12 টি একই ধরণের প্রক্রিয়াগুলির পরে, আমি গতিতে কোনও উল্লেখযোগ্য পার্থক্য দেখতে পাইনি তাই আমি সর্বদা ব্যবহারের পরামর্শ দেব recommendValue । আমি বিভিন্ন রেঞ্জের সাথে কিছু পরীক্ষা চালানোর জন্য নীচের কোডটি ব্যবহার করেছি।

যদি কেউ পারফরম্যান্স সম্পর্কিত কোনও বিপরীতে দেখেন তবে পোস্ট করুন।

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

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.