:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

รบกวนถามปัญหา offset+countA ครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

รบกวนถามปัญหา offset+countA ครับ

#1

Post by kamahltew »

ออกตัวก่อนครับ ผมศึกษา(VBA)แบบครูพักลักจำ

ปัญหาจึงออกมาเป็นแบบนี้ครับ
- กด Add model แล้วมัน Error ที่ Application.Goto Reference:="AllData" ครับ

1.ตามข้อมูลที่แนบมา ผมจะ InputData ไปที่ Sheet (AllData)
2.โดยหลังจากที่กดปุ่ม Add Model แล้วให้ข้อมูลทั้งหมดไปโผล่ที่ AllData และ Clearcontents ทั้งหมด
3.หลังจากนั้นทุกครั้งที่กด Add Model แล้วให้ข้อมูลทั้งหมดไปต่อแถวสุดท้ายทุกครั้งครับ
3.ผมได้กำหนดชื่อ Name > Define name ไว้ด้วย

ไม่ทราบแก้ไขอย่างไรดี
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31130
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: รบกวนถามปัญหา offset+countA ครับ

#2

Post by snasui »

:D เปลี่ยนสูตรที่ให้กับ AllData เป็นตามด้านล่างครับ

=OFFSET(Reference,COUNTA(AllData!$A:$A),0)

สูตรนี้เป็นให้ชื่อกับเซลล์ในตำแหน่งของเซลล์ว่างต่อท้ายข้อมูลที่มีอยู่เดิม เพื่อใช้เป็นตำแหน่งที่จะวางข้อมูลต่อไปครับ
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#3

Post by kamahltew »

ขอบคุณมากเลยครับงมหาทั้งวันเลย T T

รบกวนอีกสักข้อครับ

สูตรนี้สามารถเพิ่มได้เรื่อยๆเท่ากับจำนวนแถวที่มีคือ 65536 เลยใช่ไหมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31130
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: รบกวนถามปัญหา offset+countA ครับ

#4

Post by snasui »

:D สูตรสามารถทำงานได้ตลอดเวลาจนกว่าจะวางข้อมูลจนเต็มบรรทัดสุดท้ายของชีทแล้วครับ :P
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#5

Post by kamahltew »

ขอบคุณอีกครั้งครับ

:D :D :D ได้เอาไปใช้แล้ว
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#6

Post by kamahltew »

จากลองใช้ไปสักพัก ผมพบปัญหาว่า เมื่อ Add Model แล้ว

ถ้าเป็นข้อมูลซ้ำกันมันก็จะถูกคีย์ลงไป จะหาทางป้องกันอย่างไรดีครับ

ต้องใช้ VBA อีกหรือเปล่า เพราะลองทำตามโดยใช้ Data Validation > Custom > Formular พิมพ์ Countif คลุมช่วง $A$2:$A$800

แต่เข้าใจว่าวิธีด้านบนใช้ไม่ได้เพราะไม่เกี่ยวข้องกันครับ

ปล.
ผมลองที่จะใส่สูตรใน sheet "InputData" เพื่อให้ Countif ข้อมูลที่ sheet "AllData" แต่โปรแกรมปฏิเสธ มันไม่ให้ใส่ข้าม sheet ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31130
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: รบกวนถามปัญหา offset+countA ครับ

#7

Post by snasui »

:D กรณีที่ Model แต่ละค่าต้องไม่เหมือนกับที่เคยบันทึกลงใน AllData แล้ว สามารถใช้ Validation มาดักตอนที่กรอกข้อมูลได้ครับ โดย

คลุมข้อมูลที่ B4:B12 > เข้าเมนู Data > Validation > ช่อง Allow เลือก Custom > ช่อง Formula คีย์ =COUNTIF(INDIRECT("Alldata!A:A"),$B14)=0

หากมีค่าในชีท AllData แล้วจะไม่สามารถคีย์ได้ครับ
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#8

Post by kamahltew »

snasui wrote::D กรณีที่ Model แต่ละค่าต้องไม่เหมือนกับที่เคยบันทึกลงใน AllData แล้ว สามารถใช้ Validation มาดักตอนที่กรอกข้อมูลได้ครับ โดย

คลุมข้อมูลที่ B4:B12 > เข้าเมนู Data > Validation > ช่อง Allow เลือก Custom > ช่อง Formula คีย์ =COUNTIF(INDIRECT("Alldata!A:A"),$B14)=0

หากมีค่าในชีท AllData แล้วจะไม่สามารถคีย์ได้ครับ


ขอบคุณครับ ตอนนี้ได้แล้วครับ

ตอนนี้ที่ผมหาสูตรมาลองใช้เองคือ "ClearEntries" B3:B10 ใน Sheet "InputData"
ซึ่งใช้ได้ครับแต่อยากทราบความหมายมากกว่า

ดังนี้ครับ

Sub ClearEntries()
On Error GoTo noName 'error handler
'you can use the word "numbers" or any other range name in the next line
Application.Goto Reference:="ClearData"
Selection.ClearContents
Range("B3:B10").Select
Exit Sub
noName: 'only fires on an error
MsgBox "The named range you are calling does not exist." & vbCr & _
"You need to name a range as 'numbers' before proceeding.", _
vbOKOnly + vbInformation, "Named range required"
End Sub

ตาม Code ผมคิดว่าบางข้อความมันไม่จำเป็นต้องมีแต่เค้าใส่มาเพื่ออธิบายผู้ใช้มากกว่า

อยากขอคำแนะนำครับ
-----
:aru: ไม่ต้องทำตัวใหญ่ครับ เมื่อผมใช้จอเล็กแล้วไม่สะดวกในการอ่าน ด้านบนผมปรับให้แล้ว
User avatar
snasui
Site Admin
Site Admin
Posts: 31130
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: รบกวนถามปัญหา offset+countA ครับ

#9

Post by snasui »

:D ผมแปลให้แล้วตามด้านล่างครับ ตัวไหนที่มีเครื่องหมาย ' นำหน้าคือการใส่คำอธิบายให้กับตัวเอง ไม่ใช่อธิบายผู้ใช้ครับ เพราะหากเขียน Code ซับซ้อนมาก ๆ คนเขียนจะสับสนเอง จึงควร Note เอาไว้ หรือหากหมายถึงอธิบายผู้นำ Code ไปใช้ก็คงไม่ผิดครับ :mrgreen:

ส่วนคำอธิบายผู้ใช้จริง ๆ ปกติจะไม่เขียนใน Code หากจะมีก็จะเป็นพวกกล่องโต้ตอบต่าง ๆ เช่น MsgBox

ตาม Code ด้านล่างผมแนบคำแปลภาษาไทยเข้าไปด้วย

Code: Select all

Sub ClearEntries()
On Error GoTo noName 'error handler (การจัดการกับ Error)
'you can use the word "numbers" or any other range name in the next line
'(ท่านสามารถใช้คำว่า "numbers" หรือช่วงเซลล์อื่น ๆ ในบรรทัดถัดไป)
Application.Goto Reference:="ClearData" 'ไปยังข้อมูลที่ชื่อ ClearData
Selection.ClearContents ' ทำการ Clear เฉพาะค่าภายในตำแหน่งที่เลือก
Range("B3:B10").Select 'เลือกช่วงเซลล์ B3:B10
Exit Sub 'ออกจากการ Run code
noName: 'only fires on an error (กรณีไฟล์เกิดค่าผิดพลาดเท่านั้น)
MsgBox "The named range you are calling does not exist." & vbCr & _
You need to name a range as 'numbers' before proceeding., _
vbOKOnly + vbInformation, "Named range required" 'แสดงข้อความเตือนว่า
' "The named range you are calling does not exist."
' "You need to name a range as 'numbers' before proceeding."
End Sub
หากจะให้เหลือเฉพาะ Code จริง ๆ ก็เหลือตามด้านล่างครับ

Code: Select all

Sub ClearEntries()
On Error GoTo noName
Application.Goto Reference:="ClearData"
Range("B3:B10").ClearContents
Exit Sub
noName:
MsgBox "The named range you are calling does not exist." & vbCr & _
"You need to name a range as 'numbers' before proceeding.", _
vbOKOnly + vbInformation, "Named range required"
End Sub
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#10

