Sử dụng hàm sẵn có trong Excel từ VBA

Liên hệ QC
Cũng phải chỉ ra chỗ sai.
Range("E3").Value = "=Iferror(Vlookup(C3,CD!D4:G1500,3,0),"""")"
Câu lệnh trên không sai chỗ chấm Value, mà sai ở chỗ thiếu mấy cái đỏ đỏ
 
Sao em làm giống Thầy ptm0412 mà bị lỗi "1004".
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)If Not Intersect(Target, [C3:D3]) Is Nothing Then
   Application.EnableEvents = False
   Dim tam
   If Target.Column = 3 Then
      tam = Target
      Target.FormulaR1C1 = "=""=" & "" & "" & tam & """"
   End If
   Sheet3.[D2:H10000].AdvancedFilter 2, [C2:D3], Sheet4.[D5:G5]
   If Target.Column = 3 Then Target = tam
   Application.EnableEvents = True
   Range("G3").FormulaR1C1 = "=sum(R[3]C:R[397]C)"
   Range("H3").FormulaR1C1 = "=(RC[-2]-RC[-1])"
   Range("E3").Value = "=iferror(Vlookup(C3,Sheet5!D4:G1500,3,0),"")"
   Range("F3").Value = "=iferror(Vlookup(C3,Sheet5!D4:G1500,4,0),"")"
    If Range("H3") < 0 Then
     MsgBox "So luong cat nhieu hon SL CD", , "Anh Quang bao !!!!"
 End If
End If
End Sub
Mong các AC giúp đỡ!!!!
 
Đã dùng VBA thì VLOOKUP làm gì không biết (lại còn rối). Dùng Find đi bạn à!
Tìm giá trị cell C3 trong Sheets("CD").Range("D4:D1500") ---> Nếu tìm thấy thì "quẹo phải" 3 cột để lấy giá trị
Vậy thôi

Em nghĩ là "quẹo trái" mới đúng hướng chứ anh.
 
Vì em muốn khi giá trị bằng #N/A thì bằng khoảng trắng, nên Thầy Ndu và Anh QuangHai có thể sửa trực tiếp trên code của bài 42 được không Ah!!!. Mong các A giúp đỡ,

