Page 1 of 1

ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Wed Dec 14, 2022 11:39 am
by wisitsakbenz
เรียน อาจารย์

ไฟล์ "Pre-Arrangement1 - Copy - Copy" คลิก Getdata > Save > จะถูกเก็บในไฟล์ "All Data Estimated"
อยากสอบถามอาจารย์ว่า ทำไมหน้า input "E22" ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000 ใน Column "CD"
ไม่แน่ใจว่าต้องแก้ไขอย่างไรครับ ขอบคุณครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Wed Dec 14, 2022 4:14 pm
by snasui
:D กรณีเช่นนี้บอกได้แต่เพียงว่าโปรแกรมมองว่า Field นั้นคือ String ไม่ใช่ Number เมื่อนำไปวางจึงกลายเป็น String แต่เมื่อดึงออกมากลับแสดงเป็น Number ได้ปกติ

เราไม่สามารถ Set Data Type ให้กับ Statement แบบรวบรัดเช่นนั้น และหากจะกำหนดค่าที่บันทึกเข้าไปแยกราย Field จะยิ่งทำให้ Code ดูยืดยาวและยุ่งยากซับซ้อน หากว่าไม่มีผลกระทบต่อการใช้งานก็สามารถใช้ได้ตามปกติ

แต่หากมีผลกระทบ สามารถแก้ไขเฉพาะหน้าโดยในตอนนำไปใช้ให้แปลงกลับเป็น Number ด้วยวิธีการใด ๆ เช่นเขียนเขียน Code เข้าไปจัดการเพื่อ Convert ให้กลายเป็น Data Type ที่ต้องการเสียก่อนครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Wed Dec 14, 2022 10:30 pm
by wisitsakbenz
เรียน อาจารย์ snasui
หากว่าไม่มีผลกระทบต่อการใช้งานก็สามารถใช้ได้ตามปกติ
เขียนเขียน Code เข้าไปจัดการเพื่อ Convert ให้กลายเป็น Data Type ที่ต้องการเสียก่อนครับ
มีผลต่อการใช้งานครับ ต้องนำค่ามารวมกันครับ
อาจารย์ แนะนำ code ที่สามารถ convert เป็น data type หนือสามารถ ศึกษาได้จากแหล่งใดครับ
ขอบคุณครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 6:02 am
by snasui
:D ดูตัวอย่างการ Loop เข้าไปในแต่ละเซลล์ตาม Link นี้ซึ่งเลือกมาให้แล้วว่าเริ่มดู ณ เวลาใด ไม่ต้องเลื่อนไปดูตั้งแต่ต้น Clip ครับ

https://youtu.be/e7quHzzLO7g?t=444

ดู Data Type Conversion (การแปลง Data Type) ได้ที่ Link นี้ครับ
https://learn.microsoft.com/en-us/offic ... -functions

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 8:36 am
by wisitsakbenz
เรียน อาจารย์ snasui
การ Loop เข้าไปในแต่ละเซลล์ตาม Link
ผมต้องการแยก Data ออกจากหน้า input ครับ เพราะข้อมูลตอนนี้มีประมาณ 4 หมื่นกว่า Row ถ้าบันทึกข้อมูลในลักษณะนี้จะทำให้ไฟล์หนัก และบันทึกช้าครับ

ผมลองปรับ Code แล้วแต่ยังไม่ได้
ไม่แน่ใจว่าปรับในส่วนนี้หรือไม่ครับ ขอคำแนะนำจากอาจารย์ด้วยครับ ขอบคุณครับ

Code: Select all

'-----other code
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = CVar("[Data$]")
    sCnstr.CursorLocation = adUseClient
'-----other code

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 10:38 am
by snasui
snasui wrote: Wed Dec 14, 2022 4:14 pm สามารถแก้ไขเฉพาะหน้าโดยในตอนนำไปใช้ให้แปลงกลับเป็น Number ด้วยวิธีการใด ๆ
:roll: คุณ wisitsakbenz เข้าใจประโยคข้างบนว่าอย่างไรครับ :?:

สิ่งที่ถามมาตามโพสต์ viewtopic.php?p=114424#p114420 นั้นเป้นขั้นตอนการนำไปใช้หรือขั้นตอนของการบันทึกเข้าไปครับ :?:

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 1:22 pm
by wisitsakbenz
เรียน อาจารย์ Snasui
สามารถแก้ไขเฉพาะหน้าโดยในตอนนำไปใช้ให้แปลงกลับเป็น Number ด้วยวิธีการใด ๆ เช่นเขียนเขียน Code เข้าไปจัดการเพื่อ Convert ให้กลายเป็น Data Type ที่ต้องการเสียก่อนครับ
ตอนแรก ผมเข้าใจว่า ---> อาจารย์ให้ลองเขียน Code มาดู
แต่ตอนนี้ผมเข้าใจว่า ---> แก้ไขโดยการลบ ' ออก ใน Sheet "All Data Estimated" ใช่หรือไม่ครับ อาจารย์
ผมเข้าใจถูกหรือไม่ครับ ขอบคุณครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 1:28 pm
by snasui
:D ไม่ใช่ครับ

