: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

การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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
tigerwit
Bronze
Bronze
Posts: 452
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#1

Post by tigerwit »

จากไฟล์ที่แนบ
ชีท report จะเป็นชีทที่กรอกข้อมูลรายการซื้อวัสดุของโรงเรียน
ต้องการที่จะบันทึกข้อมูลการซื้อแต่ละครั้งไปไว้ที่ชีท All
โดยให้รายการซื้อครั้งต่อไปบันทึกต่อท้ายแถวไปเรื่อยๆ
และที่ คลอลัมน์ A คลอลัมน์ B ต้องการใส่เลขที่ และวันที่ซื้อ ลงไปในทุกแถวที่มีรายการวัสดุ
ต้องปรับ Code อย่างไรครับ

Code: Select all

Sub RecData()
Application.ScreenUpdating = False
    Range("D4").Select
    Selection.Copy
    Sheet28.Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheet27.Select
    Range("G4").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheet28.Select
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheet27.Select
    Range("B20:C56,E20:H56").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheet28.Select
    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     Range("C2").Select
            Sheet27.Select
        Application.CutCopyMode = False
           Range("D4").Select
           Application.ScreenUpdating = False

End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#2

Post by snasui »

:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Dim rh As Range, rd As Range
Dim lr As Long
With Worksheets("Report")
    Set rh = Application.Union(.Range("d4"), .Range("g4"))
    lr = .Range("c" & .Rows.Count).End(xlUp).Row
    Set rd = Application.Union(.Range("b20:c" & lr), .Range("e20:h" & lr))
