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
Option Explicit
Dim vFile As Variant
Sub OpenMacro()
' Dim vFile As Variant
vFile = Application.GetOpenFilename("Excel Files (*.xl*)," & _
"*.xl*", 1, "Select Excel File", "Open", False)
If TypeName(vFile) = "Boolean" Then
Exit Sub
End If
Workbooks.Open vFile
Call CopyInfo
Call PasteFormula
End Sub
Sub PasteFormula()
Range("E3").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'" & vFile & "'!R2C1:R15C8,4,FALSE)"
Range("E4").Select
End Sub
ผมประกาศตัวแปรไว้ข้างบน แล้วนำตัวแปรไปใช้ใน Procedure อื่น ๆ ที่ต้องใช้ตัวแปรเดียวกัน จะได้ไม่ต้องประกาศซ้ำตอนนี้ vlookup ใช้ได้แล้ว
แต่ว่าต้องแก้นิดนึง ถ้าทำตามที่คุณ snasui บอกคือ แยก Sub PasteFormula() แล้วไปประกาศตัวแปรข้างบน
vFile มันจะ error ว่าไม่มีค่า
ณ ตอนนี้ผมคิดว่าไม่น่าจะใช่ครับ เพราะผมทดสอบแล้วสามารถใช้งานได้ผมเลยขยับเอา PasteFormula ไปไว้ใน Sub OpenMacro ก็ใช้ได้แล้ว
มันใช้ไม่ได้เพราะว่ามันเกี่ยวกับการ set ค่าตัวแปร เป็น universal ทำนองนั้นหรือเปล่าครับ
Code: Select all
Option Explicit
Sub OpenMacroFirstHalf()
Dim vFile As Variant
Dim rSource1 As Range
Dim rSource2 As Range
Dim rTarget1 As Range
Dim rTarget2 As Range
Set rTarget1 = Workbooks("Data Portal.xls").Sheets(1).Range("A65536") _
.End(xlUp).Offset(1, 0)
Set rTarget2 = Workbooks("Data Portal.xls").Sheets(1).Range("D65536") _
.End(xlUp).Offset(1, 0)
vFile = Application.GetOpenFilename("Excel Files (*.xl*)," & _
"*.xl*", 1, "Select Excel File", "Open", False)
If TypeName(vFile) = "Boolean" Then
Exit Sub
End If
Workbooks.Open vFile
With activeworkbook.Sheets(1)
Set rSource1 = .Range(.Range("A2"), .Range("A65536").End(xlUp))
Set rSource2 = .Range(.Range("D2"), .Range("D65536").End(xlUp))
End With
rSource1.Copy rTarget1
rSource2.Copy rTarget2
End Sub
อันนี้มองไม่ออกครับ การเชื่อมโยงถ้าหมายถึงว่าให้แสดงสูตรจำพวก Lookup เอาไว้นั้น ผมคิดว่าไม่จำเป็นต้องทำเช่นนั้นครับ เราสามารถนำค่าที่ตรงกันมาวางได้โดยไม่ต้องให้แสดงฟังก์ชั่นtorofish wrote:สวัสดีครับ มีเรื่องมารบกวนอีกแล้วครับ
ผมคงใช้ Code ที่คุณ snasui ช่วยทำไม่ได้น่ะครับ
เพราะว่าอยากให้ข้อมูลมัน เชื่อมต่อกัน
เวลาจุดนึงแก้ อีกจุดนึงจะได้แก้ไปด้วย
การทำเช่นนี้สามารถใช้การบันทึก Macro ได้เ่ช่นกันครับ เริ่มตั้งแต่ทีนี้ผมทำออกมาเสร็จแล้วครับ
แต่ว่ามีเรื่องอยากรบกวนให้ช่วยดูตรง
Module 4 --> ตรงช่วงของการคัดลอกข้อมูลซ้ำ
ว่ามันจะมีทางให้ปรับปรุงให้เร็วกว่านี้ได้มั้ย
Module 4 --> Sub CopyIfUnique()
คือ ผมลองหาทางตั้งแต่ Data Filter แต่จะเจอปัญหาว่า มันจะไม่รู้ว่าค่าแรกที่ควรคัดลอกอยู่ที่เท่าไหร่
เลยมาลงด้วยการ If, Loop แบบเดิม ๆ
แต่ปัญหามันก็จะอยู่ที่ว่า วิธีที่ผมใช้มันจะแปลก ๆ หน่อย แถมดูจะอ้อมไปอ้อมมา
แล้วก็ไปอ้างอิงกับ Count Variable ซึ่งกะไม่ได้เลยว่ามันควรจะใช้ที่เท่าไหร่ คือก็ทำงานได้ถ้าใส่มันไปเยอะ ๆ แต่ก็ยังไม่ดีที่สุดอยู่ดี
รบกวนช่วยหน่อยนะครับ
ปล ไฟล์ 15 May, 31 May คราวที่แล้วผมทำผิดเองครับ จริง ๆ แล้วแต่ละไฟล์มันต้องมีเงินเดือนแค่อันเดียว
ปล2 พอจะมีคำสั่งที่ทำให้ excel รู้เองมั้ยครับว่า ช่วงข้อมูลบนสุดถึงล่างสุดอยุ่ที่เท่าไหร่ เช่น A1:A30
ตอนนี้เวลาผมใส่ vlookup ผมต้องเผื่อไปเยอะ ๆ เลยเช่น A1:A300
Code: Select all
with worksheets("Sheet1")
.range(.range("A1"),.range("M65536").end(xlup))
end with
Code: Select all
.range(.range("A1"),.range("M65536") _
.end(xlup)).SpecialCells(xlCellTypeVisible)
ถ้าไฟล์ต้นทางเปลี่ยนเงินเดือน ไฟล์ปลายทางจะไม่เปลี่ยนเงินเดือนเมื่อไม่มีการใส่สูตรนั้น เข้าใจถูกต้องแล้วครับ ถ้าจำเป็นต้องใช้ Vlookup ก็สามารถใช้ได้ครับtorofish wrote:อันนี้มองไม่ออกครับ การเชื่อมโยงถ้าหมายถึงว่าให้แสดงสูตรจำพวก Lookup เอาไว้นั้น ผมคิดว่าไม่จำเป็นต้องทำเช่นนั้นครับ เราสามารถนำค่าที่ตรงกันมาวางได้โดยไม่ต้องให้แสดงฟังก์ชั่น
แต่แบบนี้ถ้ามีการแก้ไข เช่น ไฟล์ต้นทางเปลี่ยนเงินเดือน
ถ้าเราไม่ได้ใส่ vlookup เอาไว้ แบบนี้ไฟล์ปลายทางก็จะไม่มีการแก้ไขไม่ใช่เหรอครับ