ความหมายคือ ไม่ต้องสนใจว่าบันทึกเข้าไปแล้วได้ Data Type ใด ให้สนใจตอนดึงมาใช้งาน หากมันไม่แสดงเป็นตัวเลขให้ใช้ Code เข้าไปแปลงให้เป็นตัวเลขครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 2:40 pm
by wisitsakbenz
เรียน อาจารย์ Snasui

run > Sub LastData() เพื่อให้แสดงรายการล่าสุด
ค่าที่ได้ยังคงเป็น string (บาง Fields เป็น string บาง Fields เป็น integer ครับ)
ผมลองปรับ Code ไม่แน่ใจว่าปรับในส่วนนี้หรือไม่ครับ ขอคำแนะนำจากอาจารย์ด้วยครับ ขอบคุณครับ

Code: Select all

'-----other code
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = CVar("[Data$]")
    sCnstr.CursorLocation = adUseClient
'-----other code

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 3:38 pm
by snasui
wisitsakbenz wrote: Wed Dec 14, 2022 10:30 pm มีผลต่อการใช้งานครับ ต้องนำค่ามารวมกันครับ
:D ค่อย ๆ ถามตอบกันไปครับ จากประโยคด้านบน รวมที่ไหนเมื่อไรครับ :?:

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 4:01 pm
by wisitsakbenz
เรียน อาจารย์ Snasui

จะ Sum (E22+G22) ครับอาจารย์
จากไฟล์นี้ค่าที่ดังออกมา สามารถรวมได้ปกติ แต่ใช้งานจริง บาง Fields ที่เป็น Text จะไม่สามารถรวมได้ครับ
ขอบคุณครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 4:13 pm
by snasui
:D สามารถเขียนบวกกันธรรมดาได้เลยครับ

=E22+G22

หรือมีปัญหาใดครับ :?:

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 4:21 pm
by wisitsakbenz
เรียน อาจารย์ Snasui

ไฟล์ที่ใช้งานจริง บวกผิดครับ ต้องได้ค่า 19200 ครับ
ไม่แน่ใจว่าผิดอย่างไรครับ ขอบคุณครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 4:23 pm
by snasui
:D แนบไฟล์นั้นมาและตัดมาเป็นตัวอย่างจะได้เห็นว่าบวกอย่างไร ผิดอย่างไร จะได้แก้ปัญหาได้ถูกจุดครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 4:33 pm
by wisitsakbenz
เรียน อาจารย์

ไฟล์จริงมีขนาดใหญ่ เลยตัดให้เฉพาะส่วนที่คำนวณครับ
ขอบคุณครับ

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 4:39 pm
by snasui
:D ปรับสูตรเป็นด้านล่างครับ

=SUMPRODUCT(--A1:B12)

สิ่งที่ผมแนะนำให้แก้คือ Loop ไปแก้ที่ไฟล์นี้ซึ่งเป็นการนำไปใช้งาน เพื่อแปลงค่าแต่ละเซลล์ให้เป็น Number เสียก่อน แต่ดูเหมือนจะไม่เข้าใจในสิ่งที่แนะนำไป กลับพยายามจะไปปรับ Code ในตอนบันทึกอยู่ตลอดเวลา :P

Re: ใส่เป็นตัวเลข 5000 แต่ถูกจัดเก็บ เป็น '5000

Posted: Thu Dec 15, 2022 4:48 pm
by wisitsakbenz
เรียน อาจารย์ Snasui
=SUMPRODUCT(--A1:B12)

สิ่งที่ผมแนะนำให้แก้คือ Loop ไปแก้ที่ไฟล์นี้ซึ่งเป็นการนำไปใช้งาน เพื่อแปลงค่าแต่ละเซลล์ให้เป็น Number เสียก่อน แต่ดูเหมือนจะไม่เข้าใจในสิ่งที่แนะนำไป กลับพยายามจะไปปรับ Code ในตอนบันทึกอยู่ตลอดเวลา :P
สูตรนี้ใช้ได้แล้วครับ
ขอโทษอาจารย์ด้วยครับ ขอบคุณอาจารย์ที่แนะนำครับ
ขอบคุณครับ