giúp em chỉnh chổ:
Mã:
[COLOR=#000000]Range("E3").Value = "=iferror(Vlookup(C3,Sheet5!D4:G1500,3,0),"")"
[/COLOR][COLOR=#000000]   Range("F3").Value = "=iferror(Vlookup(C3,Sheet5!D4:G1500,4,0),"")"[/COLOR]
Mong mọi người giúp đỡ!!!!

Các AC có thể chỉ em dùng "Find" được không Ah!!!

Sao từ khi em sử dụng thêm hàm "Iferror" thì bị lỗi. Mong các AC giúp đỡ!!!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn có để ý thấy code của bạn bị thiếu 2 dấu nháy ở cuối không? (bạn xem bài #41 của bác ptm đó)
 
mình đã chỉnh theo Thầy ptm0412 rồi(như bài 42, 45) vẫn bị lỗi "1004"
 
Em đưa file lên, mong các AC xem giúp đỡ. Vấn đề là khi em dùng hàm "Iferror" là lỗi. Mong các AC xem code!!!
 

File đính kèm

  • thu.xlsm
    16.5 KB · Đọc: 29
Nói tóm lại là bạn làm không giống bài 41 tôi đã sửa lỗi.
 
Em đưa file lên, mong các AC xem giúp đỡ. Vấn đề là khi em dùng hàm "Iferror" là lỗi. Mong các AC xem code!!!

thử sửa lại như vậy
Mã:
 Range("B2").Value = "=Vlookup(A2,Oder!$A$3:$D$25,3,0)"
Range("C2").Value = "=Iferror(Vlookup(A2,Oder!$A$3:$D$25,4,0),"""")"

hoặc dùng Find
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tim As Range
If Not Intersect(Target, [A2]) Is Nothing Then
 
   [b2:c2].ClearContents
   Set tim = Sheet2.[a2:a25].Find(Target, , , 1)
   If Not tim Is Nothing Then
    [b2] = tim.Offset(, 3)
    [c2] = tim.Offset(, 4)
    End If
    
End If
End Sub
 
Đúng là em quá"gà", bây giờ em mới thấy được cái "sai" của em. Bài của Thầy ptm0412 là có tới "Bốn cái nháy kép" cón của em chỉ có "hai cái nháy kép". Em xin lỗi Thầy và Các AC.(Xin lỗi Anh nvson, em còn "cãi" lại). Nhân đây cho em hỏi các AC, dùng "Clearcontent" tốt hơn hay dùng "khoảng trắng"("").(trong trường hợp nhập liệu xong thì xóa đi hay cho nó là "".).Cũng mong các AC xem đoạn code có thể rút gọn dùm em được không Ah!!!
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)If Not Intersect(Target, [C3:D3]) Is Nothing Then
   Application.EnableEvents = False
   Dim tam
   If Target.Column = 3 Then
      tam = Target
      Target.FormulaR1C1 = "=""=" & "" & "" & tam & """"
   End If
   Sheet3.[D2:H10000].AdvancedFilter 2, [C2:D3], Sheet4.[D5:G5]
   If Target.Column = 3 Then Target = tam
   Application.EnableEvents = True
   Range("G3").FormulaR1C1 = "=if(sum(R[3]C:R[397]C)=0,"""",Sum(R[3]C:R[397]C))"
   Range("H3").FormulaR1C1 = "=iferror((RC[-2]-RC[-1]),"""")"
   Range("E3").Value = "=iferror(Vlookup(C3,CD!D5:G1500,3,0),"""")"
   Range("F3").Value = "=iferror(Vlookup(C3,CD!D5:G1500,4,0),"""")"
    If Range("H3") < 0 Then
     MsgBox "So luong cat nhieu hon SL CD", , "Anh Quang bao !!!!"
     End If
    If Range("E3") = "" Then
     MsgBox "Don hang nay khong co", , "Anh Quang bao"
 End If
End If
End Sub
Em xin cám ơn!!!!
 
Gửi Bình file này xem và tham khảo cho các ứng dụng của mình
Thân

Như file hướng dẫn của anh. Nếu em muốn giá trị tại cột G tự động khi có mã giống như Fill Công thức trong Excel vậy thì làm thế nào?
Bởi vì nếu phải khai rất nhiều dòng
Sheet1.Range("G5").Value = WorksheetFunction.SumIf(Range("C5:C13"), Range("F5"), Range("D5:D13"))
thì quá dài
Tức thay G5 bằng G6, G7, G8 thì có vẻ khổ hơn là dùng hàm ạ.
 
Như file hướng dẫn của anh. Nếu em muốn giá trị tại cột G tự động khi có mã giống như Fill Công thức trong Excel vậy thì làm thế nào?
Bởi vì nếu phải khai rất nhiều dòng
Sheet1.Range("G5").Value = WorksheetFunction.SumIf(Range("C5:C13"), Range("F5"), Range("D5:D13"))
thì quá dài
Tức thay G5 bằng G6, G7, G8 thì có vẻ khổ hơn là dùng hàm ạ.

tức nhiên trong trường hợp này, nó đơn giản sử dụng sumif là ok nhất rồi, tuy nhiên tôi nghĩ là người ta muốn dzo5c vba thôi nếu bạn muôn fill xuống thì bạn phải nhét luôn cái cthuc đó vào sheet
vi du như
Mã:
[G5].FormulaR1C1 = "=SUMIF(Hang,RC[-1],SoLuong)"
    [G6:G10].FillDown

đó là khi mới tập tành vba, môt khi đã có ít ngón nghề rôi thì sẻ không sử dụng worksheet function nữa
================
ví dụ 30 tết mà không có độ nhậu
Mã:
Sub Macro1()
Dim SArr, kq As Variant, d As Object, i, j, k As Long
SArr = [c5].Resize([c60000].End(3).Row - 4, 2).Value
ReDim kq(1 To UBound(SArr), 1 To 2)
Set d = CreateObject("Scripting.Dictionary")

For i = 1 To UBound(SArr)
If Not d.exists(SArr(i, 1)) Then
    k = k + 1
    d.Add SArr(i, 1), k
    kq(k, 1) = SArr(i, 1)
    kq(k, 2) = SArr(i, 2)
Else
    kq(d.Item(SArr(i, 1)), 2) = kq(d.Item(SArr(i, 1)), 2) + SArr(i, 2)
End If
Next
[F5:G100].Clear
[F5].Resize(k, 2).Value = kq
 Set d = Nothing
 
End Sub
 
Lần chỉnh sửa cuối:
tức nhiên trong trường hợp này, nó đơn giản sử dụng sumif là ok nhất rồi, tuy nhiên tôi nghĩ là người ta muốn dzo5c vba thôi nếu bạn muôn fill xuống thì bạn phải nhét luôn cái cthuc đó vào sheet
vi du như
Mã:
[G5].FormulaR1C1 = "=SUMIF(Hang,RC[-1],SoLuong)"
    [G6:G10].FillDown

đó là khi mới tập tành vba, môt khi đã có ít ngón nghề rôi thì sẻ không sử dụng worksheet function nữa
================
ví dụ 30 tết mà không có độ nhậu
Mã:
Sub Macro1()
Dim SArr, kq As Variant, d As Object, i, j, k As Long
SArr = [c5].Resize([c60000].End(3).Row - 4, 2).Value
ReDim kq(1 To UBound(SArr), 1 To 2)
Set d = CreateObject("Scripting.Dictionary")

For i = 1 To UBound(SArr)
If Not d.exists(SArr(i, 1)) Then
    k = k + 1
    d.Add SArr(i, 1), k
    kq(k, 1) = SArr(i, 1)
    kq(k, 2) = SArr(i, 2)
Else
    kq(d.Item(SArr(i, 1)), 2) = kq(d.Item(SArr(i, 1)), 2) + SArr(i, 2)
End If
Next
[F5:G100].Clear
[F5].Resize(k, 2).Value = kq
 Set d = Nothing
 
End Sub

Cảm ơn anh, 30 Tết vẫn giúp đỡ.
Em mới tập tành VBA thôi, nên em sẽ chọn code tập tành trước.
Em xin hỏi thêm ạ
Phần công thức nhét vào đó, em có copy y nguyên công thức như ở thanh fx để gán vào được không ạ?
Và sau đó em muốn giá trị hiển thị là Value chứ không phải công thức thì làm thế nào? Chứ để công thức thì file rất nặng ạ.
(Ý tưởng em sẽ tạo 01 nút để bấm, mỗi lần có số liệu mới sẽ bấm Cập nhật tính toán)
 
Cảm ơn anh, 30 Tết vẫn giúp đỡ.
Em mới tập tành VBA thôi, nên em sẽ chọn code tập tành trước.
Em xin hỏi thêm ạ
Phần công thức nhét vào đó, em có copy y nguyên công thức như ở thanh fx để gán vào được không ạ?
Và sau đó em muốn giá trị hiển thị là Value chứ không phải công thức thì làm thế nào? Chứ để công thức thì file rất nặng ạ.
(Ý tưởng em sẽ tạo 01 nút để bấm, mỗi lần có số liệu mới sẽ bấm Cập nhật tính toán)

bạn thử quay lại macro các thao tác
- nhập cthuc vào một cell
- fill nó xuống
- copy rồi paste value lại
===
việc copy y chang trên thanh cthuc tôi e là không được, vì trong vba nó tham chiếu dạng RC
 
bạn thử quay lại macro các thao tác
- nhập cthuc vào một cell
- fill nó xuống
- copy rồi paste value lại
===
việc copy y chang trên thanh cthuc tôi e là không được, vì trong vba nó tham chiếu dạng RC

Vậy em chuyển bảng tính về dạng RC và copy công thức trên thanh FX là được đúng không ạ?
 
Có chủ đề nào. Tuyển tập các bài tập VBA từ căn bản đến nâng cao không...
Hay ae có File nào chia sẻ với
 
Mình muốn dùng vba để giải quyết vấn đề:
nếu A1 = error (vd: #N/A, #REF...) thì trả về ô rỗng ("").
nhờ các bạn nào biết chỉ giúp
 
Mình muốn dùng vba để giải quyết vấn đề:
nếu A1 = error (vd: #N/A, #REF...) thì trả về ô rỗng ("").
nhờ các bạn nào biết chỉ giúp
Bạn xem đúng không nhé.
Mã:
Sub linhtinh()
  If Left(Range("A1").Text, 1) = "#" Then
     Range("A1").Value = Empty
  End If
End Sub
 
Web KT
Back
Top Bottom