Nhờ viết code cộng với số dư trung bình

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

vova2209

Thành viên tích cực
Tham gia
5/4/17
Bài viết
828
Được thích
110
Giới tính
Nam
Nghề nghiệp
Đường bộ
Anh chị viết giúp em code với dữ liệu như hình dưới:
Tại ô active R1 = -0.62 chia cho (Application.InputBox quét L1:L10 đếm được 10 ô có dữ liệu)
R1 = -0.62/10 = -0.062 => sau đó L1 - -0.062, L2 - -0.062.... L10 - -0.062
Kết quả như ở cột U
Untitled.jpg
 

File đính kèm

  • Book2.xlsb
    67.7 KB · Đọc: 12
(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?
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ý ạ
 
Upvote 0
Anh chị cho em hỏi hàm offset lấy theo tên cột làm như nào ạ:
...
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
 
Upvote 0
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
vâng em cảm ơn ạ
 
Upvote 0
Em viết xong đoạn code để chạy rồi, anh chị xem hộ em thu gọn lại code với ạ
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
 
Upvote 0
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
Vâng em cảm ơn ạ! để e vào chạy thử
 
Upvote 0
Web KT
Back
Top Bottom