Post by kamahltew »

ขอบคุณมากครับ เริ่มเข้าใจอะไรหลายๆอย่างแล้ว

สุดท้ายแล้วครับเกี่ยวกับไฟล์นี้ (ยังไม่รู้จะถามอะไรเพิ่มแล้วครับ)

ตาม Code "CopyTAllData"

Sub CopyToAllData()
Application.Goto Reference:="AddModel"
Selection.Copy
Application.Goto Reference:="AllData"
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select <== ทำไมต้องเป็น Cell "A1" ครับเป็นอย่างอื่นได้หรือไม่เพราะเห็นหลายๆแหล่งที่เห็นก็จะเป็นแบบนี้ครับ
Sheets("InputData").Select
Range("B14:G27").Select
Selection.ClearContents
Range("B14").Select
Application.ScreenUpdating = True
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31130
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: รบกวนถามปัญหา offset+countA ครับ

#11

Post by snasui »

:D จำเป็นหรือไม่อยู่ที่ว่าต้องการให้ผู้ใช้งานทำอะไรต่อครับ

ปกติการเลือก A1 เพราะว่าส่วนใหญ่จะสร้าง Form หรือพื้นที่การทำงานให้เริ่มจากมุมซ้ายบนของ Worksheet ต่าง ๆ เสมอ เมื่อทำงานตามคำสั่งด้วย VBA แล้วก็กำหนดให้เลือก A1 เอาไว้เพื่อพร้อมสำหรับเริ่มงานในรอบต่อไปได้เลย

ทั้งนี้เนื่องจากการทำงานตาม Code อื่น ๆ Cursor จะย้ายไปที่อื่นตามคำสั่งต่าง ๆ เมื่อต้องการให้เริ่มใหม่ก็ระบุให้มาเลือก A1

แต่สำหรับ Code ที่ส่งมาถามนี้ ไม่จำเป็นต้องเลือก A1 เพราะเลือกแล้วก็ไม่ได้ทำอะไรกับ A1 แต่อย่างใด สามารถใส่เครื่องหมาย ' เพื่อให้เป็น Comment แล้วทดสอบ Run Code เพื่อดูผลได้ครับ
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#12

Post by kamahltew »

snasui wrote::D จำเป็นหรือไม่อยู่ที่ว่าต้องการให้ผู้ใช้งานทำอะไรต่อครับ

ปกติการเลือก A1 เพราะว่าส่วนใหญ่จะสร้าง Form หรือพื้นที่การทำงานให้เริ่มจากมุมซ้ายบนของ Worksheet ต่าง ๆ เสมอ เมื่อทำงานตามคำสั่งด้วย VBA แล้วก็กำหนดให้เลือก A1 เอาไว้เพื่อพร้อมสำหรับเริ่มงานในรอบต่อไปได้เลย

ทั้งนี้เนื่องจากการทำงานตาม Code อื่น ๆ Cursor จะย้ายไปที่อื่นตามคำสั่งต่าง ๆ เมื่อต้องการให้เริ่มใหม่ก็ระบุให้มาเลือก A1

แต่สำหรับ Code ที่ส่งมาถามนี้ ไม่จำเป็นต้องเลือก A1 เพราะเลือกแล้วก็ไม่ได้ทำอะไรกับ A1 แต่อย่างใด สามารถใส่เครื่องหมาย ' เพื่อให้เป็น Comment แล้วทดสอบ Run Code เพื่อดูผลได้ครับ

ขอบคุณมมากครับ Clear แล้วครับ
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#13

Post by kamahltew »

ขอโทษที่กลับมาถามอีกรอบครับ

คือปัญหามันมีในไฟล์ครับ ผมใส่กรอบอธิบายไว้แล้ว

ปล.ผมไม่สามารถแนบไฟล์ได้ครับเพราะขนาดมันใหญ่กว่า300 kbไม่ทราบเป็นเพราะอะไร
ทั้งๆที่ไม่มีรูป มีแต่ข้อความอย่างเดียว หรือว่าเป็นเพราะ VBA
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31130
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: รบกวนถามปัญหา offset+countA ครับ

#14

Post by snasui »

