Xác định số thứ tự của phần tử trong 1 mảng

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

anjhan

Thành viên mới
Tham gia
19/4/09
Bài viết
22
Được thích
1
Nghề nghiệp
Đang thất nghiệp
Giả sử mình có 1 mảng dọc giả dụ B3:B10. Làm sao để lấy giá trị số thự tự của phần tử đầu tiên đến phần tử cuối cùng của mảng đó. Chẳng hạn mảng B3:B10 có 8 phần tử sẽ lấy giá trị từ 8 đến 1 ( For ... = 8 to 1). Mình đình dùng Lbound, Ubound mà chưa hiểu hết cách dùng. Mong các bạn giúp đỡ.
 
Giả sử mình có 1 mảng dọc giả dụ B3:B10. Làm sao để lấy giá trị số thự tự của phần tử đầu tiên đến phần tử cuối cùng của mảng đó. Chẳng hạn mảng B3:B10 có 8 phần tử sẽ lấy giá trị từ 8 đến 1 ( For ... = 8 to 1). Mình đình dùng Lbound, Ubound mà chưa hiểu hết cách dùng. Mong các bạn giúp đỡ.


- Lấy giá trị xong thì để nó ở đâu? Để làm gì?
- Chắc không ai "huỡn" giả lập dữ liệu và làm theo kiểu "mơ hồ" như vậy đâu.
 
Mình lấy giá trị đó để nhân với giá trị khác chẳng hạn là giá trị của cell đó trong range, chẳng hạn ô B3 có giá trị 1327 sẽ lấy giá trị 1327 nhân với 8.
 
Mình chi đang tìm hiểu thêm về vba thôi. Mong các bạn thông cảm.
 
Mã:
Function tDem(Rng As Range)
Dim MyStr As String
Dim Cll As Range
Dim d As Integer
d = Application.WorksheetFunction.Count(Rng)
Dim c (1 To d) As Integer
    For Each Cll In Rng
    a = Cll.Value
        For i = UBound(c) To LBound(c)
    b = a * i
    tDem = tDem + b
    Next
        Next
End Function

Không biết là sai ở đâu, mong các bạn chỉ giúp.
 
Lần chỉnh sửa cuối:
Mã:
Function tDem(Rng As Range, Str As String)
Dim MyStr As String
Dim Cll As Range
Dim d As Integer
d = Application.WorksheetFunction.Count(Rng)
Dim c (1 To d) As Integer
    For Each Cll In Rng
    a = Cll.Value
        For i = UBound(c) To LBound(c)
    b = a * i
    tDem = tDem + b
    Next
        Next
End Function

Không biết là sai ở đâu, mong các bạn chỉ giúp.

Đã nói bên trên.
Ý bạn muốn làm gì nên nói rõ kèm theo file Excel có dữ liệu và mẫu kết quả muốn có để mọi người dễ hiểu.
Bạn tự nghĩ ra một cái gì đó rồi viết, hỏi người khác sai chỗ nào, ví dụ tôi viết 1 tràng tiếng "Ả Rập pha Campuchia" rồi nhờ người khác chỉ các chỗ sai, ai biết đâu mà chỉ.
Nếu muốn "tự học" VBA nên chuyển sang Topic chuyên đề về Macro, hay các câu hỏi về VBA ... có lẽ sẽ thích hợp hơn.

http://www.giaiphapexcel.com/forum/forumdisplay.php?89-Hỏi-đáp-về-VBA-Macro
 
Lần chỉnh sửa cuối:
Giả sử mình có 1 mảng dọc giả dụ B3:B10. Làm sao để lấy giá trị số thự tự của phần tử đầu tiên đến phần tử cuối cùng của mảng đó. Chẳng hạn mảng B3:B10 có 8 phần tử sẽ lấy giá trị từ 8 đến 1 ( For ... = 8 to 1). Mình đình dùng Lbound, Ubound mà chưa hiểu hết cách dùng. Mong các bạn giúp đỡ.

Mã:
Function tDem(Rng As Range, Str As String)
Dim MyStr As String
Dim Cll As Range
Dim d As Integer
d = Application.WorksheetFunction.Count(Rng)
Dim c (1 To d) As Integer
    For Each Cll In Rng
    a = Cll.Value
        For i = UBound(c) To LBound(c)
    b = a * i
    tDem = tDem + b
    Next
        Next
End Function

Không biết là sai ở đâu, mong các bạn chỉ giúp.

Từ 2 bài của bạn gửi lên, tôi chưa xác định rõ bạn đếm số phần tử hay lấy giá trị của mỗi phần tử trong mảng đó nữa! Bạn nói rõ lên xem sao!

Bạn gửi một cái file giả định lên, bạn đưa ra kết quả cần có là gì sẽ dễ hiểu hơn nhiều so với cách mà bạn diễn giải đó!
 
Thank Ba Tê. Mình cũng không dành lắm về cái này. Thôi mình xin up file để các bạn xem vậy.
 

File đính kèm

