vova2209
Thành viên tích cực
- Tham gia
- 5/4/17
- Bài viết
- 834
- Được thích
- 112
- Giới tính
- Nam
- Nghề nghiệp
- Đường bộ
em ghi thao tác macro để chạy lấy phép tính. Còn em không biết thực thi bằng code như nào nên hỏi để cho biết ạ. ví dụ gặp trường hợp khác mà hàm động thì biết cách sử lý ạ(1) Hình như bạn đã viết xong đoạn Code để chạy rồi mà! . . . .
(2) Hiện tại chạy không lỗi có nghĩa là tương lai không lỗi
Ví dụ trong chương trình của bạn có phép chia, phải không?
Vậy khi gặp phép chia cho 0, nó sẽ bỏ qua hay giận dỗi sao nữa đây?
Có lẽ bạn chưa học qua căn bản Đại số.Anh chị cho em hỏi hàm offset lấy theo tên cột làm như nào ạ:
...
vâng em cảm ơn ạCó lẽ bạn chưa học qua căn bản Đại số.
Offset là một phép chiếu. Hàm Offset của range (VBA) là phép chiếu 1-1. Hàm Offset của WorksheetFunction là phép chiếu 1-N hoặc N-1.
Phép chiếu (độ lệch) bắt buộc phải dùng số. Không thể dùng chuỗi (tên cột là chuỗi).
Chịu khó tư duy một chút, tìm con toán tính dộ lệch từ cột này sang cột kia.
độ lệch cột = Cells(1, tên cột đến).Column - Cells(1, tên cột đi).Column
Chạy code cho tất cả các dòngEm viết xong đoạn code để chạy rồi, anh chị xem hộ em thu gọn lại code với ạ
Sub TamChinh()
Dim stt(), dt(), ChenhLech(), res()
Dim sRow&, i&, r&, t&, fR&, count&, cl#
With Sheets("TH-K95")
i = .Range("L" & rows.count).End(xlUp).Row
stt = .Range("A3:A" & i + 1).Value
dt = .Range("L3:L" & i).Value
ChenhLech = .Range("R3:R" & i).Value
End With
sRow = UBound(dt)
ReDim res(1 To sRow, 1 To 1)
For i = 1 To sRow
If t <> stt(i, 1) Then
t = stt(i, 1)
fR = i
cl = ChenhLech(i, 1)
count = 0
End If
If dt(i, 1) <> Empty Then count = count + 1
If t <> stt(i + 1, 1) Then
If count > 0 Then
cl = cl / count
For r = fR To i
If dt(r, 1) <> Empty Then
res(r, 1) = dt(r, 1) - cl
End If
Next r
End If
End If
Next i
Sheets("TH-K95").Range("BB3").Resize(sRow) = res
End Sub
Vâng em cảm ơn ạ! để e vào chạy thửChạy code cho tất cả các dòng
Mã:Sub TamChinh() Dim stt(), dt(), ChenhLech(), res() Dim sRow&, i&, r&, t&, fR&, count&, cl# With Sheets("TH-K95") i = .Range("L" & rows.count).End(xlUp).Row stt = .Range("A3:A" & i + 1).Value dt = .Range("L3:L" & i).Value ChenhLech = .Range("R3:R" & i).Value End With sRow = UBound(dt) ReDim res(1 To sRow, 1 To 1) For i = 1 To sRow If t <> stt(i, 1) Then t = stt(i, 1) fR = i cl = ChenhLech(i, 1) count = 0 End If If dt(i, 1) <> Empty Then count = count + 1 If t <> stt(i + 1, 1) Then If count > 0 Then cl = cl / count For r = fR To i If dt(r, 1) <> Empty Then res(r, 1) = dt(r, 1) - cl End If Next r End If End If Next i Sheets("TH-K95").Range("BB3").Resize(sRow) = res End Sub