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 Report()
Dim i As String
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
Sheets("307").Select
Range("C1").Select
Do While Not IsEmpty(ActiveCell.Value)
name1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
size1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
lacq1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
type1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).Select
sheet = ActiveCell.Value
ActiveCell.Offset(0, -4).Select
scrap = ActiveCell.Value
ActiveCell.Offset(0, -1).Select
full1 = ActiveCell.Value
ActiveCell.Offset(-300, 0).Select
ActiveCell.Offset(0, 11).Select
myaddress = ActiveCell.Address
Sheets("Report").Select
Range("B375").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = name1
ActiveCell.Offset(0, 1).Value = size1
ActiveCell.Offset(0, 2).Value = lacq1
ActiveCell.Offset(0, 3).Value = full1
ActiveCell.Offset(0, 4).Value = scrap
ActiveCell.Offset(0, 6).Value = sheet
ActiveCell.Offset(0, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets("307").Select
Range(myaddress).Select
Loop
End Sub
Code: Select all
Sub Report2()
Dim i As String
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
Range("T7").Select
Do While Not IsEmpty(ActiveCell.Value)
ActiveCell.Value = i
Sheets(i).Select
Range("C1").Select
Do While Not IsEmpty(ActiveCell.Value)
name1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
size1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
lacq1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
type1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).Select
sheet = ActiveCell.Value
ActiveCell.Offset(0, -4).Select
scrap = ActiveCell.Value
ActiveCell.Offset(0, -1).Select
full1 = ActiveCell.Value
ActiveCell.Offset(-300, 0).Select
ActiveCell.Offset(0, 11).Select
myaddress = ActiveCell.Address
Sheets("Report").Select
Range("B375").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = name1
ActiveCell.Offset(0, 1).Value = size1
ActiveCell.Offset(0, 2).Value = lacq1
ActiveCell.Offset(0, 3).Value = full1
ActiveCell.Offset(0, 4).Value = scrap
ActiveCell.Offset(0, 6).Value = sheet
ActiveCell.Offset(0, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(i).Select
Range(myaddress).Select
Loop
Loop
End Sub
Code: Select all
i = "Sheet1"
Sheets(i).Select
คือ ผมให้ Cell T7-T9 เป็นชื่อของ ชีทlogic wrote:เท่าที่พบนะครับ
ActiveCell.Value = i แต่ไม่มีการกำหนดค่า i ก่อน มันเลย Error ครับ
ปกติต้องกำหนดค่า i ก่อนใช้งาน ประมาณด้านล่างครับ
Code: Select all
i = "Sheet1" Sheets(i).Select
Code: Select all
dim r as range
for r in range("t7:t9")
Sheets(r.value).select
next r
หมายถึง ให้ i มีค่าเท่ากับเซลล์ปัจจุบันtitus wrote:i = ActiveCell.Value
หมายถึง ให้เซลล์ปัจจุบันมีค่าเท่ากับ ititus wrote:ActiveCell.Value = i
ลองปรับ ไปใช้ แล้ว error ครับ ใช้ไม่ได้ เลย เอาlogic wrote:ถ้าแบบนั้น ใช้ For Loop ได้เลยครับ
Code: Select all
dim r as range for r in range("t7:t9") Sheets(r.value).select next r
Code: Select all
Sub Report1()
Dim rng As Range, cell As Range
Dim i As String
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Set rng = Range("T7:T9")
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
Range("T7").Select
For Each cell In rng
Sheets(cell.Value).Select
Range("C1").Select
Do While Not IsEmpty(ActiveCell.Value)
name1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
size1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
lacq1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
type1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).Select
sheet = ActiveCell.Value
ActiveCell.Offset(0, -4).Select
scrap = ActiveCell.Value
ActiveCell.Offset(0, -1).Select
full1 = ActiveCell.Value
ActiveCell.Offset(-300, 0).Select
ActiveCell.Offset(0, 11).Select
myaddress = ActiveCell.Address
Sheets("Report").Select
Range("B375").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = name1
ActiveCell.Offset(0, 1).Value = size1
ActiveCell.Offset(0, 2).Value = lacq1
ActiveCell.Offset(0, 3).Value = full1
ActiveCell.Offset(0, 4).Value = scrap
ActiveCell.Offset(0, 6).Value = sheet
ActiveCell.Offset(0, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(i).Select
Next cell
Range(myaddress).Select
Loop
End Sub
ติดตรง next cell ครับlogic wrote:โค้ดติดบรรทัดไหนหรือครับ
แนบไฟล์ล่าสุดมาด้วยก็ดี เพื่อสะดวกกับการตอบครับ
Code: Select all
Sub Report1()
Dim cell As Range
Dim i As Range
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
Range("T7").Select
For Each i In Range("T7").End(xlDown)
Sheets(i.Value).Select
Range("C1").Select
Do While Not IsEmpty(ActiveCell.Value)
name1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
size1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
lacq1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
type1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).Select
sheet = ActiveCell.Value
ActiveCell.Offset(0, -4).Select
scrap = ActiveCell.Value
ActiveCell.Offset(0, -1).Select
full1 = ActiveCell.Value
ActiveCell.Offset(-300, 0).Select
ActiveCell.Offset(0, 11).Select
myaddress = ActiveCell.Address
Sheets("Report").Select
Range("B375").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = name1
ActiveCell.Offset(0, 1).Value = size1
ActiveCell.Offset(0, 2).Value = lacq1
ActiveCell.Offset(0, 3).Value = full1
ActiveCell.Offset(0, 4).Value = scrap
ActiveCell.Offset(0, 6).Value = sheet
ActiveCell.Offset(0, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(cell.Value).Select
Range(myaddress).Select
Next i
Loop
End Sub
Code: Select all
Sub Report1()
Dim cell As Range
Dim i As Range
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
'Range("T7").Select
Set cell = Range("T7:T9")
For Each i In cell
Sheets(CStr(i.Value)).Select
Range("C1").Select
Do While Not IsEmpty(ActiveCell.Value)
name1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
size1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
lacq1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
type1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).Select
sheet = ActiveCell.Value
ActiveCell.Offset(0, -4).Select
scrap = ActiveCell.Value
ActiveCell.Offset(0, -1).Select
full1 = ActiveCell.Value
ActiveCell.Offset(-300, 0).Select
ActiveCell.Offset(0, 11).Select
myaddress = ActiveCell.Address
Sheets("Report").Select
Range("B375").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = name1
ActiveCell.Offset(0, 1).Value = size1
ActiveCell.Offset(0, 2).Value = lacq1
ActiveCell.Offset(0, 3).Value = full1
ActiveCell.Offset(0, 4).Value = scrap
ActiveCell.Offset(0, 6).Value = sheet
ActiveCell.Offset(0, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(CStr(i.Value)).Select
Range(myaddress).Select
Loop
Next i
End Sub
ขอบคุณครับตรงตามที่ต้องการเลยครับlogic wrote:ลองดูครับ
Code: Select all
Sub Report1() Dim cell As Range Dim i As Range Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String Sheets("Report").Select Range("A8:D375,G8:G375,J8:J375,N8:P375").Select Range("P8").Activate Selection.ClearContents 'Range("T7").Select Set cell = Range("T7:T9") For Each i In cell Sheets(CStr(i.Value)).Select Range("C1").Select Do While Not IsEmpty(ActiveCell.Value) name1 = ActiveCell.Value ActiveCell.Offset(0, 1).Select size1 = ActiveCell.Value ActiveCell.Offset(0, 1).Select lacq1 = ActiveCell.Value ActiveCell.Offset(0, 1).Select type1 = ActiveCell.Value ActiveCell.Offset(0, 1).Select loca = ActiveCell.Value ActiveCell.Offset(0, 2).Select lock1 = ActiveCell.Value ActiveCell.Offset(300, 0).Select ActiveCell.Offset(0, -3).Select sheet = ActiveCell.Value ActiveCell.Offset(0, -4).Select scrap = ActiveCell.Value ActiveCell.Offset(0, -1).Select full1 = ActiveCell.Value ActiveCell.Offset(-300, 0).Select ActiveCell.Offset(0, 11).Select myaddress = ActiveCell.Address Sheets("Report").Select Range("B375").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select ActiveCell.Value = name1 ActiveCell.Offset(0, 1).Value = size1 ActiveCell.Offset(0, 2).Value = lacq1 ActiveCell.Offset(0, 3).Value = full1 ActiveCell.Offset(0, 4).Value = scrap ActiveCell.Offset(0, 6).Value = sheet ActiveCell.Offset(0, 12).Value = loca ActiveCell.Offset(0, 13).Value = lock1 ActiveCell.Offset(0, 14).Value = type1 Sheets(CStr(i.Value)).Select Range(myaddress).Select Loop Next i End Sub
สอบถามเพิ่มเติมหน่อย ครับ ตรง CStr คือ อะไร ครับtitus wrote:ขอบคุณครับตรงตามที่ต้องการเลยครับlogic wrote:ลองดูครับ
Code: Select all
Sub Report1() Dim cell As Range Dim i As Range Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String Sheets("Report").Select Range("A8:D375,G8:G375,J8:J375,N8:P375").Select Range("P8").Activate Selection.ClearContents 'Range("T7").Select Set cell = Range("T7:T9") For Each i In cell Sheets(CStr(i.Value)).Select Range("C1").Select Do While Not IsEmpty(ActiveCell.Value) name1 = ActiveCell.Value ActiveCell.Offset(0, 1).Select size1 = ActiveCell.Value ActiveCell.Offset(0, 1).Select lacq1 = ActiveCell.Value ActiveCell.Offset(0, 1).Select type1 = ActiveCell.Value ActiveCell.Offset(0, 1).Select loca = ActiveCell.Value ActiveCell.Offset(0, 2).Select lock1 = ActiveCell.Value ActiveCell.Offset(300, 0).Select ActiveCell.Offset(0, -3).Select sheet = ActiveCell.Value ActiveCell.Offset(0, -4).Select scrap = ActiveCell.Value ActiveCell.Offset(0, -1).Select full1 = ActiveCell.Value ActiveCell.Offset(-300, 0).Select ActiveCell.Offset(0, 11).Select myaddress = ActiveCell.Address Sheets("Report").Select Range("B375").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select ActiveCell.Value = name1 ActiveCell.Offset(0, 1).Value = size1 ActiveCell.Offset(0, 2).Value = lacq1 ActiveCell.Offset(0, 3).Value = full1 ActiveCell.Offset(0, 4).Value = scrap ActiveCell.Offset(0, 6).Value = sheet ActiveCell.Offset(0, 12).Value = loca ActiveCell.Offset(0, 13).Value = lock1 ActiveCell.Offset(0, 14).Value = type1 Sheets(CStr(i.Value)).Select Range(myaddress).Select Loop Next i End Sub
ขอบคุณครับอาจาร์ยsnasui wrote:เป็นคำสั่งที่ใช้เปลี่ยนค่าตัวแปรให้เป็น String ครับ