Thank Ba Tê. Mình cũng không dành lắm về cái này. Thôi mình xin up file để các bạn xem vậy.
Đếm số ô dữ liệu trong mảng D5:D11. Sau đó lấy giá trị các ô nhân với số ô giảm dần. Ở đây có 7 ô thì tdem= 1237*7 + 1843*6 + 1771*5 + 1833*4+… đến 1971*1
Vẫn chưa "dõ dàng".
Tính rồi để luôn trong "bộ nhớ", hay ghi số liệu vào các ô nào, hay ....
Híc!
 
Lần chỉnh sửa cuối:
Ô C5= tdem( D5:D11) Ghi dữ liệu vào ô.
 
Thank Ba Tê. Mình cũng không dành lắm về cái này. Thôi mình xin up file để các bạn xem vậy.
Gửi cái file lên phải lẹ hơn không!

Mã:
Function NhanPhanTu(ByVal MyRange As Range) As Double
    Dim r As Long
    Dim sArray, itm
    sArray = MyRange
    If Not IsArray(sArray) Then
        sArray = Array(sArray)
    End If
    For Each itm In sArray
        r = r + 1
        NhanPhanTu = NhanPhanTu + Val(itm) * r
    Next
End Function
 
Ô C5= tdem( D5:D11) Ghi dữ liệu vào ô.
Nếu là Function thì thử cái này:
PHP:
Public Function GPE(Rng As Range) As Double
Dim Cll As Range, R As Long
R = Rng.Rows.Count
For Each Cll In Rng
    GPE = GPE + Cll * R
    R = R - 1
Next Cll
End Function
Nếu muốn thử nghiệm với mảng, Ubound.. thì xem cái này:
PHP:
Public Function GPE(Rng As Range) As Double
Dim Arr(), I As Long, R As Long
Arr = Rng.Value
R = UBound(Arr, 1)
For I = 1 To R
    GPE = GPE + Arr(I, 1) * R
    R = R - 1
Next I
End Function
 
Lần chỉnh sửa cuối:
Uh trời có cái funtion mà chờ ngoài quán cả buổi sáng. Poor me. Thank các bạn nhiều
 
Ô C5= tdem( D5:D11) Ghi dữ liệu vào ô.

Uh trời có cái funtion mà chờ ngoài quán cả buổi sáng. Poor me. Thank các bạn nhiều

Bài viết vừa rồi tôi hơi nhầm là bạn "đếm ngược" chứ không phải đếm xuôi!

Thế nhưng cho hỏi, bạn chọn 1 vùng 10 ô, giả sử 9 ô là không có giá trị hoặc bằng 0, 1 ô thì có, vậy nó nhân với 10 hay nó chỉ nhân với 1 giá trị vậy???

Nếu chỉ nhân với 1 giá trị thì nhân với thứ tự nó đứng hay chỉ nhân với 1?
 
Lần chỉnh sửa cuối:
Uh trời có cái funtion mà chờ ngoài quán cả buổi sáng. Poor me. Thank các bạn nhiều
Cũng do bạn thôi, từ 9:46 sáng ở bài #2 tôi đã khuyên bạn gởi file và yêu cầu, kết quả muốn có..., mọi người dễ hiểu thì đâu tốn tiền "ngâm quán" lâu như vậy.
 
Nếu là Function thì thử cái này:
PHP:
Public Function GPE(Rng As Range) As Double
Dim Cll As Range, R As Long
R = Rng.Rows.Count
For Each Cll In Rng
    GPE = GPE + Cll * R
    R = R - 1
Next Cll
End Function
Nếu muốn thử nghiệm với mảng, Ubound.. thì xem cái này:
PHP:
Public Function GPE(Rng As Range) As Double
Dim Arr(), I As Long, R As Long
Arr = Rng.Value
R = UBound(Arr, 1)
For I = 1 To R
    GPE = GPE + Arr(I, 1) * R
    R = R - 1
Next I
End Function


Sao kiểm tra lại em thấy hàm của anh thế nào ấy nhỉ?
 

File đính kèm

Bài viết vừa rồi tôi hơi nhầm là bạn "đếm ngược" chứ không phải đếm xuôi!

Thế nhưng cho hỏi, bạn chọn 1 vùng 10 ô, giả sử 9 ô là không có giá trị hoặc bằng 0, 1 ô thì có, vậy nó nhân với 10 hay nó chỉ nhân với 1 giá trị vậy???

Nếu chỉ nhân với 1 giá trị thì nhân với thứ tự nó đứng hay chỉ nhân với 1?

Nhân với thứ tự nó giảm dần
 
Xin hỏi Ba Tê nếu mình không lấy giá trị của ô mà mình lấy số chuỗi của ô thì làm thế nào vậy. Giả sử ô D5 là 1237 có 4 kí tự
 
Xin hỏi Ba Tê nếu mình không lấy giá trị của ô mà mình lấy số chuỗi của ô thì làm thế nào vậy. Giả sử ô D5 là 1237 có 4 kí tự
Bạn phải đưa ra trường hợp giả lập, sau đó là kết quả mong đợi, chứ hỏi vậy "ông nội" tôi cũng không hình dung ra nữa!
 
Web KT

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

Back
Top Bottom