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 Macro2()
Dim r As Range
For Each r In Selection
r.Value = Replace(r.Value, ".", "")
Next r
End Sub
ก่อนรันมาโครจะต้องเลือกช่วงเซลล์ที่ต้องการจะแทนที่ก่อนครับ เพราะผมเดาเอาจากภาพที่คุณ janesit แนบมาด้านบนแล้วก็เลยเขียนโค้ดไปแบบนั้น คือเลือกก่อนแล้วค่อยรันมาโคร เช่นjanesit wrote:มันค้างนานมากและโปรแกรมก็ขึ้น not responding
ไม่ทราบต้องแก้อย่างไรคะ เพราะทุกวันนี้ยังแกะ code จากการบันทึกมาโครได้แค่บางตัวเองค่ะDhitiBank wrote:มองไม่เห็นไฟล์แนบ ลองแนบมาใหม่ครับjanesit wrote:มันค้างนานมากและโปรแกรมก็ขึ้น not responding
ข้อมูลในชีท ExpVW คือข้อมูลดิบที่ยังไม่ได้ทำอะไรใช่ไหมครับ หากใช่ รบกวนบอกสิ่งที่ต้องการทำหน่อยครับjanesit wrote: ไม่ทราบต้องแก้อย่างไรคะ เพราะทุกวันนี้ยังแกะ code จากการบันทึกมาโครได้แค่บางตัวเองค่ะ
และตอนบันทึกมาโครนั้น ก็เลือก COLUMN A:A แล้วรันมาโครเลย
ส่วนคำสั่งที่แนะนำมานั้น ก็เพียงแต่ COPY แล้วมาวางต่อเลยค่ะ
***ไฟล์แนบมาแล้วนะคะ** ขอบคุณค่ะ
Code: Select all
Public Sub test()
Dim lRow As Long, rAll As Range, r As Range, iCount As Long, _
sDocCode As String
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
With ActiveSheet
iCount = 0
lRow = .Range("a" & .Rows.Count).End(xlUp).Row
Set rAll = .Range("a1:a" & lRow)
For Each r In rAll
If InStr(1, r.Value, "VW") Then
sDocCode = Trim(Mid(r.Value, InStr(1, r.Value, "VW")))
End If
If IsNumeric(Trim(Mid(r.Value, 1, 5))) And Len(r.Value) = 118 Then
.Cells(iCount + 1, "b") = sDocCode
.Cells(iCount + 1, "c") = Trim(Mid(r.Value, 7, 13))
.Cells(iCount + 1, "d") = Trim(Mid(r.Value, 21, 39))
.Cells(iCount + 1, "e") = Trim(Mid(r.Value, 66, 8))
iCount = iCount + 1
End If
Next r
.Columns("a").Delete Shift:=xlLeft
.Columns("a:d").AutoFit
Set rAll = .Range("a1").CurrentRegion
rAll.RemoveDuplicates Columns:=3, Header:=xlNo
End With
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
DhitiBank wrote: ไม่เข้าใจตรงไหนก็ถามได้ครับ
การจัดการข้อมูลที่นำออกมาจากโปรแกรมสำเร็จรูป (เช่น Express หรืออื่นๆ) เราอาจใช้เพียงสูตรก็ได้ครับ เพราะข้อมูลพวกนี้มักจะมีจำนวนอักขระตายตัวในแต่ละบรรทัด และแบ่งคอลัมน์ไว้ให้อยู่แล้ว (เช่นตัวอย่างของคุณ janesit รายละเอียดในบิลแต่ละรายการจะมี 118 อักขระ และข้อมูลแต่ละประเภทก็จะเริ่มในตำแหน่งเดียวกันตลอด) ทำให้สามารถสร้างสูตรไว้ล่วงหน้าอีกชีทหนึ่งได้ เวลาใช้งานก็แค่เอาข้อมูลดิบมาวางครับ