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
wbk.Sheets("Sheet1").Range("A" & Rows.count).End(xlUp).Row
Code: Select all
wbk.Sheets("Sheet1").Range("A" & Rows.count).End(xlUp)
Code: Select all
wbk.Sheets("Sheet1").Range("A" & Rows.count).End(xlUp).Row
Code: Select all
wbk.Sheets("Sheet1").Range("A" & Rows.count).End(xlUp)
wbk.Sheets("Sheet1").Range("A" & Rows.count).End(xlUp)
หมายถึงเซลล์สุดท้ายที่มีข้อมูลในคอลัมน์ Awbk.Sheets("Sheet1").Range("A" & Rows.count).End(xlUp).Row
หมายถึงเลขบรรทัดของเซลล์สุดท้ายที่มีข้อมูลในคอลัมน์ ACode: Select all
If InStr(rRow, "Wk") Then
IntRow = rRow.Row
ReDim Preserve StrRow(count2)
StrRow(count2) = IntRow + count2
count2 = count2 + 1
End If
IntRow ไม่ได้เพิ่มค่าขึ้นเรื่อยๆ ค่ะ แต่จะเก็บเลขแถวของ cell ที่มีคำว่า "Wk" อยู่snasui wrote: เดิม StrRow กำหนดให้มีค่าเท่ากับ IntRow เสมอ หากต้องการให้ค่าเพิ่มขึ้นก็ต้องเพิ่มค่าของ IntRow ด้วย ยกตัวอย่างเช่น Code ด้านล่าง จะเป็นการเพิ่มค่าให้กับ IntRow ด้วยค่าของ count2 ครับCode: Select all
If InStr(rRow, "Wk") Then IntRow = rRow.Row ReDim Preserve StrRow(count2) StrRow(count2) = IntRow + count2 count2 = count2 + 1 End If
IntRow = rRow.Row
Code นี้ทำงานผิดพลาดอย่างไรครับ ผมทดสอบแล้วก็ให้ค่าที่ถูกต้องอยู่เสมอCode: Select all
With wbk.Worksheets("Sheet1")
Set rData = .Range(.Cells(IntCol + 1, "A"), .Range("A" & rl).End(xlUp))
End With
For Each rDataCol In rData
While rDataCol <> ""
ReDim Preserve StrData(i)
StrData(i) = rDataCol
i = i + 1
rDataCol = ""
Wend
Next rDataCol
Code: Select all
Set rData = .Range(.Cells(IntCol, "B"), .Range("B" & rl).End(xlUp))
สามารถใช้nc_jajah wrote:1. อยากทราบวิธีเปลี่ยน code ด้านบนค่ะ ถ้าต้องการจะเปลี่ยนจาก Col A เป็น Col B โดยที่ไม่ใช่เปลี่ยนเป็นแบบด้านล่าง
โค้ด: เลือกทั้งหมด
Set rData = .Range(.Cells(IntCol, "B"), .Range("B" & rl).End(xlUp))
rData = rData.Offset(0,1)
ครับCode: Select all
while
'other code
if r = "" then exit sub
'other code
wend
Code: Select all
For Each sh In wkb.Sheets
If sh.Visible = xlSheetVisible Then
Set wsh = wkb.Sheets(sh.Name)
Do While Not wsName <> ""
If InStr(1, wsh.Name, StrPara(i)) Then
wsName = StrPara(i)
End If
i = i + 1
Loop
Call readSheet(wsName, wkb, wsh)
Next
For Each sh In wkb.Sheets
เป็นการ Loop ทุกชีทอยู่แล้วครับแก้ได้แล้วค่ะ Function readSheet ที่เรียกใช้มีการสั่งปิด wkb ทำให้ตอนวนกลับมาทำงานใน loop For นั้นไม่สามารถวนจนครบทุกชีทได้snasui wrote: จาก CodeFor Each sh In wkb.Sheets
เป็นการ Loop ทุกชีทอยู่แล้วครับ
ช่วยแนบไฟล์ปัญหามาด้วยและชี้ให้เห็นว่า ปัญหาคืออะไร ต้องการคำตอบเป็นอย่างไร จะได้เข้าใจตรงกันครับ
Code: Select all
If wsh.Cells(curLine, 1) <> "" Then
While year = ""
If year <> "TTL" Then
year = Offset(wsh.Cells(curLine, 1), 0, 0, -6, j)
j = j + 1
End If
Wend
End If
Offset(wsh.Cells(curLine, 1), 0, 0, -6, j)
จะให้ค่าผิดพลาด เนื่องจาก Arguments เกินมา