Chuyên mục xử lý, gỡ rối code VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,957
Nhờ cả nhà giúp mình. Mình cần xóa 1 số cột nhất định trong file csv. Mình sử dụng Code: ActiveSheet.Range("B:B,D:K,M: P,S:AH,AK:AM,AT:BO").EntireColumn.Delete
Tuy nhiên mình có khá nhiều file cần xóa các cột trên. Hiện tại mình đang phải mở từng file và chạy code trên. Mình muốn nhờ cả nhà giúp mình sửa code để làm sao nó chạy được cho nhiều file trong 1 folder nhất định nào đó.
Nếu được sau khi xóa các cột trên, mình muốn insert thêm 1 cột bên trái cột E, và điền ô E1 = "Item" thì mình thêm đoạn code này có được không?
Columns("E:E").Select
Selection.insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("E1").Select
ActiveCell.FormulaR1C1 = "Item"
Cảm ơn cả nhà.
 
Lần chỉnh sửa cuối:
Upvote 0
Tình hình là em đang cần lập một hàm đếm các số ô có mầu cùng và kèm theo được điều kiện cùng đó như khi dùng hàm coutif
ví dụ: như đếm số ô có mầu đỏ và có ký tự cuối cùng là T mà em loay hoay mãi chưa lập được ai lập dùm em với Tks
 
Upvote 0
Nhờ Anh Chị chỉ giúp trong đoạn code chỗ nào chưa đúng. Yêu cầu:
Tại sheet SDT: khi nhập số 1 vào AO2 sẽ lấy dữ liệu ở sheet Data ( kết quả theo như sheet SDT )
Xin cảm ơn.
 

File đính kèm

Upvote 0

File đính kèm

Upvote 0
Trong file đính kèm em có phân lịch trực mỗi người. Tuy nhiên còn vướng mắc ở việc nếu hôm thứ nhất, người thứ nhất trực sáng thì hôm thứ 2 người thứ 2 trực phải là chiều. Anh chị tháo gỡ giúp em nhé.
 

File đính kèm

Upvote 0
Trong file đính kèm em có phân lịch trực mỗi người. Tuy nhiên còn vướng mắc ở việc nếu hôm thứ nhất, người thứ nhất trực sáng thì hôm thứ 2 người thứ 2 trực phải là chiều. Anh chị tháo gỡ giúp em nhé.
Bạn xếp thủ công hoàn thiện cả bảng thử xem ý bạn là thế nào?
Đọc "hôm thứ nhất, người thứ nhất trực sáng thì hôm thứ 2 người thứ 2 trực phải là chiều." chẳng hiểu bạn muốn gì.
 
Upvote 0
Bạn xếp thủ công hoàn thiện cả bảng thử xem ý bạn là thế nào?
Đọc "hôm thứ nhất, người thứ nhất trực sáng thì hôm thứ 2 người thứ 2 trực phải là chiều." chẳng hiểu bạn muốn gì.
Nghĩa là lịch trực sẽ là các ngày từ thứ 2 đến 7, chủ nhật Off. Lịch trực sẽ xen kẽ buổi sáng và buổi chiều. Nếu hôm trước trực là sáng thì hôm sau phải là chiều. Và cái trực sáng chiều này chia đều cho tất cả mọi người anh ạ.
vm0fK-reCroVTUeRkSIgGX3Vadg-DeMpdOAk5vssIj7FM9XXuPmf0SLSIFGg2eKx4ddKUQ_YKpewNrMX5HSsMyfKFi0nZGOQ0Ke3oS1Mc0a1JXerERYGcV_ZHTNWqMUcANePofG9I5aDQ7Y-ZhqxyTdzMOOyQBfYBzdq594ecFh3FvATt1MqfeZdpe2wpqz0fvNz8QcDMcoH0kr90PMeHKSqDhPi7cTCZl6IBbqQisJ1Dxi3oVzMEECi86XsPTYH_bCRncvRhwLrTqleCwanA7dxwUVJCDrzjOQOcjhwB2uL_O5aHxDroENF4ibQ1dStgnkPv2J_IYoNTGXVzw5xr_YWtZ6HBEWSBbHEMoRM9uSPj480C8GWgIexq9Sc9eEwffrYQLtsqB2x0AlA6Y7rBPRatGSjAOdNg8xMGuX8IPIA_WP8QwaaNRH8rWOmDlOORfz2nxpehqzONOIdec84jcy5T_aPzp9siFxYr8IgRZpLf2Tp1QYZvGhmchSx5ouKD4F_5CcmVLEIaOOC805OUbtzGLswodnJHUV-Zt2jV1Gv7Tk-z4QNXSdlLV4XhqgQLYOF8htFz_jkAgVCheXS0_jw-qgWOXcva3Asge8ow2LAB7vAFROa_N14YCaOCFU8udHW048Mue3hxRqrjLRQLpOaQ04hpmMwvqsJZwlhrQPeiiPJ52IKYC_DRUIu=w908-h204-l75-ft
 
Upvote 0
Lạ nhỉ, em gửi đính kèm ảnh phân ca cho anh xem, ban đầu thấy hiện rồi giờ vào lại thành dấu x. Em gửi lại file nhé.
 

File đính kèm

Upvote 0
Lạ nhỉ, em gửi đính kèm ảnh phân ca cho anh xem, ban đầu thấy hiện rồi giờ vào lại thành dấu x. Em gửi lại file nhé.
Mã:
Public Sub XepLich()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, s As Long
sArr = Range("D5:AH10").Value
ReDim dArr(1 To 5, 1 To 31)
For J = 1 To 31
    If sArr(1, J) = 1 Then
        For I = 1 To 5
            dArr(I, J) = "Off"
        Next I
    Else
        s = s + 1
        If sArr(1, J) > 1 Then
            If K = 5 Then K = 1 Else K = K + 1
            If s Mod 2 = 1 Then dArr(K, J) = "Sang" Else dArr(K, J) = "Chieu"
        End If
    End If
