EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
Sub DelZero()
Dim ri As Range
Dim ry As Range
Dim rx As Range
Dim cri As String
With Workbooks("DumP.xlsm").Worksheets("FileC")
Set ri = .Range(.Range("A2"), .Range("D65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
Set rx = .Range(.Range("A1"), .Range("D65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ry = Workbooks("DumP.xlsm").Worksheets("Report").Range("A1")
End With
Sheet10.Activate
Sheet10.Range("A:D").AutoFilter Field:=4, Criteria1:=0
ri.Select
ri.Value = "0"
Sheet10.ShowAllData
Sheet10.Range("A:D").AutoFilter Field:=1, Criteria1:="<>0"
rx.Select
rx.Copy: ry.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Sheet10.Activate
Sheet10.ShowAllData
Sheet10.Range("A:D").ClearContents
Sheet10.Range("A:D").Value = Sheet18.Range("A:D").Value
End Sub
มันทำให้ค่าของsnasui wrote:Application.Calculation = xlCalculationManual
Code: Select all
TextBox7.Value = Sheet10.Range("P1").Value
DoEvents
ปกติถ้าใช้ Code ปรับการคำนวณเป็น Manual แล้วก็ควรปรับการนำค่าในเซลล์ไปแสดงด้วยครับ เพราะว่ามันจะหยุดการคำนวณไปแล้วBafnet wrote:จากความรู้ที่อาจารย์มอบมาทั้งนั้นเลยครับ
ขอบคุณมากครับ
อืม
snasui เขียน:
Application.Calculation = xlCalculationManual
มันทำให้ค่าของ
โค้ด: เลือกทั้งหมด
TextBox7.Value = Sheet10.Range("P1").Value
DoEvents
ไม่แสดงผลครับ
Code: Select all
Option Explicit
Sub Sed()
Dim r%, c%
Application.Calculation = xlCalculationManual
With Worksheets("Sheet2")
.Activate
r = .Range("A1").End(xlDown).Row
Do Until r = 1
If .Cells(r, 5).Value = 0 Then
.Cells(r, 5).EntireRow.Delete
End If
r = r - 1
c = c + 1
UserForm1.TextBox1.Value = "Deleted " & c & " Items"
DoEvents
Loop
End With
Application.Calculation = xlCalculationAutomatic
End Su
Code: Select all
lngLr = Rows.Count
Worksheets("DataC").Range("A1:E1").Copy Worksheets("FileC").Range("A1")
With Worksheets("DataC")
Set rs = .Range("A2", .Range("B2").End(xlDown))
End With
For lng = 1 To 8
Set rt = Worksheets("FileC").Range("A" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy: rt.PasteSpecial xlPasteValues
Next lng
Set rs = rs.Offset(0, 2).Resize(, 3)
For lng = 1 To 8
Set rt = Worksheets("FileC").Range("C" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy: rt.PasteSpecial xlPasteValues
Set rs = rs.Offset(0, 3)
Next
'Worksheets("FileC").Range("B1").EntireColumn.Delete
Application.CutCopyMode = False
Sheet22.Range("A:Z").ClearContents
Sheet22.Range("A2").Activate
Sheet10.Activate
Sheet10.Columns("B:B").Select
Selection.Delete Shift:=xlToLeft
DelZero.DelZero
Code: Select all
Sub DelZero()
Dim ri As Range
Dim ry As Range
Dim rx As Range
Dim cri As String
With Workbooks("DumP.xlsm").Worksheets("FileC")
Set ri = .Range(.Range("A2"), .Range("D65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
Set rx = .Range(.Range("A1"), .Range("D65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ry = Workbooks("DumP.xlsm").Worksheets("Report").Range("A1")
End With
Sheet10.Activate
Sheet10.Range("A:D").AutoFilter Field:=4, Criteria1:=0
ri.Select
ri.Value = "0"
Sheet10.ShowAllData
Sheet10.Range("A:D").AutoFilter Field:=1, Criteria1:="<>0"
rx.Select
rx.Copy: ry.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Sheet10.Activate
Sheet10.ShowAllData
Sheet10.Range("A:D").ClearContents
Sheet10.Range("A:D").Value = Sheet18.Range("A:D").Value
End Sub
Code: Select all
Set ri = .Range(.Range("A2"), .Range("D65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
Code: Select all
Set ri = .Range(.Range("A2"), .Range("D1048576") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
Code: Select all
Private Sub CommandButton1_Click()
Dim r As Integer
Dim ra As Range, rb As Range, rc As Range, rt As Range, rs As Range, ry As Range
Sheets("sheet1").Activate
r = 2
Do Until Sheet1.Cells(r, 1).Value = ""
If Sheet1.Cells(r, 4) <> 0 Then
Sheet1.Range("AA8").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB8").Value = Sheet1.Cells(r, 2).Value
Sheet1.Range("AC8").Value = Sheet1.Cells(r, 3).Value
Sheet1.Range("AD8").Value = Sheet1.Cells(r, 4).Value
End If
If Sheet1.Cells(r, 7) <> 0 Then
Sheet1.Range("AA9").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB9").Value = Sheet1.Cells(r, 5).Value
Sheet1.Range("AC9").Value = Sheet1.Cells(r, 6).Value
Sheet1.Range("AD9").Value = Sheet1.Cells(r, 7).Value
End If
If Sheet1.Cells(r, 10) <> 0 Then
Sheet1.Range("AA10").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB10").Value = Sheet1.Cells(r, 8).Value
Sheet1.Range("AC10").Value = Sheet1.Cells(r, 9).Value
Sheet1.Range("AD10").Value = Sheet1.Cells(r, 10).Value
End If
If Sheet1.Cells(r, 13) <> 0 Then
Sheet1.Range("AA11").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB11").Value = Sheet1.Cells(r, 11).Value
Sheet1.Range("AC11").Value = Sheet1.Cells(r, 12).Value
Sheet1.Range("AD11").Value = Sheet1.Cells(r, 13).Value
End If
If Sheet1.Cells(r, 16) <> 0 Then
Sheet1.Range("AA12").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB12").Value = Sheet1.Cells(r, 14).Value
Sheet1.Range("AC12").Value = Sheet1.Cells(r, 15).Value
Sheet1.Range("AD12").Value = Sheet1.Cells(r, 16).Value
End If
If Sheet1.Cells(r, 19) <> 0 Then
Sheet1.Range("AA13").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB13").Value = Sheet1.Cells(r, 17).Value
Sheet1.Range("AC13").Value = Sheet1.Cells(r, 18).Value
Sheet1.Range("AD13").Value = Sheet1.Cells(r, 19).Value
End If
If Sheet1.Cells(r, 22) <> 0 Then
Sheet1.Range("AA14").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB14").Value = Sheet1.Cells(r, 20).Value
Sheet1.Range("AC14").Value = Sheet1.Cells(r, 21).Value
Sheet1.Range("AD14").Value = Sheet1.Cells(r, 22).Value
End If
If Sheet1.Cells(r, 25) <> 0 Then
Sheet1.Range("AA15").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB15").Value = Sheet1.Cells(r, 23).Value
Sheet1.Range("AC15").Value = Sheet1.Cells(r, 24).Value
Sheet1.Range("AD15").Value = Sheet1.Cells(r, 25).Value
End If
With Worksheets("Sheet1")
Set rs = .Range("AA8", .Range("AD15")).SpecialCells(2)
Set rc = .Range("AE" & Rows.Count).End(xlUp).Offset(1, 0)
End With
On Error Resume Next
rs.Copy: rc.PasteSpecial xlPasteValues
Application.CutCopyMode = False
r = r + 1
Sheet1.Range("AA8:AD15").ClearContents
Loop
End Sub
Code: Select all
If Sheet1.Cells(r, 4) <> 0 Then
Sheet1.Range("AA8").Value = Sheet1.Cells(r, 1).Value
Sheet1.Range("AB8").Value = Sheet1.Cells(r, 2).Value
Sheet1.Range("AC8").Value = Sheet1.Cells(r, 3).Value
Sheet1.Range("AD8").Value = Sheet1.Cells(r, 4).Value
End If
Code: Select all
lngLr = Rows.Count
Worksheets("DataC").Range("A1:E1").Copy Worksheets("FileC").Range("A1")
With Worksheets("DataC")
Set rs = .Range("A2", .Range("B2").End(xlDown))
End With
For lng = 1 To 8
Set rt = Worksheets("FileC").Range("A" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy: rt.PasteSpecial xlPasteValues
Next lng
Set rs = rs.Offset(0, 2).Resize(, 3)
For lng = 1 To 8
Set rt = Worksheets("FileC").Range("C" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy: rt.PasteSpecial xlPasteValues
Set rs = rs.Offset(0, 3)
Next
'Worksheets("FileC").Range("B1").EntireColumn.Delete
Code: Select all
Case "FILEC" '----------------¤Òº----------------------------------------------------------------
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + cData
cn.Execute "DELETE * FROM FILEC_DUE " 'ÅéÒ§¢éÍÁÙÅ·Ñé§ËÁ´
cSQL = "select * from FILEC_DUE"
rs.Open cSQL, cn, adUseClient, adLockPessimistic, adCmdText
Set oPROG2 = frmMain.ProgressBar2
Open sFileOpen For Input As #1
While Not EOF(1)
Line Input #1, sTemp
iMAX = iMAX + 1
Wend
Dim sACC As String
Close #1
Open sFileOpen For Input As #1
Do While Not EOF(1)
Line Input #1, sTemp
sACC = Mid(sTemp, 1, 8)
If Mid(sTemp, 14, 7) = "0000000" Then GoTo DOLOOP
rs.AddNew
rs.Fields(0).Value = sACC
'rs.Fields(1).Value = Mid(sTemp, 10, 4) ' §Ç´µé¹
rs.Fields(1).Value = Mid(sTemp, 10, 2) '»Õ
rs.Fields(2).Value = Mid(sTemp, 12, 2) 'à´×͹
rs.Fields(3).Value = Mid(sTemp, 14, 7) ' à§Ô¹
rs.Fields(4).Value = Mid(sTemp, 21, 4) ' §Ç´´Í¡
If Mid(sTemp, 29, 7) = "0000000" Then GoTo DOLOOP
rs.AddNew
rs.Fields(0).Value = sACC
'rs.Fields(1).Value = Mid(sTemp, 25, 4) ' §Ç´µé¹
rs.Fields(1).Value = Mid(sTemp, 25, 2) ' »Õ
rs.Fields(2).Value = Mid(sTemp, 27, 2) ' à´×͹
rs.Fields(3).Value = Mid(sTemp, 29, 7) ' à§Ô¹
rs.Fields(4).Value = Mid(sTemp, 36, 4) ' §Ç´´Í¡
If Mid(sTemp, 44, 7) = "0000000" Then GoTo DOLOOP
rs.AddNew
rs.Fields(0).Value = sACC
'rs.Fields(1).Value = Mid(sTemp, 40, 4) ' §Ç´µé¹
rs.Fields(1).Value = Mid(sTemp, 40, 2) ' »Õ
rs.Fields(2).Value = Mid(sTemp, 42, 2) ' à´×͹
rs.Fields(3).Value = Mid(sTemp, 44, 7) ' à§Ô¹
rs.Fields(4).Value = Mid(sTemp, 51, 4) ' §Ç´´Í¡
If Mid(sTemp, 59, 7) = "0000000" Then GoTo DOLOOP
rs.AddNew
rs.Fields(0).Value = sACC
'rs.Fields(1).Value = Mid(sTemp, 55, 4) ' §Ç´µé¹
rs.Fields(1).Value = Mid(sTemp, 55, 2) ' »Õ
rs.Fields(2).Value = Mid(sTemp, 57, 2) ' à´×͹
rs.Fields(3).Value = Mid(sTemp, 59, 7) ' à§Ô¹
rs.Fields(4).Value = Mid(sTemp, 66, 4) ' §Ç´´Í¡
If Mid(sTemp, 74, 7) = "0000000" Then GoTo DOLOOP
rs.AddNew
rs.Fields(0).Value = sACC
'rs.Fields(1).Value = Mid(sTemp, 70, 4) ' §Ç´µé¹
rs.Fields(1).Value = Mid(sTemp, 70, 2) ' »Õ
rs.Fields(2).Value = Mid(sTemp, 72, 2) ' à´×͹
rs.Fields(3).Value = Mid(sTemp, 74, 7) ' à§Ô¹
rs.Fields(4).Value = Mid(sTemp, 81, 4) ' §Ç´´Í¡
If Mid(sTemp, 89, 7) = "0000000" Then GoTo DOLOOP
rs.AddNew
rs.Fields(0).Value = sACC
'rs.Fields(1).Value = Mid(sTemp, 85, 4) ' §Ç´µé¹
rs.Fields(1).Value = Mid(sTemp, 85, 2) ' »Õ
rs.Fields(2).Value = Mid(sTemp, 87, 2) ' à´×͹
rs.Fields(3).Value = Mid(sTemp, 89, 7) ' à§Ô¹
rs.Fields(4).Value = Mid(sTemp, 96, 4) ' §Ç´´Í¡
If Mid(sTemp, 104, 7) = "0000000" Then GoTo DOLOOP
rs.AddNew
rs.Fields(0).Value = sACC
'rs.Fields(1).Value = Mid(sTemp, 100, 4) ' §Ç´µé¹
rs.Fields(1).Value = Mid(sTemp, 100, 2) ' »Õ
rs.Fields(2).Value = Mid(sTemp, 102, 2) ' à´×͹
rs.Fields(3).Value = Mid(sTemp, 104, 7) ' à§Ô¹
rs.Fields(4).Value = Mid(sTemp, 111, 4) ' §Ç´´Í¡
If Mid(sTemp, 119, 7) = "0000000" Then GoTo DOLOOP
rs.AddNew
rs.Fields(0).Value = sACC
'rs.Fields(1).Value = Mid(sTemp, 115, 4) ' §Ç´µé¹
rs.Fields(1).Value = Mid(sTemp, 115, 2) ' »Õ
rs.Fields(2).Value = Mid(sTemp, 117, 2) ' à´×͹
rs.Fields(3).Value = Mid(sTemp, 119, 7) ' à§Ô¹
rs.Fields(4).Value = Mid(sTemp, 126, 4) ' §Ç´´Í¡
DOLOOP: 'ǹÅÙ»ãËÁè
iLine = iLine + 1
oPROG2 = iLine / iMAX * 100
Loop
Close #1
rs.Update
oPROG2 = 0
rs.Close: cn.Close
Code: Select all
380305241560400364005604560500252005605560900042005609570900042005709000000000000000000000000000000000000000000000000000000000000
400199861560400210005604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
440073001500500050735005500900030005009510900030005109520900030005209530900030005309540900030005409550900030005509560900030005609
440073002570900030005709000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
360297261560400100005604560500090005605560900080005609570900130005709000000000000000000000000000000000000000000000000000000000000
370252851560500100005605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
440159231500500063685005500900031845009510900031845109520900031845209530900031845309540900031845409550900031845509560900031845609
440159232570900031945709000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
430173001560500600005605560900150005609570900150005709580900150005809590900150005909600900150006009610900150006109620900223556209
430173002630900450006309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
430173181470300010104703500900088005009510900088005109520900165905209530900088005309540900088005409550900088005509560900088005609
430173182570900088005709580900088005809590900088005909600900088006009610900088006109620900088006209630900098006309000000000000000
430173183000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
420271691540500022005405540900011005409550900011005509560900011005609570900055005709000000000000000000000000000000000000000000000
460027541540400210005404540500770005405540600210005406550600210005506560600210005606570600240005706580600250005806000000000000000
540013001550900100005509560900100005609570900100005709580900100005809590900100005909000000000000000000000000000000000000000000000
540013261550900200005509560900200005609570900200005709580900200005809590900200005909000000000000000000000000000000000000000000000
530030831540900340005409550900340005509560900340005609570900340005709580900340005809000000000000000000000000000000000000000000000
460085381540500250005405541200150005412551200150005512561200150005612571200150005712581200150005812591200150005912601200150006012
460085382611200150006112621200150006212631200150006312641200150006412651200150006512661200150006612000000000000000000000000000000
460085461500500000005005501200000005012511200000005112521200080005212531200080005312541200080005412551200080005512561200100005612
Code: Select all
lngLr = Rows.Count
Worksheets("DataC").Range("A1:E1").Copy Worksheets("FileC").Range("A1")
With Worksheets("DataC")
Set rs = .Range("A2", .Range("B2").End(xlDown))
End With
For lng = 1 To 8
Set rt = Worksheets("FileC").Range("A" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy: rt.PasteSpecial xlPasteValues
Next lng
Set rs = rs.Offset(0, 2).Resize(, 3)
For lng = 1 To 8
Set rt = Worksheets("FileC").Range("C" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy: rt.PasteSpecial xlPasteValues
Set rs = rs.Offset(0, 3)
Next
'Worksheets("FileC").Range("B1").EntireColumn.Delete
จากไฟล์ แปลง.xlsm ที่แนบมา ผมปรับ Code มาให้เป็นตัวอย่างตามด้านล่างครับBafnet wrote:สวัสดีอีกครั้งครับ
อาจารย์ช่วยดูหน่อยนะครับ
จะทำอย่างไรให้ข้อมูลไปต่อท้ายครับ
ผมไม่ทราบจะทำยังไงแล้วครับ
เอามาเรียงได้แล้วโดยไม่เอาค่า0 แต่ส่งไปวางไม่ได้
Code: Select all
Option Explicit
Sub ReRangeData()
Dim rs As Range, rt As Range, r As Range, rAll As Range
Dim lng As Long, lngLr As Long, i As Integer, c As Integer
Application.ScreenUpdating = False
lngLr = Rows.Count
Worksheets("Sheet1").Range("A1:D1") _
.Copy Worksheets("Sheet2").Range("A1")
With Worksheets("Sheet1")
Set rs = .Range("A2", .Range("A2").End(xlDown))
End With
i = rs.Count
For lng = 1 To 8
Set rt = Worksheets("Sheet2").Range("A" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy: rt.PasteSpecial xlPasteValues
Set rs = rs.Offset(0, 1 + c).Resize(, 3)
Set rt = Worksheets("Sheet2").Range("B" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy: rt.PasteSpecial xlPasteValues
With Worksheets("Sheet2")
Set rAll = .Range("C2").End(xlDown).Offset(-i + 1, 0).Resize(i)
End With
For Each r In rAll
If r = 0 Then
r = ""
End If
Next r
rAll.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
With Worksheets("Sheet1")
Set rs = rs.End(xlToLeft).Resize(i, 1)
End With
c = c + 3
Next lng
Application.ScreenUpdating = True
End Sub
อาจารย์ครับทำไมเก่งจังครับsnasui wrote:ลองดูตัวอย่างการคำนวณตามไฟล์แนบครับ แยกเป็นคอลัมน์ช่วยในการคำนวณและช่วงผลลัพธ์ จะช่วยลดความซับซ้อนสามารถทำความเข้าใจได้ง่ายขึ้น
ถ้าตั้งข้อสังเกตุว่า เลข 4 ตัวหน้ามีความสัมคัญsnasui wrote:อยู่ที่การหา Logic เข้ามาจับครับ เงื่อนไขคือเดือน 5 และ ปีที่อยู่ถัดจากเดือน 5 จากตัวอย่างคือปี 57
จึงต้องมาหาความสัมพันธ์ว่า บรรทัดที่เป็นปี 57 กับเดือน 5 นั้นต่างกันกี่บรรทัดและบรรทัดที่ต่างกันนั้นสัมพันธ์กับจำนวนปีที่ต้องขยายไปอย่างไร จึงได้ออกมาเป็นสูตร
=4-(MATCH(57,E35:E40,0)-MATCH(5,F35:F40,0))
Code: Select all
Private Sub CommandButton1_Click()
Dim r As Integer
Dim m As Integer
If Sheet2.Range("A2").Value = "" Then
MsgBox "äÁèÁÕ¢éÍÁÙÅ", vbOKOnly, "DumP"
Exit Sub
End If
Sheet2.Range("Y1").Formula = "=COUNTIF(F:F,0)"
Sheet2.Activate
r = 2
Do Until Sheet2.Cells(r, 5).Value = ""
Sheet2.Cells(r, 19).Formula = "=VLOOKUP(" & Sheet2.Cells(r, 5).Address & ",Dayco!A:D,2,0)"
Sheet2.Cells(r, 6).Value = Sheet2.Cells(r, 19).Value
Sheet2.Cells(r, 20).Formula = "=VLOOKUP(" & Sheet2.Cells(r, 5).Address & ",Dayco!A:D,3,0)"
Sheet2.Cells(r, 7).Value = Sheet2.Cells(r, 20).Value
Sheet2.Cells(r, 21).Formula = "=VLOOKUP(" & Sheet2.Cells(r, 5).Address & ",Dayco!A:D,4,0)"
Sheet2.Cells(r, 8).Value = Sheet2.Cells(r, 21).Value
Sheet2.Cells(r, 22).Formula = "=VLOOKUP(" & Sheet2.Cells(r, 1).Address & ",Income!A:D,2,0)"
Sheet2.Cells(r, 19).Value = Sheet2.Cells(r, 22).Value
Sheet2.Cells(r, 22).Value = ""
Sheet2.Cells(r, 23).Formula = "=VLOOKUP(" & Sheet2.Cells(r, 1).Address & ",Income!A:D,3,0)"
Sheet2.Cells(r, 20).Value = Sheet2.Cells(r, 23).Value
Sheet2.Cells(r, 23).Value = ""
Sheet2.Cells(r, 24).Formula = "=VLOOKUP(" & Sheet2.Cells(r, 1).Address & ",Income!A:D,4,0)"
Sheet2.Cells(r, 21).Value = Sheet2.Cells(r, 24).Value
Sheet2.Cells(r, 24).Value = ""
r = r + 1
Loop
End Sub
Code: Select all
Sheet2.Cells(r, 19).Formula = "=VLOOKUP(" & Sheet2.Cells(r, 5).Address & ",Dayco!A:D,2,0)"
คำสั่งที่ดูก่อนว่าผลที่ Sheet2.Cells(r, 19) #N/A หรือไม่ถ้า เป็นก็ให้ Sheet2.Cells(r, 19)=""
Sheet2.Cells(r, 6).Value = Sheet2.Cells(r, 19).Value
เปลี่ยนเป็นBafnet wrote:Sheet2.Cells(r, 19).Formula = "=VLOOKUP(" & Sheet2.Cells(r, 5).Address & ",Dayco!A:D,2,0)"
Code: Select all
Sheet2.Cells(r, 19).Formula = "=IF(ISNA(VLOOKUP(" & Sheet2.Cells(r, 5).Address & ",Dayco!A:D,2,0)),""""," & _
"VLOOKUP(" & Sheet2.Cells(r, 5).Address & ",Dayco!A:D,2,0))"
snasui wrote:และดูเหมือนยังพอใจกับการเลือกทั้งคอลัมน์อยู่เหมือนเดิมนะครับ
อ่า..เคยเอาแบบนี้ไปลองใช้แต่ดันไปใช้ในค่าแรงค์snasui wrote:จาก Statement ด้านบน (n) จะทำงานไม่ได้ เนื่องจากไม่ถือว่าเป็นตัวแปร แต่กลายเป็นส่วนหนึ่งของ String ,FileB!A1:T(n),3,0)Bafnet wrote:"=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A1:T(n),3,0)"
หากต้องการใช้ให้เป็นตัวแปรน่าจะเป็นตามด้านล่างครับ
"=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A1:T" & n & ",3,0)"
ลองปรับใช้ดูครับ