- Nhờ mọi người giúp em viết code điền giá trị bằng công thức. (1 người xem)

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

khanhcang2

Thành viên chính thức
Tham gia
5/6/12
Bài viết
89
Được thích
23
Em có 2 cột, 1 cột đánh số thứ tự và 1 cột là giá trị ứng với từng số thứ tự đó. Dưới mỗi dòng thứ tự là các dòng trắng. Em muốn các ô ở ngay phía dưới cột giá trị tự động điền công thức copy giá trị của giá trị ngang dòng chứa số thứ tự
theo file đính kèm. Em cảm ơn các anh chị!
 

File đính kèm

Làm thế này đi bạn: Sau khi gán công thức tại B4=INDEX($B$3:B3;MATCH(MAX($A$3:A3);$A$3:A3;0)), tại cột A filter Blank, sau đó copy công thức đến hết.
 

File đính kèm

Upvote 0
--=0 Công thức của anh hay quá! Em sẽ giảm được rất nhiều thời gian đó ạ. Anh cho em hỏi thêm là khi số thứ tự của em lặp lại thì có công thưc nào để em copy 1 lần được hết không ạ?
 
Upvote 0
--=0 Công thức của anh hay quá! Em sẽ giảm được rất nhiều thời gian đó ạ. Anh cho em hỏi thêm là khi số thứ tự của em lặp lại thì có công thưc nào để em copy 1 lần được hết không ạ?

Auto Filter cột A = Blanks
tô chọn B4:B28, Nhập vào B4 =B3 ,Ctrl+Enter
Thoát khỏi Filter
----------------------
Mà hỏi trong mục Lập trình?
Nếu cuối của cột A luôn có chữ "Hết" như trong file thì "chơi" Sub này:
PHP:
Public Sub GPE()
Dim Arr(), I As Long, Tem As Double
Arr = Range([A3], [A65536].End(xlUp)).Resize(, 2).Value
For I = 1 To UBound(Arr, 1)
    If Arr(I, 1) <> Empty Then
        Tem = Arr(I, 2)
    Else
        Arr(I, 2) = Tem
    End If
Next I
[A3].Resize(I - 1, 2) = Arr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Auto Filter cột A = Blanks
tô chọn B4:B28, Nhập vào B4 =B3 ,Ctrl+Enter
Thoát khỏi Filter
----------------------
Mà hỏi trong mục Lập trình?
Nếu cuối của cột A luôn có chữ "Hết" như trong file thì "chơi" Sub này:
PHP:
Public Sub GPE()
Dim Arr(), I As Long, Tem As Double
Arr = Range([A3], [A65536].End(xlUp)).Resize(, 2).Value
For I = 1 To UBound(Arr, 1)
    If Arr(I, 1) <> Empty Then
        Tem = Arr(I, 2)
    Else
        Arr(I, 2) = Tem
    End If
Next I
[A3].Resize(I - 1, 2) = Arr
End Sub
Nhanh quá! Hôm trước em mất 2 ngày cho việc lập bảng tính bằng tay. Em hơi tham chút ạ, em muốn có code hiện công thức như trên file này, anh xem có code nào thực hiện được yêu cầu không ạ! Code trên của anh chạy ra giá trị, em muốn có công thức để người kiểm tra kiểm soát được ấy ạ.
 

File đính kèm

Upvote 0
Nhanh quá! Hôm trước em mất 2 ngày cho việc lập bảng tính bằng tay. Em hơi tham chút ạ, em muốn có code hiện công thức như trên file này, anh xem có code nào thực hiện được yêu cầu không ạ! Code trên của anh chạy ra giá trị, em muốn có công thức để người kiểm tra kiểm soát được ấy ạ.

Thay Sub trên bằng cái này thử coi:
PHP:
Public Sub GPE()
Dim Cll As Range, Tem As String
For Each Cll In Range([B3], [B65536].End(xlUp))
    If Cll.Value = Empty Then
        Tem = Cll.Offset(, 1).Address
    Else
        Cll.Offset(, 1).Value = "=" & Cll.Address & "*" & Tem
    End If
Next Cll
End Sub
 
Upvote 0
Nhanh quá! Hôm trước em mất 2 ngày cho việc lập bảng tính bằng tay. Em hơi tham chút ạ, em muốn có code hiện công thức như trên file này, anh xem có code nào thực hiện được yêu cầu không ạ! Code trên của anh chạy ra giá trị, em muốn có công thức để người kiểm tra kiểm soát được ấy ạ.
Code cùi:
PHP:
Sub Text1()
    Dim i As Long
    For i = 3 To 28
           If Cells(i, 1) <> "" Then
              Range(Cells(i, 1), Cells(i, 1).End(xlDown)).SpecialCells(xlCellTypeBlanks).Offset(, 2) = "=RC[-1]*R" & i & "C"
           End If
    Next
End Sub
 
Upvote 0
Cảm ơn các anh. Em đã chạy thử cả code của anh "Ba Tê" và anh "hung2412" và đều thành công ạ! --=0
 
Upvote 0
Chọt vô cái coi. Chạy bằng mảng mới sướng
PHP:
Sub QuangHai()
Dim Arr(), I&, R&
Arr = Range([B3], [B65536].End(3)).Resize(, 2).Value
For I = 1 To UBound(Arr)
    If Arr(I, 1) = Empty Then
        R = I + 2
    Else
        Arr(I, 2) = "=RC[-1]*R" & R & "C"
    End If
Next I
[B3].Resize(I - 1, 2) = Arr
End Sub
 
Upvote 0
Code của anh quanghai1969 cũng thành công ah. Em cảm ơn anh!
 
Upvote 0
Nhanh quá! Hôm trước em mất 2 ngày cho việc lập bảng tính bằng tay. Em hơi tham chút ạ, em muốn có code hiện công thức như trên file này, anh xem có code nào thực hiện được yêu cầu không ạ! Code trên của anh chạy ra giá trị, em muốn có công thức để người kiểm tra kiểm soát được ấy ạ.

Mình thì thích viết kiểu này:
Mã:
Sub Test()
  Dim rng As Range
  On Error Resume Next
  Set rng = Range([B3], [B60000].End(xlUp)).Offset(, 1).SpecialCells(4)
  If Not rng Is Nothing Then rng.Value = "=LOOKUP(10^10,R3C1:R[-1]C1,R3C3:R[-1]C3)"
End Sub
Nếu phải dùng công thức thì cái này:
Mã:
=LOOKUP(10^10,$A$3:$A3,$C$3:$C3)
Kéo fill cho tất cả các cell rổng
Ẹc... Ẹc...
 
Upvote 0
Cảm ơn bác ndu96081631! Cái lệnh Lookup này lần đầu tiên em được thấy! --=0 . Em test code sử dụng hàm Lookup của bác rồi!
 
Upvote 0
Tôi thử dùng Code này đối với File VD ở #5:
[GPECODE=vb]Sub Text1()
Dim rng As Range
For Each rng In [C3:C28].SpecialCells(xlCellTypeConstants, 1)
Range(rng, rng.End(xlDown)).SpecialCells(xlCellTypeBlanks).Select
Selection = "=RC[-1]*" & rng
Next
End Sub
[/GPECODE]
=> Bị Debug ở dòng 5 => Có bạn nào có thể giải thích cho tôi tại sao lại bị Debug như vậy không ạ?
 
Upvote 0
Tôi thử dùng Code này đối với File VD ở #5:
[GPECODE=vb]Sub Text1()
Dim rng As Range
For Each rng In [C3:C28].SpecialCells(xlCellTypeConstants, 1)
Range(rng, rng.End(xlDown)).SpecialCells(xlCellTypeBlanks).Select
Selection = "=RC[-1]*" & rng
Next
End Sub
[/GPECODE]
=> Bị Debug ở dòng 5 => Có bạn nào có thể giải thích cho tôi tại sao lại bị Debug như vậy không ạ?
Ah, tôi sửa dòng 5 lại như vầy thì chạy được:
[GPECODE=vb]Sub Text1()
Dim rng As Range
For Each rng In [C3:C28].SpecialCells(xlCellTypeConstants, 1)
Range(rng, rng.End(xlDown)).SpecialCells(xlCellTypeBlanks).Select
Selection = "=RC[-1]*" & rng.Address(, , 2)
Next
End Sub
[/GPECODE]
 