:D กรณีขนาดไฟล์เกิน 300 โดยที่ไม่มีข้อมูลอื่นใด ลองคลิกแต่ละชีทแล้วกดแป้น Ctrl+End เพื่อดูว่าเซลล์สุดท้ายอยู่ที่ใด หากอยู่ในตำแหน่งที่ไม่มีข้อมูลก่อนหน้าทั้งทางบรรทัดและทางคอลัมน์ ให้ทำการลบบรรทัดและคอลัมน์ว่าง ๆ เหล่านั้นทิ้ง โดยเริ่มลบทั้งบรรทัด (เลือกหัวบรรทัดแล้วคลิกขวา > Delete) ตั้งแต่บรรทัดหลังจากมีข้อมูลจนถึงบรรทัดสุดท้าย ทางคอลัมน์ก็เช่นกันครับ จากนั้นกดแป้น Ctrl+Home แล้ว Save แล้วลองดูขนาดไฟล์ใหม่อีกรอบ

กรณีตอบแบบไม่เห็นไฟล์ที่เป็นปัญหาก็วินิจฉัยลำบาก อาจจะไม่ตรงประเด็นครับ
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#15

Post by kamahltew »

ได้แล้วครับ แนบไฟล์ให้ดูด้วย

ปัญหาคือผมได้ คีย์ข้อมูลใส่ sheet "InputData" (B14:B22) ผมใช้ Validation > Custom >ไว้ครับ
จากนั้นมันจะฟ้องตลอด
ว่ามีการคีย์ซ้ำ ทั้งๆที่ ไม่มีข้อมูลชุดนั้นอยู่ใน sheet "AllData"
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31130
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: รบกวนถามปัญหา offset+countA ครับ

#16

Post by snasui »

:lol: เครื่องหมายเท่ากับ (=) ใน Validation หายไป จะต้องเป็นสูตรตามด้านล่างครับ

=COUNTIF(INDIRECT("Alldata!A:A"),$B14)=0
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: รบกวนถามปัญหา offset+countA ครับ

#17

Post by Bafnet »

สวัสดีครับ
ได้ทดสอบไฟล์แล้วครับใช้ได้ครับและได้ปรับสูตร
ในการค้นหาข้อมูลให้ดูสวยงามขึ้นไม่ให้โชว์ค่า Err

ที่บอกว่าใส่ค่าอะไรไปแล้วมันไม่ผ่านให้อาจเป็นเพราะ
snasui wrote:กรณีที่ Model แต่ละค่าต้องไม่เหมือนกับที่เคยบันทึกลงใน AllData แล้ว สามารถใช้ Validation มาดักตอนที่กรอกข้อมูลได้ครับ โดย

คลุมข้อมูลที่ B4:B12 > เข้าเมนู Data > Validation > ช่อง Allow เลือก Custom > ช่อง Formula คีย์ =COUNTIF(INDIRECT("Alldata!A:A"),$B14)=0
ลองเปลี่ยนไปคลุมที่ B14:B22 แล้วทำตามขั้นตอนที่อาจารย์แนะนำนะครับ :)
ลองดูไฟล์แนบนะครับ
Maxload Data.xls
อืม..คำสั่งในmodul Debug นะครับ

Code: Select all

Sub CopyToAllData()
    Application.Goto Reference:="AddModel"
     Selection.Copy
    Application.Goto Reference:="AllData"
    ActiveSheet.Paste
    Application.CutCopyMode = False
     Range("A1").Select
    Sheets("Report").Select
     Range("B14:G27").Select
    Selection.ClearContents
     Range("B14").Select
    Application.ScreenUpdating = True
End Sub
เปลี่ยน Sheets("Report").Select
เป็นSheets("InputData").Select
You do not have the required permissions to view the files attached to this post.
User avatar
kamahltew
Member
Member
Posts: 69
Joined: Wed Sep 28, 2011 11:05 am

Re: รบกวนถามปัญหา offset+countA ครับ

#18

Post by kamahltew »

ขอบคุณพี่ๆทุกคนมากครับที่สละเวลา

ตอนนี้ใช้ได้เหมือนเดิมแล้วครับ
Post Reply