Nhờ làm bài toán điền công thức (Formula) bằng phương pháp mảng

  • Thread starter Thread starter LinDan
  • Ngày gửi Ngày gửi
Liên hệ QC

LinDan

Thành viên tiêu biểu
Tham gia
8/2/12
Bài viết
412
Được thích
111
Hôm nọ học được trên diễn đàn, tôi có thực tập bài toán tính định mức như sau:

Đối với mỗi công việc thì Vật tư (cột H) = Thi công (cột F) x Định mức (cột G), tôi viết code sau

PHP:
Sub tt()
    Dim k As Long, j As Long, Dongcuoi As Long
    Dongcuoi = [D65000].End(xlUp).Row
    For i = 3 To Dongcuoi
        If Cells(i, 1) > 0 Then
            k = i
        ElseIf Cells(i, 1).Value = "" And Cells(i, 7).Value <> "" Then
            Cells(i, 8).Formula = "=" & Cells(k, 6).Address & "*" & Cells(i, 7).Address(0, 0)
        End If
    Next i
End Sub

Tôi thấy trên diễn đàn thường các thày như Ptm0412, thày Ndu viết bằng công thức mảng rất hay, tôi thử thay cách làm bằng Cells sang dùng mảng mà chưa biết phải làm thế nào, nhờ mọi người làm mẫu cho.

(Dùng công thức mảng nhưng vẫn hiện Formula chứa không phải điền dữ liệu Value ra ngay)
Xin cảm ơn rất nhiều.
 

File đính kèm

Hôm nọ học được trên diễn đàn, tôi có thực tập bài toán tính định mức như sau:

Đối với mỗi công việc thì Vật tư (cột H) = Thi công (cột F) x Định mức (cột G), tôi viết code sau

PHP:
Sub tt()
    Dim k As Long, j As Long, Dongcuoi As Long
    Dongcuoi = [D65000].End(xlUp).Row
    For i = 3 To Dongcuoi
        If Cells(i, 1) > 0 Then
            k = i
        ElseIf Cells(i, 1).Value = "" And Cells(i, 7).Value <> "" Then
            Cells(i, 8).Formula = "=" & Cells(k, 6).Address & "*" & Cells(i, 7).Address(0, 0)
        End If
    Next i
End Sub

Tôi thấy trên diễn đàn thường các thày như Ptm0412, thày Ndu viết bằng công thức mảng rất hay, tôi thử thay cách làm bằng Cells sang dùng mảng mà chưa biết phải làm thế nào, nhờ mọi người làm mẫu cho.

(Dùng công thức mảng nhưng vẫn hiện Formula chứa không phải điền dữ liệu Value ra ngay)
Xin cảm ơn rất nhiều.
Vầy chắc được:
PHP:
Sub tt()
  Dim k As Long, sArray, i As Long
  With Sheet1
    With .Range(.[D3], .[D65000].End(xlUp)).Offset(, -3).Resize(, 8)
      sArray = .Value
      For i = 1 To UBound(sArray, 1)
        If sArray(i, 1) > 0 Then
          k = i
        ElseIf sArray(i, 1) = "" And sArray(i, 7) <> "" Then
          sArray(i, 8) = "=R[" & k - i & "]C[-2]*" & "RC[-1]"
        End If
      Next
      .Value = sArray
    End With
  End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cũng liên quan đến việc gán công thức từ mảng (VBA) sao nó chỉ hiện nguyên công thức chớ không ra giá trị, vậy dùng code gì để nó tính toán (hiện giờ muốn tính ô nào phải bấm F2 -- > Enter) nhờ anh em giúp đỡ!
 

File đính kèm

Upvote 0
Cũng liên quan đến việc gán công thức từ mảng (VBA) sao nó chỉ hiện nguyên công thức chớ không ra giá trị, vậy dùng code gì để nó tính toán (hiện giờ muốn tính ô nào phải bấm F2 -- > Enter) nhờ anh em giúp đỡ!

thấy các số của bạn phân cách thập phân bằng dấu "phẩy" ==> có thể không đúng định dạng rồi nên công thức sai hiểu thành text
 
Upvote 0
Đúng rồi nhưng phải chỉnh lại chấm, phẩy trong hệ thống mới phát hiện ra lỗi, tại mình quên chưa Replace nó trước khi đưa vào mảng, đến lúc gán từ mảng trở lại Range sẽ bị vậy.
 
Lần chỉnh sửa cuối:
Upvote 0
Vầy chắc được:


Sub tt()
Dim k As Long, sArray, i As Long
With Sheet1
With
.Range(.[D3], .[D65000].End(xlUp)).Offset(, -3).Resize(, 8)
sArray = .Value
For i = 1 To UBound(sArray, 1)
If
sArray(i, 1) > 0 Then
k
= i
ElseIf sArray(i, 1) = "" And sArray(i, 7) <> "" Then
sArray
(i, 8) = "=R[" & k - i & "]C[-2]*" & "RC[-1]"
End If
Next
.Value = sArray
End With
End With
End Sub

Đúng là cái tôi cần rồi thày ah

Tôi xin mạo muội được hỏi: Bài toán này nếu duyệt vòng lặp đi từ dưới lên trên. Đại ý là
PHP:
For i = UBound(sArray, 1)to 1 Step -1
thì làm được không?

(Tôi hỏi thêm là vì muốn học thuật toán ấy mà)
 
Upvote 0
Web KT

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

Back
Top Bottom