giúp đỡ về việc tạo vòng lặp "for each" cho chuỗi giá trị

Liên hệ QC

quanghao262

Thành viên mới
Tham gia
27/4/10
Bài viết
31
Được thích
0
em đang thắc mắc một số vấn đề về vòng lặp mong anh chị giúp đỡ.
Ví dụ :
em có chuỗi tên từ A1 đến A10.
giờ em muốn dùng lệnh tô màu đỏ cho các giá trị từ A1 đến A10 đó( dùng vòng lặp for each).(

(thực chất đây chỉ là ví dụ cơ bản để hôm sau em tự lập hàm goal seak cho chuỗi n giá trị cần goal seak)
em đang còn rất kém về VBA nên mong anh chị giúp đỡ .
 
cám ơn anh nhiều lắm,trong buổi sáng này mà e đã học hỏi từ các anh được rất nhiều.
em thử tạo 1 hàm này và thấy nó chạy được (chẳng qua là edit của anh NDU thôi).anh xem có lỗi hay bẫy gì không,hì.
PHP:
Sub quanhgo()
Dim i As Long
Dim Rng As Range
Set Rng = Range("A1:B10")
     For i = 1 To Rng.Rows.Count
            Rng.Cells(i, 2).goalseek 0, Rng.Cells(i, 1)
     Next
End Sub
Lỗi có thể xảy ra nếu cột B có cell nào đó bị rổng! Vậy để chắc ăn thì thêm On Error Resume Next vào đầu code
Ở đây ta dùng With... End With (giống như đặt thành thừa số chung) để khỏi mất công gọi lại Rng
PHP:
Sub quanhgo()
  Dim i As Long
  On Error Resume Next
  With Range("A1:B10")
    For i = 1 To .Rows.Count
      .Cells(i, 2).GoalSeek 0, .Cells(i, 1)
    Next
  End With
End Sub
Hoặc 1 cách viết khác:
PHP:
Sub quanhgo()
  Dim Clls As Range
  On Error Resume Next
  For Each Clls In Range("A1:A10")
    Clls.Offset(, 1).GoalSeek 0, Clls
  Next
Đây chính là nhữngcách viết mà bạn nên học
 
Upvote 0
không ngờ cấu trúc nó lại rút gọn đơn giản thế,nhất là khi sử dụng
PHP:
Sub quanhgo()
  Dim Clls As Range
  On Error Resume Next
  For Each Clls In Range("A1:A10")
    Clls.Offset(, 1).GoalSeek 0, Clls
  Next
đúng là rất đáng phải học hỏi,hì hì.
thế anh xem rút gọn hàm nội suy của em được không ah?đây là phần nội suy 1 chiều
PHP:
Function ns(vtra As Range, X As Double) As Double
Dim i As Integer
Dim Rng As Range
Dim ktra As Boolean
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
For i = 1 To vtra.Cells.Count
    Set Rng = vtra.Cells(i, 1)
        If Rng <= X And Rng.Offset(1, 0) >= X Then
            x1 = Rng.Value: x2 = Rng.Offset(1, 0).Value
            y1 = Rng.Offset(0, 1).Value: y2 = Rng.Offset(1, 1).Value
            ns = y1 + (y2 - y1) * (X - x1) / (x2 - x1)
        ktra = True
    End If
Next i
    If ktra = False Then
        MsgBox "ngoai vung phu song", vbInformation
    End If
Exit Function
End Function
cám ơn anh,hì hì.
 
Upvote 0
thế anh xem rút gọn hàm nội suy của em được không ah?đây là phần nội suy 1 chiều
PHP:
Function ns(vtra As Range, X As Double) As Double
Dim i As Integer
Dim Rng As Range
Dim ktra As Boolean
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
For i = 1 To vtra.Cells.Count
    Set Rng = vtra.Cells(i, 1)
        If Rng <= X And Rng.Offset(1, 0) >= X Then
            x1 = Rng.Value: x2 = Rng.Offset(1, 0).Value
            y1 = Rng.Offset(0, 1).Value: y2 = Rng.Offset(1, 1).Value
            ns = y1 + (y2 - y1) * (X - x1) / (x2 - x1)
        ktra = True
    End If
Next i
    If ktra = False Then
        MsgBox "ngoai vung phu song", vbInformation
    End If
Exit Function
End Function
cám ơn anh,hì hì.
Muốn sửa 1 code thì ít nhất phải hiểu được nó làm cái gì
Với mấy vụ NỘI SUY gì gì đó thì xin lỗi, tôi chẳng biết gì về nó cả! Bạn tham khảo các bài viết về Nội suy trên diễn đàn này đi
 
Upvote 0
Muốn sửa 1 code thì ít nhất phải hiểu được nó làm cái gì
Với mấy vụ NỘI SUY gì gì đó thì xin lỗi, tôi chẳng biết gì về nó cả! Bạn tham khảo các bài viết về Nội suy trên diễn đàn này đi
Nội suy là ... là nội suy:

Sự biến thiên của y = f(x) là 1 đường cong (f không biết, chỉ có được 1 số giá trị theo thống kê, hoặc f là 1 hàm khó tính bằng tay)
Chia nhỏ x ra đến mức có thể: x1, x2, x3, ..., xn, thống kê được giá trị y tương ứng là y1, y2, y3, ..., yn
Giả định trong 1 khoảng nhỏ từ x(i-1) đến x(i), f(x) là tuyến tính
Có 1 giá trị X nào đó, và muốn tính Y tương ứng:

tìm xem X nằm trong khoảng chia nhỏ nhỏ nào
Lấy 2 giá trị x cận trên và cận dưới x1 và x2
Lấy giá trị y tương ứng của 2 x đó: y1 và y2
Tính Y bằng phép tính tỷ lệ thuận (vì giả định tuyến tính trong khoảng x1, x2):

Y = y1 + (y2 - y1) / (x2 - x1) * (X - x1)

Thí dụ: ta có bảng tra sin 1 góc từ 0 độ đến 180 độ, bước là 1 độ chẵn. Tính sin 46 độ 23 phút?

Sin 46 độ 23 phút = sin 46 độ + (sin 47 độ - sin 46 độ) / 60 * 23
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom