Ghi lại lịch sử của một ô để tìm giá trị min max trong các thời điểm khác nhau khi thay đổi giá trị ô đó

theanh

Thành viên mới
Các bạn ơi cho mình hỏi : Mình có ô A1 chứa dử liệu giá của 1 mả chứng khoán, Mình muốn dùng VBA để làm cho ô B1 lấy được mức giá lớn nhất của A1, và ô C1 lấy được mức giá bé nhất của A1 ( lúc A1 tăng giảm liên tục ).
Mình xin cảm ơn
 

bvtvba

Thành viên tích cực
Chào bạn. Bạn đã thử đặt mình vào vị trí người đọc chưa?
Ô A1 chứa dữ iệu của một mã chứng khoán. Mức giá ứng với mã chứng khoán ấy lấy ở đâu, nếu bạn làm bằng tay thì thao tác như thế nào? Đây là điều người đọc thắc mắc. => Phần này người đọc chưa hiểu.
Trong các mức giá đó, lấy về và so sánh tìm ra giá trị lớn nhất, nhỏ nhất, ghi vào ô B1 và C1 tương ứng. Phần này không khó.
Bạn nên đặt mình vào vị trí người đọc, khi đưa ra câu hỏi.
 

theanh

Thành viên mới
Cảm ơn bạn đả nhắc nhở, ý mình là A1 mình tự auto copy về,
....
IE.ExecWB 17, 0 '// SelectAll
IE.ExecWB 12, 2 '// Copy selection
Range("A5").Select
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
False, NoHTMLFormatting:=True
Range("A5").Select
IE.Quit

Việc mình ko làm được là "tìm ra giá trị lớn nhất, nhỏ nhất của A5, ghi vào ô B1 và C1 " , mong bạn giúp đở, thanks
 

bvtvba

Thành viên tích cực
Nói thật là mình không hiểu gì, bạn ạ. Chắc là do mình chậm hiểu quá.
Bạn có thể đưa cái file của bạn lên cho mọi người xem được không ạ
Hoặc là bạn cứ để y nguyên trạng thái topic như thế này, thử xem sau 1 tháng có ai hiểu topic này không nhé.
 

tuhocvba

Administrator
Thành viên BQT
Cho mình thảo luận cùng tí cho vui nhé. Theo qui định thì bài trong box thành viên tự giúp nhau, BQT sẽ không tham gia. Mình thảo luận với tư cách thành viên thông thường, mọi người không cần để ý mình là admin hay không.

Một là, ở đầu nói là A1, ở dưới nói là A5, thật ra người đọc không hiểu gì.
ừ thì cứ cho là A1 đi, nội dung A1 hiện nay đang là cái gì, là điều người đọc không hiểu.
tôi ví dụ:
Bạn cần đăng nhập để thấy hình ảnh

Nào, bây giờ A1 là 10, tìm giá trị lớn nhất của 10, đáp số là gì? Giá trị nhỏ nhất của 10, đáp số là gì? Người đọc hoàn toàn không hiểu gì.
Input là cái gì, người đọc hoàn toàn không hiểu gì. hãy đưa hình ảnh hoặc file, nội dung input là gì? giá trị kỳ vọng là gì, được thể hiện ở đâu?
Đó là điều người đọc quan tâm.

tôi rất buồn vì qua tiếp xúc với các bạn, không chỉ ở topic này, tôi nhận thấy nền học vấn của nước nhà thật là nhiều vấn đề. Các bạn không thể diễn giải cho người khác hiểu, vậy thì các bạn làm việc thế nào được?
 

theanh

Thành viên mới
Cho mình thảo luận cùng tí cho vui nhé. Theo qui định thì bài trong box thành viên tự giúp nhau, BQT sẽ không tham gia. Mình thảo luận với tư cách thành viên thông thường, mọi người không cần để ý mình là admin hay không.

Một là, ở đầu nói là A1, ở dưới nói là A5, thật ra người đọc không hiểu gì.
ừ thì cứ cho là A1 đi, nội dung A1 hiện nay đang là cái gì, là điều người đọc không hiểu.
tôi ví dụ:
Bạn cần đăng nhập để thấy hình ảnh

Nào, bây giờ A1 là 10, tìm giá trị lớn nhất của 10, đáp số là gì? Giá trị nhỏ nhất của 10, đáp số là gì? Người đọc hoàn toàn không hiểu gì.
Input là cái gì, người đọc hoàn toàn không hiểu gì. hãy đưa hình ảnh hoặc file, nội dung input là gì? giá trị kỳ vọng là gì, được thể hiện ở đâu?
Đó là điều người đọc quan tâm.

tôi rất buồn vì qua tiếp xúc với các bạn, không chỉ ở topic này, tôi nhận thấy nền học vấn của nước nhà thật là nhiều vấn đề. Các bạn không thể diễn giải cho người khác hiểu, vậy thì các bạn làm việc thế nào được?
Chào bạn số 10 mình tự copy về exel, là giá của 1 cổ phiếu tăng giảm liên tục trong ngày, mình muốn biết giá cao nhất và thấp nhất. Bạn giúp mình được ko ?
 