Next J
[D6:AH10] = dArr
End Sub
 
Upvote 0
Thưa thầy! cho em hỏi gán 1 sub vào code:
call GPE và để nguyên GPE
Em thấy vẫn hoạt động bình thường, có gì khác nhau không ạ?
 
Upvote 0
Nhờ mọi người xem giúp đoạn codec sau lỗi ở chỗ nào mà không chạy được:
Function xm(ByVal quy As Long, ByVal nam As Long)
Dim sArray
sArray = ThisWorkbook.Sheets("Data").Range("B3:F5").Value
xm = sArray(nam, quy)
End Function
 
Upvote 0
Vậy bạn có dịch sang tiếng Việt nội dung của hàm không?

& quan trọng là không fải nó chạy khơi khơi, mà cung cấp cho ,hàm những tham biến gì để nó chạy
 
Upvote 0
Nhờ mọi người xem giúp đoạn codec sau lỗi ở chỗ nào mà không chạy được:
Function xm(ByVal quy As Long, ByVal nam As Long)
Dim sArray
sArray = ThisWorkbook.Sheets("Data").Range("B3:F5").Value
xm = sArray(nam, quy)
End Function

Lần đầu thấy có người viết cái hàm độc kiểu này, với cái hàm này thì dùng hàm index trong excel cho nhanh, Gửi file lên sẽ có nhiều thông tin hơn.
 
Upvote 0
lỗi ở chỗ nào mà không chạy được
Lỗi như nào?
PHP:
Function TenHamLamGiDo(Byval Rng as range, ByVal quy As Long, ByVal nam As Long)
if Rng.Count=1 then exit Function
TenHamLamGiDo=Rng.Value(nam,quy)
End Function
Áp dụng bảng tính:
Mã:
=TenHamLamGiDo(vùng dữ liệu, nam, quy)
 
Upvote 0
Đâu có cần file cơ chứ!
Theo mình hiểu thì hàm cần cung cấp 2 tham biến là số nguyên dương; Trong đó 1 tham biến fải chỉ là từ 1 đến 3 Còn tham biến kia là từ 1 đến 5

Nếu cung ứng các tham biến sai fạm vi nó sẽ nói là "Đi chõ khác chơi đi bạn!"

PHP:
       (Cột B) (Cột C) (Cột D) (Cột E) {Cột F)
                Q I     QII     QIII    Q IV
(Hàng 3) 2016    100     415     451     487
(Hàng 4) 2017     45     200     355     510
(Hàng 5) 2018     32     322     612     902
 
Lần chỉnh sửa cuối:
Upvote 0
Các sư phụ giải thích giúp em đoạn code này với ạ
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$3" Then
Dim sht As Worksheet, rng As Range
If Len([e3]) > 8 Then Set sht = Sheet2 Else Set sht = Sheet3
With sht
Set rng = .Range(.[B7], .Cells(.Rows.Count, "B").End(3)).Find([E4], , xlValues, xlWhole, , , True)
If rng Is Nothing Then
[e10] = 0
GoTo thoat
End If
Application.EnableEvents = False
[e10].Value = rng(, [e6] + 2).Value

End With
End If
thoat:
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
 
Upvote 0
Các sư phụ giải thích giúp em đoạn code này với ạ
[ph]Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
1 If Target.Address = "$E$3" Then
Dim sht As Worksheet, rng As Range
3 If Len([e3]) > 8 Then Set sht = Sheet2 Else Set sht = Sheet3
With sht
5 Set rng = .Range(.[B7], .Cells(.Rows.Count, "B").End(3)).Find([E4], , xlValues, xlWhole, , , True)
If rng Is Nothing Then
7 [e10] = 0
GoTo thoat
9 End If
Application.EnableEvents = False
11 [e10].Value = rng(, [e6] + 2).Value
End With
13 End If
thoat: Application.EnableEvents = True
End Sub[/php]
Dòng 0: Giới thiệu với bạn đây là macro sự kiện;
D1: Nếu (bạn vừa) đụng vào [E3] thì các dòng lệnh trước D13 được thi hành;
D2: Xác định 2 biến đối tượng sẽ được xài;
D3: Nếu chiều dài (chuỗi ) dữ liệu chứa trong [e3] hơn 8 thì gán Sheet2 vô biến đối tượng; bằng ngược lại thì (gán) sheet3
D4: Tuyên cáo làm việc với biến đối tượng (vừa được gán)
D5: Áp dụng fương thức Find (tìm kiếm) đến vùng có dữ liệu của cột [B:b] trong biến đội tượng để tìm trị trong ô [E4];
Cách tưức tìm là tìm dữ liệu (không fải tìm trong công tưức) & tìm theo nguyên thể (. . .);
D6: Nếu tìm không thấy thì thực hiện các lệnh trước D9;
D7: Gán trị 0 cho ô [E10];
D8: Tới nhãn có tên (. .)
D9 Ket thúc điều kiện xử lý (Xem lại D6)
D10: Không "chơi" nữa;
D11: (Muốn hiểu dòng lệnh này fải xem trong [E6] đang chứa gì mới được; Nhưng cách viết vầy hơi lạ!)
D12: Dứt tuyên cáo (D4)
D13: Kết thúc sự kiện
D14: Trả lại thiết lập ban đầu (của hệ thống)

Những mong giúp được bạn điều gì đó, nhỏ nhoi!
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

Bài viết mới nhất

Back
Top Bottom