[Hỏi] Tạo Range trong VBA (1 người xem)

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

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

rennnnn

Thành viên mới
Tham gia
10/3/10
Bài viết
7
Được thích
0
Thân chào mọi người,
Em đang làm 1 hàm tính diện tích thép để thống kê. Khi nhập dữ liệu, để tăng tốc độ nhập số liệu, em format 1 cell dạng 00"Y"00, để khi nhập 1425 vào ô sẽ được 12Y25. Bây giờ em cần làm 1 macro để tính diện tích thép. Em Dim một Range trong Excel cùng lúc (giả sử 12Y25 10Y20 8Y20). Sau đó em sẽ tách số liệu ra bằng hàm Left, Right thành 2 array riêng biệt, 1 array là số lượng thép, 1 array là đường kính thép (12 10 8) và (25 20 20). Sau đó, cho từng phần tử của array nhân với nhau để tính diện tích, và dim vào 1 array mới.
Tuy nhiên trong quá trình làm, hình như em định nghĩa biến sai nên ko ra được kết quả.
Em đính kèm file excel bên dưới, mong các cao thủ chỉ giáo. :(
Em xin cảm ơn trước.
Best Regards
 

File đính kèm

Các phần tử nhân với nhau như thế nào? Và kết quả xuất ra như thế nào? Có phải 12x25, 10x20, 8x20 và tất cả kết quả xuất ra trong 1 ô? Bạn cần nói rõ hơn mới dễ được trợ giúp.
 
Upvote 0
Chào bạn
Code của VB mình viết bạn có thể xem trong Module1 của file đính kèm.
Trong đó, mình đặt 2 Range là No_Bar và Dia_Bar. Sau đó cho từng phần tử của 2 Range này nhân với nhau. No_Bar(1,1)xDia_Bar(1,1) = 12x25. Tương tự với 10x20 8x20. Tiếp theo, các kết quả này được Dim vào 1 Range khác là Steel_Area. Từ đó, mình có thể truy xuất kết quả theo mong muốn Steel_Area(1,1) = ..., Steel_Area(2,2) = ..., v.v
Thank bạn đã quan tâm
 
Upvote 0
Mình cũng chưa hiểu rõ ý bạn. Code bạn viết là một hàm. Hàm sẽ cho ra một giá trị tại ô chứa hàm. Trong file của bạn, ô chứa hàm là F6. Bạn cho biết bạn muốn hàm Steel_Calc xuất ra giá trị bao nhiêu ở ô này?
 
Upvote 0
Chào bạn
Code của VB mình viết bạn có thể xem trong Module1 của file đính kèm.
Trong đó, mình đặt 2 Range là No_Bar và Dia_Bar. Sau đó cho từng phần tử của 2 Range này nhân với nhau. No_Bar(1,1)xDia_Bar(1,1) = 12x25. Tương tự với 10x20 8x20. Tiếp theo, các kết quả này được Dim vào 1 Range khác là Steel_Area. Từ đó, mình có thể truy xuất kết quả theo mong muốn Steel_Area(1,1) = ..., Steel_Area(2,2) = ..., v.v
Thank bạn đã quan tâm
Không hiểu sao 1 Function mà bạn muốn có kết quả là 1 mảng, Trong khi khai báo nó là Double?
Function Steel_Calc(Steel_Data As Range) As Double
Thử sửa lại như thế này xem:
PHP:
Function Steel_Calc(Steel_Data As Range) As Double
Dim Total_Column As Integer, i As Integer, Tem As Double, No_Bar(), Dia_Bar()
    Total_Column = Steel_Data.Columns.Count
ReDim No_Bar(1 To 1, 1 To Total_Column)
ReDim Dia_Bar(1 To 1, 1 To Total_Column)
    For i = 1 To Total_Column
        If Steel_Data(1, i).Value < 1000 Then
            No_Bar(1, i) = Val(Left(Steel_Data(1, i), 1))
        Else
            No_Bar(1, i) = Val(Left(Steel_Data(1, i), 2))
        End If
            Dia_Bar(1, i) = Val(Right(Steel_Data(1, i), 2))
            Tem = Tem + No_Bar(1, i) * Dia_Bar(1, i) ^ 2 * 3.1416 / 4
    Next i
        Steel_Calc = Tem
End Function
 
Upvote 0
@Ba Tê: à được rồi, cảm ơn bạn. Thực ra khi mình lập hàm này mình định lập là Sub, sau đó sẽ xuất kết quả ra Cell của excel. Nhưng mà do cách định nghĩa Range có vấn đề nên hàm ko chạy, mới rút code lại để kiểm tra. Sau khi chèn hàm Redim của bạn thì hàm chạy rồi. Cảm ơn bạn rất nhiều :)
@tintam: ô F6 là mình chưa đổi tên thành hàm Steel_Calc nên báo lỗi. Nhưng mà mình biết là mình đã Dim sai Range trong code. Thank bạn nhìu, mình đã giải quyết được vấn đề :)
 
Upvote 0
Mình cũng có viết lại hàm cho bạn, bạn tham khảo cho vui. Hàm này có thể cho phép bạn chọn vùng nhiều dòng, nhiều cột và với điều kiện cấu trúc dữ liệu không thay đổi.
Mã:
Option Explicit
Function Steel_Calc(Steel_Data As Range) As Double
Dim cell As Range
For Each cell In Steel_Data
     Steel_Calc = Steel_Calc + Left(cell, Len(cell) - 2) * Right(cell, 2) ^ 2 * 3.1416 / 4
Next
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom