: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

VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#1

Post by yodpao.b »

ถ้าคอลัม A ไม่ใช่ค่าว่างให้ใส่สูตร =ROUND(H6+I6,6)
หรือเอา H กับ I มารวมกัน
ถ้าเจอค่าว่างให้หยุดทำ
VBA ใส่สูตร.JPG
VBA ใส่สูตร.JPG (65.02 KiB) Viewed 377 times
โดยปกติผมใช้มาโคร คัดลอก
แต่น้องให้ลองเขียน การใช้ลูป
มีตัวอย่างไหมครับ
หรือเริ่มต้นทำให้ดูก่อนได้ไหมครับ
Attachments
Vlookup1.xlsx
(13.02 KiB) Downloaded 11 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#2

Post by snasui »

:D การทำเช่นนั้นไม่ใช่เรื่องยาก ลองแนบไฟล์ที่บันทึกเป็น Macro มาถามกัน จะได้ช่วยดูให้ได้ คำถามเกี่ยวกับ VBA ควรจะลองทำมาเองก่อนเสมอ ได้เท่าไรก็เท่านั้นครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#3

Post by yodpao.b »

ผมทำได้ยรรทัดเดียวตรับ
pic 1.JPG
pic 1.JPG (59.61 KiB) Viewed 372 times
ไม่รู้จะให้มันดูบรรทัดต่อไปอย่างไร
Attachments
VBA.xlsm
(18.16 KiB) Downloaded 16 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#4

Post by snasui »

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

Code: Select all

Sub Macro1()
    Dim r As Range
    With Sheets(1)
        For Each r In .Range("h4", .Range("h" & .Rows.Count).End(xlUp))
            If r.Value <> "" Then
                r.Offset(0, 3).Value = r.Value + r.Offset(0, 1).Value
            End If
        Next r
    End With
End Sub
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#5

Post by yodpao.b »

ผมเจอแล้วครับ
Sub Macro2()
'ใส่ค่าในเชล ข้อแม้คือจนกว่าต่าด้านหน้าจะว่าง
i = 1
Do Until Cells(i + 4, 8).Value = ""
Cells(i + 4, 12) = Cells(i + 4, 8) + Cells(i + 4, 9)
i = i + 1
Loop

End Sub
กว่าจะเข้าใจ
แต่ใช้ของอาจาร์ยดีกว่าเข้าใจง่ายกว่าเยอะ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#6

Post by yodpao.b »

ทำงานตั้งแต่บรรทัดแรก
ลงไปช้างล่างที่ละ1 นาที
ถีงค่ามากสุดในคอลัม L
VBA 2.JPG
VBA 2.JPG (79.73 KiB) Viewed 366 times

Code: Select all

Sub Macro_check2()
'ãÊè¤èÒã¹àªÅ
Range("Q5").Value = Range("L5").Value
    Dim r As Range
    With Sheets(1)
        For Each r In .Range("L5", .Range("L" & .Rows.Count).End(xlUp))
            If r.Value <> "" Then
                r.Offset(1, 5).Value = "=R[-1]C+(1/60/24)"
            End If
        Next r
    End With
End Sub
ผมทำไมสำเร็จลงไปได้มากกว่าคอลัม L บรรทัดเียว
ไม่ถึงค่า MAX ในคอลัม L
ไม่รู้ว่าจะให้มองค่าสูงสุดอย่างไร
Attachments
VBA.xlsm
(38.24 KiB) Downloaded 16 times
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#7

Post by puriwutpokin »

ลองปรับเป็น

Code: Select all

Sub Macro_check2()
'ใส่ค่าในเชล
Range("Q5").Value = Range("L5").Value
    Dim i As Integer
    With Sheets(1)
        For i = 0 To Minute(Application.Text(.Range("L" & .Rows.Count).End(xlUp), "hh:mm:ss")) - 1
                Cells(5 + i, 12).Offset(1, 5).Value = "=R[-1]C+(1/60/24)"
        Next i
    End With
End Sub
Last edited by puriwutpokin on Fri May 17, 2019 12:48 am, edited 3 times in total.
:shock: :roll: :D
User avatar
Bo_ry
Gold
Gold
Posts: 1245
Joined: Sun Aug 12, 2018 12:11 am
Excel Ver: MS 365
Contact:

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#8

Post by Bo_ry »

ลองดู

Code: Select all

Sub run()
sd = Range("L5")
ed = Range("L1048576").End(xlUp) + TimeValue("00:01:00")
r = 5
For n = sd To ed Step TimeValue("00:01:00")
    Range("Q" & r) = n
    r = r + 1
Next n
End Sub
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#9

Post by yodpao.b »

Code: Select all

Sub Macro_check2()
'ใส่ค่าในเชล
Range("Q5").Value = Range("L5").Value
    Dim i As Integer
    With Sheets(1)
        For i = 0 To Minute(Application.Text(.Range("L" & .Rows.Count).End(xlUp), "hh:mm:ss")) - 1
                Cells(5 + i, 12).Offset(1, 5).Value = "=R[-1]C+(1/60/24)"
        Next i
    End With
End Sub
ใช้ได้ครับแต่มันไม่เขากับสูตรที่จะทำต่อไปครับ

ส่วนโคดด้านล่างใช้ได้ครับเขากับสูตรที่จะทำต่อไป
อยากใส่สูตร IF(VLOOKUP(Q5,$L$5:$M$100000,1)=Q5,VLOOKUP(Q5,$L$5:$M$100000,2),0)
ไว้กับโคดด้านล่างครับ

Code: Select all

Sub Macro_runtime()
'ãÊè¤èÒã¹àªÅ
sd = Range("L5")
ed = Range("L1048576").End(xlUp) + TimeValue("00:01:00")
r = 5
For n = sd To ed Step TimeValue("00:01:00")
    Range("Q" & r) = n
    r = r + 1
Next n
End Sub
ต้องการใส่สูตรนี้เข้าไปด้วยครับ หลังจากนั้นให้โชว์เป็นค่านะครับไม่ต้องการโชว์สูตรเพราะว่าถ้าแก้ไขหรือทำอะไรมันจะคำนวณช้าครับมีเป็นแสนบันทัด
VBA 3.JPG
VBA 3.JPG (63.39 KiB) Viewed 355 times
Attachments
VBA.xlsm
(37.86 KiB) Downloaded 16 times
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#10

Post by yodpao.b »

ช่วยแก้ไขโคดให้ถูกหลักด้วยครับ
VBA 4.JPG
VBA 4.JPG (45.15 KiB) Viewed 353 times
ใน excel ไม่อยากให้แสดงเป็นสูตร
ต้องการให้แสดงเป็นค่า
โดคที่เห็นมันทำงานถูกต้องแล้วครับแต่อยากให้แก้โดคในกรอบสี่เหลี่ยมหน่อยครับ
มันดูไม่ดูหลักการเขียน
ขอบคุณครับ

Code: Select all

Sub Macro_runtime()
'ใส่ค่าในเชล
sd = Range("L5")
ed = Range("L1048576").End(xlUp) + TimeValue("00:01:00")
r = 5
For n = sd To ed Step TimeValue("00:01:00")
    Range("Q" & r) = n
    Range("R" & r) = "=IF(VLOOKUP(RC[-1],R5C12:R100000C13,1)=RC[-1],VLOOKUP(RC[-1],R5C12:R100000C13,2),0)"
    Range("R" & r) = Range("R" & r)
    r = r + 1
Next n
End Sub
Attachments
VBA.xlsm
(56.56 KiB) Downloaded 16 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#11

Post by snasui »

:D Code นั้นใช้ได้ครับ

หากจะปรับก็จะเป็น Range("R" & r).value = Range("R" & r).value มีความหมายเหมือนกัน ซึ่งค่า Default ของ Property ของเซลล์ใด ๆ คือ .value หากไม่ใส่ก็มีค่าเท่ากัน การเขียน Code ที่เป็น Best Practice จะใส่เสมอ รวมถึงอื่น ๆ เช่นการประกาศตัวแปร ฯลฯ ครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#12

Post by yodpao.b »

ช่วยดูไฟล์ให้หน่อยครับ กดปุ่ม check ทำงานช้ามาก
ผมว่ามันเกี่ยวกับสูตรแน่นอน
พอเพิ่มcode ช้าเลย

Code: Select all

    Range("R" & r).Value = "=VALUE(TEXT(RC[-1],""dd/mm/yyyy""))"
    Range("R" & r).Value = Range("R" & r).Value
    Range("S" & r).Value = "=VALUE(TEXT(RC[-2],""hh:mm:ss""))"
    Range("S" & r).Value = Range("S" & r).Value
    Range("T" & r).Value = "=IF(VLOOKUP(RC17,R5C12:R100000C13,1)=RC17,VLOOKUP(RC17,R5C12:R100000C13,2),0)"
    Range("T" & r).Value = Range("T" & r).Value
Attachments
VBA.xlsm
(24.96 KiB) Downloaded 18 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#13

Post by snasui »

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

Code: Select all

Dim dic As Object