End With
With Worksheets("All")
    rh.Copy
    .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(rd.Rows.Count, 2) _
        .PasteSpecial xlPasteValues
    rd.Copy
    .Range("c" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(rd.Rows.Count, 5) _
        .PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
User avatar
tigerwit
Bronze
Bronze
Posts: 452
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#3

Post by tigerwit »

ขอบพระคุณมากครับ
กรณีที่ต้องการบันทึกเฉพาะส่วนข้อมูลหน่วยงานตั้งแต่เลขที่สั่งซื้อ ไปจนถึงวันที่ออกคำสั่ง
ให้ไปเก็บไว้ใน ชีท All2 เป็นแถวเดียว 16 คลอลัมน์ และเลขที่ใหม่ก็ต่อลงในแถวถัดไปเรื่อย ๆ
จะต้องเขียน Code เพิ่มอย่างไรบ้างครับ

Code: Select all

Sub RecCol()
Application.ScreenUpdating = False

    Range("D4").Select
    Selection.Copy
    Sheets("All2").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Report").Select
    Range("G4").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("All2").Select
    Application.CutCopyMode = False
    Sheets("All2").Move Before:=Sheets(2)
    Sheets("Report").Select
    Range("D6").Select
    Selection.Copy
    Sheets("All2").Select
    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D2").Select
    Sheets("Report").Select
    Range("G6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("E2").Select
    Sheets("Report").Select
    Range("D8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("F2").Select
    Sheets("Report").Select
    Range("D10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Report").Select
    Range("G10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Range("G2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Report").Select
    Range("D12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Range("H2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Report").Select
    Range("G12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Range("I2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("J2").Select
    Sheets("Report").Select
    Range("H12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("K2").Select
    Sheets("Report").Select
    Range("D14").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("L2").Select
    Sheets("Report").Select
    Range("E14").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("M2").Select
    Sheets("Report").Select
    Range("G14").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("N2").Select
    Sheets("Report").Select
    Range("H14").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Report").Select
    Range("E16").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Range("O2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Report").Select
    Range("G16").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("All2").Select
    Range("P2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.ScreenUpdating = True

End Sub

You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#4

Post by snasui »

:D ตัวอย่าง Code ครับ

Code: Select all

Dim ra As Range, r As Range
Dim l As Long, i As Integer
With Worksheets("Report")
    Set ra = .Range("D4,G4,D6,G6,D8,D10,G10,D12,G12,H12,D14,E14,G14,H14,E16,G16")
End With
With Worksheets("All2")
    l = .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Row
    For Each r In ra
        .Range("a" & l).Offset(0, i).Value = r.Value
        i = i + 1
    Next r
End With
knine2465
Member
Member
Posts: 24
Joined: Sat Sep 10, 2022 9:44 am
Excel Ver: 2013

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#5

Post by knine2465 »

:D ขออนุญาตเจ้าของกระทู้หน่อยครับพอดีได้ทดลองโค๊ดที่อาจารย์แนะนำผลปรากฏว่าไม่เกิดการเปลี่ยนแปลงใดๆ เลยครับไม่ทราบว่าเกิดจากอะไร
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#6

Post by snasui »

:D ผมทดสอบไฟล์ที่แนบมาข้อมูลจะไปบันทึกที่ชีต All ได้ปกติ ไม่เกิดปัญหาใดครับ
knine2465
Member
Member
Posts: 24
Joined: Sat Sep 10, 2022 9:44 am
Excel Ver: 2013

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#7

Post by knine2465 »

:D โค๊ดตัวนี้ครับอาจารย์ All2 ไม่ยอมบันทึก
snasui wrote: Thu Apr 20, 2023 6:51 am :D ตัวอย่าง Code ครับ

Code: Select all

Dim ra As Range, r As Range
Dim l As Long, i As Integer
With Worksheets("Report")
    Set ra = .Range("D4,G4,D6,G6,D8,D10,G10,D12,G12,H12,D14,E14,G14,H14,E16,G16")
End With
With Worksheets("All2")
    l = .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Row
    For Each r In ra
        .Range("a" & l).Offset(0, i).Value = r.Value
        i = i + 1
    Next r
End With
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#8

Post by snasui »

:D แนบไฟล์พร้อม Code ที่ปรับปรุงเองแล้วมาใหม่จะได้ชวยทดสอบได้ครับ
User avatar
tigerwit
Bronze
Bronze
Posts: 452
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#9

Post by tigerwit »

ขอบพระคุณครับ โค๊ดที่แนะนำมา ใช้งานได้ปกติครับ
เข้าใจว่าที่บอกว่าโค๊ดไม่ทำงานนั้น น่าจะเกิดจาก มีข้อมูลที่อยู่ในแถวล่างลงไปประมาณแถวที่ 16384-16385 ลองเลื่อนไปดูแล้วลบออกก่อนครับ
You do not have the required permissions to view the files attached to this post.
knine2465
Member
Member
Posts: 24
Joined: Sat Sep 10, 2022 9:44 am
Excel Ver: 2013

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#10

Post by knine2465 »

:D โค๊ดสามารถทำงานได้แล้วครับ ขอบคุณครับ
User avatar
tigerwit
Bronze
Bronze
Posts: 452
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#11

Post by tigerwit »

จาก Code นี้

Code: Select all

Dim ra As Range, r As Range
Dim l As Long, i As Integer
With Worksheets("Report")
    Set ra = .Range("D4,G4,D6,G6,D8,D10,G10,D12,G12,H12,D14,E14,G14,H14,E16,G16")
End With
With Worksheets("All2")
    l = .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Row
    For Each r In ra
        .Range("a" & l).Offset(0, i).Value = r.Value
        i = i + 1
    Next r
End With
ต้องการให้ตรวจสอบก่อนว่า ที่เซล D4 (ชีท Report) ว่างหรือไม่ ถ้าว่างให้แจ้งเตือนว่าต้องใส่เลขที่บันทึกก่อน
และตรวจสอบว่า ที่เซล D4 (ชีท Report) มีค่าซ้ำกับค่าในคลอลัมน์ A ของชีท All2 ถ้าซ้ำ ให้แจ้งเตือนว่าซ้ำ
ต้องปรับเพิ่มโค๊ด อย่างไรครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#12

Post by snasui »

:D ตัวอย่าง code ครับ

Code: Select all

With Worksheets("All2")
	if .range("d4").value = "" then
		'Your message
	end if

	if Application.countifs(worksheets("Report").range("a:a"),.range("d4") > 0 Then
		'Your message
	end if
	'Other code
End With
User avatar
tigerwit
Bronze
Bronze
Posts: 452
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#13

Post by tigerwit »

ขอบคุณครับ จากโค๊ดที่แนะนำ

Code: Select all

Sub RecCol()
Application.ScreenUpdating = False
Dim ra As Range, r As Range
Dim l As Long, i As Integer

With Worksheets("All2")
    if Application.countifs(worksheets("All2").range("a:a"),.range("d4") > 0 Then
        MsgBox ("ข้อมูลซ้ำ")
    Exit Sub
    End If
End With
 
With Worksheets("Report")
    If Range("d4").Value = "" Then
        MsgBox ("ยังไม่กรอกเลขที่บันทึก")
        Exit Sub
    End If
    Set ra = .Range("D4,G4,D6,G6,D8,D10,G10,D12,G12,H12,D14,E14,G14,H14,E16,G16")
End With
With Worksheets("All2")
    l = .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Row
    For Each r In ra
        .Range("a" & l).Offset(0, i).Value = r.Value
        i = i + 1
    Next r
End With
        Application.ScreenUpdating = True
End Sub
จะใช้งานได้ในกรณี เช็คค่าว่างใน D4 ส่วนเช็คค่าใน D4 ว่าซ้ำกับค่าใน คลอลัมน์ A ของชีท All2 นั้น ติดที่

Code: Select all

 if Application.countifs(worksheets("All2").range("a:a"),.range("d4") > 0 Then
ครับผม
You do not have the required permissions to view the files attached to this post.
knine2465
Member
Member
Posts: 24
Joined: Sat Sep 10, 2022 9:44 am
Excel Ver: 2013

Re: การบันทึกข้อมูลให้ต่อจากแุถวสุดท้ายของข้อมูล ด้วย VB

#14

Post by knine2465 »

:D ลองปรับแก้ที่บรรทัดนี้ดูครับ
เปลี่ยนการตรวจจับจากซีท All2 เป็น ซีท Report และเพิ่มวงเล็บปิดเข้าไปอีก 1 อัน

Code: Select all

With Worksheets("Report")
    If Application.countifs(Worksheets("All2").Range("a:a"), .Range("d4")) > 0 Then
        MsgBox ("ข้อมูลซ้ำ")
    Exit Sub
    End If
End With
Post Reply