Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน
Posted: Tue Jun 18, 2013 2:13 pm
คลังคำตอบแห่งความรู้จากคนไทย เพื่อโลกที่ต้องการเข้าใจในสิ่งเล็ก ๆ อย่างลึกซึ้ง
https://snasui.com/
Code: Select all
Dim r As Range
Dim i As IntegerCode: Select all
Set r = Sheets("Form").Range("E1")
With Sheets("Database")
i = Application.Match(r, .Range("C:C"), 0)
If .Range("D" & i) Then
Exit Sub
End IfCode: Select all
Sub BeenArL() ' ปุ่มบันทึกรับชำระ ชีท Form
Dim rSource As Range
Dim rTarget As Range
Dim rs As Range
Dim rt As Range
Dim i As Double
Dim r As Range
Set r = Sheets("Form").Range("E1")
With Sheets("Database")
i = Application.Match(r, .Range("C:C"), 0)
Exit Sub
End If
End With
With Sheets("Form")
Set rSource = .Range("B3:B47")
End With
With Sheets("Database")
Set rTarget = .Range("D2", .Range("D" & Rows.Count).End(xlUp))
End With
With ActiveSheet
i = (.Range("L4") + .Range("L6"))
If i <> .Range("J8") Then
MsgBox "โปรดตรวจจำนวนเงินและบันทึกใหม่"
Exit Sub
End If
End With
Application.Calculation = xlCalculationManual
For Each rs In rSource
For Each rt In rTarget
If rt = rs Then rt.Offset(0, 25) = "Y"
Next rt
Next rs
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = False
Sheets("TemBilling").Range("A12:O12").Copy
Sheets("AR").Range("A" & Rows.Count).End(xlUp) _
.Offset(1, 0).PasteSpecial xlPasteValues
Sheets("TemBilling").Range("P12:W12").Copy
Sheets("Report").Range("A" & Rows.Count).End(xlUp) _
.Offset(1, 0).PasteSpecial xlPasteValues
Sheets("Form").Range("H1,J2,I4:L4,L6,G4").ClearContents
With Sheets("Form")
.Range("J6") = .Range("J6") + 1
End With
Application.ScreenUpdating = True
End Subsuka wrote:ขอรบกวนเรื่องปรับสูตรเพิ่มค่ะ
ไฟล์แนบที่ชีท Form จากเดิมเลือกวันที่เริ่มต้นเซลล์ B1 และวันที่สิ้นสุดเซลล์ D1
ให้สูตรเรียกเพิ่มเป็น
เลือกวันที่เริ่มต้นเซลล์ B1 และวันที่สิ้นสุดเซลล์ D1 และเลือกกลุ่มเอกสารที่เซลล์ E1 ค่ะ
ขอบคุณค่ะ
Code: Select all
With Sheets("Form")
Set rSource = .Range("G1")
End With
With Sheets("Database")
Set rTarget = .Range("F2", .Range("F" & Rows.Count).End(xlUp))
End With
With Sheets("Form")
Set rSource = .Range("E1")
End With
With Sheets("Database")
Set rTarget = .Range("C2", .Range("F" & Rows.Count).End(xlUp))
End With
With Sheets("Form")
i = (.Range("A3") > .Range("A2"))
End With
With Sheets("Database")
Set rTarget = .Range("E2", .Range("E" & Rows.Count).End(xlUp))
End With
Code: Select all
if r = 1 and r.offset(0,1) = 2 and r.offset(0,2) = 3 then
next rCode: Select all
dim rall as range, r as range
set rall = range("a1:a10")
for r in rall
if r = 1 and r.offset(0,1) = 2 and r.offset(0,2) = 3 then
next rset rall = range("a1:a10") หมายถึงกำหนดให้ rall เป็นช่วงข้อมูล a1:a10for each r in rall เป็นการเป็นการเข้าถึงสมาชิกแต่ละตัวของ rallif r = 1 and r.offset(0,1) = 2 and r.offset(0,2) = 3 then หมายถึง ถ้า a1 มีค่าเท่ากับ 1 และ b1 มีค่าเท่ากับ 2 และ c1 มีค่าเท่ากับ 3 แล้ว... <== ตรงนี้จะต้องเขียนคำสั่งให้ทำอย่างใดอย่างหนึ่งก่อนจะไปยัง r ตัวถัดไปnext r หมายถึงไปยัง r ตัวถัดไป ซึ่งก็คือ a2 จนถึง a10Code: Select all
With Worksheets("Form") .Range("E1")
With Worksheets("Database")
Set rall = .Range("C2:C13")
เมื่อต้องการให้ Code ทำงานตามด้านล่างนี้snasui wrote:ปกติการ Loop ด้วย For ก็เพื่อให้เข้าถึงสมาชิกแต่ละตัวของ Collection ครับ
set rall = range("a1:a10")หมายถึงกำหนดให้ rall เป็นช่วงข้อมูล a1:a10
for each r in rallเป็นการเป็นการเข้าถึงสมาชิกแต่ละตัวของ rall
if r = 1 and r.offset(0,1) = 2 and r.offset(0,2) = 3 thenหมายถึง ถ้า a1 มีค่าเท่ากับ 1 และ b1 มีค่าเท่ากับ 2 และ c1 มีค่าเท่ากับ 3 แล้ว
... <==ตรงนี้จะต้องเขียนคำสั่งให้ทำอย่างใดอย่างหนึ่งก่อนจะไปยัง r ตัวถัดไป
next rหมายถึงไปยัง r ตัวถัดไป ซึ่งก็คือ a2 จนถึง a10
ต้องใส่วันที่เริ่มต้นและวันที่สิ้นสุดและตัวเลือกเอกสาร ให้ Code ก่อนไหมคะsuka wrote:ขอรบกวนเรื่องปรับสูตรเพิ่มค่ะ
ไฟล์แนบที่ชีท Form จากเดิมเลือกวันที่เริ่มต้นเซลล์ B1 และวันที่สิ้นสุดเซลล์ D1
ให้สูตรเรียกเพิ่มเป็น
เลือกวันที่เริ่มต้นเซลล์ B1 และวันที่สิ้นสุดเซลล์ D1 และเลือกกลุ่มเอกสารที่เซลล์ E1 ค่ะ
ขอบคุณค่ะ
Code: Select all
With ActiveSheet
i = (.Range("D1") - .Range("B1")) * 1 + 1
If i < 0 Then
MsgBox "Please check date."
Exit Sub
End If
End With
With Sheets("Form")
Set rSource = .Range("E1")
End With
With Sheets("Database")
Set rall = .Range("C2")
End With
With Sheets("Form")
Set rSource = .Range("G1")
End With
With Sheets("Database")
Set rall = .Range("F2")
End With