tuhocvba

Administrator
Thành viên BQT
Bạn nên đưa ảnh minh họa hoặc file lên. Nếu chỉ có ô A1 có dữ liệu thì nó so sánh với cái gì?
 

theanh

Thành viên mới
Bạn nên đưa ảnh minh họa hoặc file lên. Nếu chỉ có ô A1 có dữ liệu thì nó so sánh với cái gì?
mình ví dụ: 9 giờ: A1 =10, 9h5' A1= 8, 9h10' A1 =11 ...., Mình cần lọc kết quả cao nhất của A1 hiển thị ở B1 được ko bạn ?
 

tuhocvba

Administrator
Thành viên BQT
Không bạn ạ. A1 chỉ có một giá trị. Nó không biết so sánh với cái nào.
Sao bạn không viết dữ liệu trên cột A: A1,A2,... Khi đó thì có thể tìm giá trị lớn nhất, nhỏ nhất trên cột A.
 

theanh

Thành viên mới
Không bạn ạ. A1 chỉ có một giá trị. Nó không biết so sánh với cái nào.
Sao bạn không viết dữ liệu trên cột A: A1,A2,... Khi đó thì có thể tìm giá trị lớn nhất, nhỏ nhất trên cột A.
vậy thì mình dùng hàm max min thì dể rồi, mình có 1 bảng giá chứng khoán nhảy theo giờ, mà giá thì chỉ nằm trong 1 ô,
ví dụ :

các ô đâu có thể thay đổi được bạn
 

tuhocvba

Administrator
Thành viên BQT
đấy là ý tưởng của bạn thôi. Bạn có thể lấy nó về và sắp xếp ở đâu mà bạn muốn, sao phải cố định vào một ô.
 

theanh

Thành viên mới
Bạn ơi 1 ngày cứ 4 phút mình lấy 1 lần , 1 giờ = 14 x 5 = 70 ô ý tưởng này được ko bạn nhỉ,
 

tuhocvba

Administrator
Thành viên BQT
Ý tưởng của bạn được. Cho ghi hết lên cột A ấy. Rồi dùng min,max nó phù hợp với kiến thức bạn đang có hiện nay.
 

theanh

Thành viên mới
Cảm ơn bạn đả quan tâm, mình ko chuyên VBA nên đả lở đến đây thì xin hỏi bạn luôn là có thể dùng VBA để ghi lại kiểu như vậy ko,
ghi rãi từ A1 đến A70 bằng VBA đó bạn, thanks
 

Euler

Mod
Thành viên BQT
Tôi cho bạn một cách như sau, rồi bạn tự chế biến nhé.
File của bạn cần có hai sheet.
Sheet data: đây là sheet ghi dữ liệu vào ô A1.
sheet lichsu: đây là sheet ghi lại toàn bộ dữ liệu biến đổi ở ô A1.
Code cho sheet data:
Bạn cần đăng nhập để thấy hình ảnh

Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim X As Integer, Y As Integer
    Dim LastRow As Long
    
    X = Target.Column
    Y = Target.Row
    
    If Worksheets("lichsu").Range("A" & Rows.Count).End(xlUp).Row = Rows.Count Then
    
    Exit Sub
    
End If
With Worksheets("lichsu")
    LastRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & LastRow) = Now()
    .Range("B" & LastRow) = Target.Address(Y, X)
    .Range("C" & LastRow) = Cells(Y, X)
    .Range("D" & LastRow) = UserInfo(0)
    .Range("E" & LastRow) = UserInfo(1)
End With

End Sub
Bạn tạo module1, trên đó viết code như sau:
Bạn cần đăng nhập để thấy hình ảnh

Mã:
Option Explicit

Function UserInfo()

    Dim MyArray(2) As Variant

    Dim WshNetworkObject As Object
    Set WshNetworkObject = CreateObject("WScript.Network")
 
    With WshNetworkObject

        MyArray(0) = .UserName 'Ten nguoi truy cap
        MyArray(1) = .ComputerName 'Ten may tinh

    End With

    UserInfo = MyArray

    Set WshNetworkObject = Nothing

End Function
Khi tôi thực hiện thay đổi giá trị ô A1 trên sheet data thì trên sheet lichsu được cập nhật như thế này.
Bạn cần đăng nhập để thấy hình ảnh


Việc của bạn đến đây dễ rồi đúng không?
Bạn nên đặt vấn đề dễ hiểu hơn: ghi lại lịch sử thay đổi của một ô hay một sheet.
Kiến thức bạn còn yếu, hãy xem video của diễn đàn để học hỏi thêm.

Tôi giúp bạn với tư cách thành viên thông thường, không phải thành viên quản trị, tuy nhiên sẽ rất vui nếu bạn ủng hộ diễn đàn. Chúc bạn thu được nhiều kiến thức.
 

theanh

Thành viên mới
Cảm ơn bạn, mình sẻ cố gắng ủng hộ diển đàn, thanks
 
Top