Sub Macro_check1()
'ใส่ค่าในเชล ข้อแม้คือจนกว่าต่าด้านหน้าจะว่าง
    Dim r As Range
    Set dic = CreateObject("Scripting.Dictionary")
    With Sheets(1)
        For Each r In .Range("h5", .Range("h" & .Rows.Count).End(xlUp))
            If r.Value <> "" Then
                r.Offset(0, 4).Value = r.Value + r.Offset(0, 1).Value
                If Not dic.exists(CStr(Left(r.Offset(0, 4).Value2, 12))) Then
                    dic.Add Key:=CStr(Left(r.Offset(0, 4).Value2, 12)), Item:=r.Offset(0, 2).Value
                End If
                r.Offset(0, 5).Value = r.Offset(0, 2).Value
            End If
        Next r
    End With
End Sub

Sub Macro_runtime()
'ใส่ค่าในเชล
    Dim arr(999999, 3) As Variant, r As Long
    Dim sd As Double, ed As Double, n As Date
    With Sheets(1)
        sd = .Range("L5").Value2
        ed = .Range("L" & .Rows.Count).End(xlUp).Value2 + TimeValue("00:01:00")
        For n = sd To ed Step TimeValue("00:01:00")
            arr(r, 0) = n
            arr(r, 1) = n - TimeValue(n)
            arr(r, 2) = TimeValue(n)
            If dic.exists(Left(CStr(CDbl(n)), 12)) Then
                arr(r, 3) = dic.Item(Left(CStr(CDbl(n)), 12))
            Else
                arr(r, 3) = 0
            End If
            r = r + 1
        Next n
        .Range("q5").Resize(r, 4).Value = arr
    End With
    MsgBox "Finished.", vbInformation
End Sub
Last edited by snasui on Fri May 17, 2019 1:26 pm, edited 1 time in total.
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#14

Post by yodpao.b »

ผมลองแล้วครับ เร็วขึ้น แต่ค่า kw ผิดครับ บางช่องควรโชวค่า แต่ไม่โชว
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#15

Post by snasui »

yodpao.b wrote: Fri May 17, 2019 3:02 pm ค่า kw ผิดครับ บางช่องควรโชวค่า แต่ไม่โชว
:D ทบทวน Code ที่ผมตอบไปอีกครั้ง เนื่องจากมี Edit เพิ่มฟังก์ชั่น Left เข้าไปด้วย หากยังไม่ถูกต้องช่วยแจ้งรายละเอียดพร้อมไฟล์ล่าสุดมาด้วยจะได้ช่วยดูต่อไปจากนั้นครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#16

Post by yodpao.b »

โพสต ขอข้ามก่อนเขา
พอดีมีงานเก่าเขาเพิ่มเติมมา
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#17

Post by yodpao.b »

พอดีผมจะใช้สูตร copy ทุกๆเเชลที่มีค่ากับไฟลอื่น
นึกได้ใช้ โคด้ด้านบนก็ได้

Code: Select all

Sub Macro1()
    Dim r As Range
    With Sheets(1)
        For Each r In .Range("h4", .Range("h" & .Rows.Count).End(xlUp))
            If r.Value <> "" Then
                r.Offset(0, 3).Value = r.Value
            End If
        Next r
    End With
End Sub
code นี้ สั่งให้คัดลอกลงด้าล่าง
แล้วเราจะเพิ่มด้านขวาอย่างไรครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#18

Post by yodpao.b »

พอดีผมจะใช้สูตร copy ทุกๆเเชลที่มีค่า
นึกได้ใช้ โคด้ด้านบนก็ได้
ด้านบนพิมพ์ผิดครับ
ใช้กับไฟลนี้ครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#19

Post by yodpao.b »

yodpao.b wrote: Mon May 20, 2019 11:53 pm พอดีผมจะใช้สูตร copy ทุกๆเเชลที่มีค่า
นึกได้ใช้ โคด้ด้านบนก็ได้

Code: Select all

Sub Macro1()
    Dim r As Range
    With Sheets(1)
        For Each r In .Range("h4", .Range("h" & .Rows.Count).End(xlUp))
            If r.Value <> "" Then
                r.Offset(0, 3).Value = r.Value
            End If
        Next r
    End With
End Sub
code นี้ สั่งให้คัดลอกลงด้าล่าง
แล้วเราจะเพิ่มด้านขวาอย่างไรครับ
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: VBA ถ้าค่าเซลหน้าไม่ว่างให้ทำงานไปเรื่อย

#20

Post by logic »

ตัวอย่างวนลูปไปขวาครับ ~~> https://www.snasui.com/viewtopic.php?t=5270
Post Reply