Upvote 0
Tôi thử dùng Code này đối với File VD ở #5: [GPECODE=vb]Sub Text1() Dim rng As Range For Each rng In [C3:C28].SpecialCells(xlCellTypeConstants, 1) Range(rng, rng.End(xlDown)).SpecialCells(xlCellTypeBlanks).Select Selection = "=RC[-1]*" & rng Next End Sub [/GPECODE] => Bị Debug ở dòng 5 => Có bạn nào có thể giải thích cho tôi tại sao lại bị Debug như vậy không ạ?
Bạn viết như vậy chưa đúng. Mình cũng mới học, mình viết đại loại như thế này, chủ yếu làm cái gì trong Vòng lặp For Each.

PHP:
Sub Text1()
Dim rng As Range
Dim i As Integer
    Range("C3:C28").SpecialCells(xlCellTypeConstants).Select
  For Each rng In Selection
    i = i + 1
    rng.Value = i
    
    Next rng
End Sub

Sao bạn không làm theo thứ tự như thế này:
1.Xác định các Cells có hằng số xlCellTypeConstants.-->Nó sẽ hiển thị ra các cells được tìm thấy trong vùng Selection.
2.Tiếp theo bạn Lặp từng Cell trong Vùng selection này, nếu có thì bạn làm hành động gì đó, nó nằm trong vòng lặp For.

Em giải thích như thế có sai chỗ nào, mong các bạn, thầy sửa sai để em tiền bộ.
Xin cảm ơn !!
 
Lần chỉnh sửa cuối:
Upvote 0
Ah, tôi sửa dòng 5 lại như vầy thì chạy được:
[GPECODE=vb]Sub Text1()
Dim rng As Range
For Each rng In [C3:C28].SpecialCells(xlCellTypeConstants, 1)
Range(rng, rng.End(xlDown)).SpecialCells(xlCellTypeBlanks).Select
Selection = "=RC[-1]*" & rng.Address(, , 2)
Next
End Sub
[/GPECODE]

Bạn xem lại thử nhé!
1.Câu lệnh đầu for Each bạn đã cho cái biến Rng nó chạy trong Selection mà chỉ có có các Cell thỏa mãn là xlCellTypeConstants.
2. Ở trong vòng lặp For bạn lại cho nó hành động chọn lại một lần nữa, mình thấy Excel báo Lỗi No cell not found đó.
 
Upvote 0
Bạn xem lại thử nhé!
1.Câu lệnh đầu for Each bạn đã cho cái biến Rng nó chạy trong Selection mà chỉ có có các Cell thỏa mãn là xlCellTypeConstants.
2. Ở trong vòng lặp For bạn lại cho nó hành động chọn lại một lần nữa, mình thấy Excel báo Lỗi No cell not found đó.
Tôi vẫn chạy được mà, bạn có nhầm không?
1.Câu lệnh đầu for Each bạn đã cho cái biến Rng nó chạy trong Selection mà chỉ có có các Cell thỏa mãn là xlCellTypeConstants.
=> Cái này chỉ chọn để duyệt các ô nào có số chết.
2. Ở trong vòng lặp For bạn lại cho nó hành động chọn lại một lần nữa, mình thấy Excel báo Lỗi No cell not found đó.
=> Không phải là chọn lần nữa đâu bạn => Cái này chọn những ô rỗng (Blank) mà.
P/s: Code chạy cho File VD ở #5.
 
Upvote 0
Code cùi:
PHP:
Sub Text1()
    Dim i As Long
    For i = 3 To 28
           If Cells(i, 1) <> "" Then
              Range(Cells(i, 1), Cells(i, 1).End(xlDown)).SpecialCells(xlCellTypeBlanks).Offset(, 2) = "=RC[-1]*R" & i & "C"
           End If
    Next
End Sub
Các anh cho em hỏi làm thế nào để có thể cũng với mục đích như ở ví dụ trên, nhưng những thông số đầu vào mình có thể nhập vào tùy vào vị trí cụ thể của bài toán. Như trong đoạn code trên "For i = 3 To 28" thì 3 với 28 mình có thể nhập vào sau, tương tự "Range(Cells(i, 1);Offset(, 2);RC[-1]" thì 1, 2, -1 mình có thể nhập vào sau ngay trên giao diện của excel.
 
Upvote 0

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

Back
Top Bottom