Chào các anh/chị trên diễn đàn, các anh/chị cho em hỏi
Có cách nào để tính được tổng độ rộng của các cột hay hàng giúp em mới ạ!
Trong hình em muốn tính tổng độ rông hàng tương ứng với dòng 1,2,3
Tính tổng độ rông cột A, B, C, D, E, F, G
Dĩ diên không phải xem độ rông từng cột hay dòng rồi cộng lại thủ công
Em xin cảm ơn!
Tổng độ rông cột
Chào các anh/chị trên diễn đàn, các anh/chị cho em hỏi
Có cách nào để tính được tổng độ rộng của các cột hay hàng giúp em mới ạ!
Trong hình em muốn tính tổng độ rông hàng tương ứng với dòng 1,2,3
Tính tổng độ rông cột A, B, C, D, E, F, G
Dĩ diên không phải xem độ rông từng cột hay dòng rồi cộng lại thủ công
Em xin cảm ơn!
Tổng độ rông cột View attachment 228093 View attachment 228092View attachment 228093
Biết 1 cách tương tự, chi tiết tham khảo bên dưới:
Sub a()
Dim dA#, dB#, dC#
dA = Range("A1").EntireColumn.Width
dB = Range("B1").EntireColumn.Width
dC = Range("C1").EntireColumn.Width
MsgBox "Do rong cot A ; B; C lan luot la : " & dA & " ;" & dB & " ;" & dC & Chr(10) _
& "Tong chieu rong cot A+B+C la :" & dA + dB + dC
End Sub
Biết 1 cách tương tự, chi tiết tham khảo bên dưới:
Sub a()
Dim dA#, dB#, dC#
dA = Range("A1").EntireColumn.Width
dB = Range("B1").EntireColumn.Width
dC = Range("C1").EntireColumn.Width
MsgBox "Do rong cot A ; B; C lan luot la : " & dA & " ;" & dB & " ;" & dC & Chr(10) _
& "Tong chieu rong cot A+B+C la :" & dA + dB + dC
End Sub
Thành viên càng mô tả chính xác yêu cầu , mục đích và kết quả mong muốn thì hiệu quả tương tác giữ bạn và các thành viên khác càng cao; đat yêu cầu thời gian - kỹ thuật
Có cách nào khác không ạ?
Ý em là mỗi lần tính tổng độ rộng các cột hay hàng thì phải vào code để chỉnh sửa, giả sử cần tính tổng chiều cao nhiều cột hay hàng thì phải liệt kê những hàg và cột đó và điền tên vào code.
Có cách nào khác không ạ?
Ý em là mỗi lần tính tổng độ rộng các cột hay hàng thì phải vào code để chỉnh sửa, giả sử cần tính tổng chiều cao nhiều cột hay hàng thì phải liệt kê những hàg và cột đó và điền tên vào code.
Cách lấy độ rộng và chiều cao đã xác định:
Set RNG = [B4:C25]
Thay thế toàn bộ Selection thành RNG
Hàm (Tạo một Module và copy code dưới vào):
PHP:
Public RSelection As Range
Function SelectionWidth() As Long
Application.Volatile
Dim Rng As Range
If Not RSelection Is Nothing Then
Set Rng = RSelection
SelectionWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End If
End Function
Function SelectionHeight() As Long
Application.Volatile
Dim Rng As Range
If Not RSelection Is Nothing Then
Set Rng = RSelection
SelectionHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End If
End Function
Function RangeWidth(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RSelection
If Rng Is Nothing Then Exit Function
RangeWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End Function
Function RangeHeight(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RSelection
If Rng Is Nothing Then Exit Function
RangeHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End Function
Copy đoạn này vào Code Worksheet đang thực hiện:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set RSelection = Target
Application.Calculate
End Sub
Cách lấy độ rộng và chiều cao đã xác định:
Set RNG = [B4:C25]
Thay thế toàn bộ Selection thành RNG
Hàm (Tạo một Module và copy code dưới vào):
PHP:
Public RSelection As Range
Function SelectionWidth(Optional ByVal Rng As Range) As Long
Application.Volatile
If Not RSelection Is Nothing Then
Set Rng = RSelection.EntireColumn
Debug.Print Rng.Address
SelectionWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End If
End Function
Function SelectionHeight(Optional ByVal Rng As Range) As Long
Application.Volatile
If Not RSelection Is Nothing Then
Set Rng = RSelection
SelectionHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End If
End Function
Function RangeWidth(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RSelection
If Rng Is Nothing Then Exit Function
RangeWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End Function
Function RangeHeight(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RSelection
If Rng Is Nothing Then Exit Function
RangeHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End Function
Em đã copy code vào sheet hiện hành và module.
Sao vẫn không được vậy ạ?
Cách lấy độ Rộng cột chọn và cách lấy chiều cao Hàng chọn có 02 mã code sử dụng sao vậy ạ?
02 mã đó như sau:
Sau khi copy xong thì bạn dùng công thức tự tạo ở trên vào Sheet chứa code và vào Ô nào bạn muốn:
4 hàm tương tự cách dùng như nhau:
=SelectionWidth()
=SelectionHeight()
=RangeWidth(D2:G200)
=RangeHeight(D2:Z200)
Sau khi copy xong thì bạn dùng công thức tự tạo ở trên vào Sheet chứa code và vào Ô nào bạn muốn:
4 hàm tương tự cách dùng như nhau:
=SelectionWidth(A1)
=SelectionHeight(A1)
=RangeWidth(D2:G200)
=RangeHeight(D2:Z200)
Anh ơi cho em hỏi đơn vị mặc định độ rông cột (khi xác định độ rộng cột) trong excel là đơn vị gì vây anh?
Như hình em đăng dưới đây độ rộng cột là 8,11, thì đơn vị của nó là gì vậy anh?
Em nghĩ không phải pt, không phải px.
Anh ơi cho em hỏi đơn vị mặc định độ rông cột (khi xác định độ rộng cột) trong excel là đơn vị gì vây anh?
Như hình em đăng dưới đây độ rộng cột là 8,11, thì đơn vị của nó là gì vậy anh?
Em nghĩ không phải pt, không phải px. View attachment 228274
Anh ơi cho em hỏi đơn vị mặc định độ rông cột (khi xác định độ rộng cột) trong excel là đơn vị gì vây anh?
Như hình em đăng dưới đây độ rộng cột là 8,11, thì đơn vị của nó là gì vậy anh?
Em nghĩ không phải pt, không phải px.
Anh ơi cho em hỏi đơn vị mặc định độ rông cột (khi xác định độ rộng cột) trong excel là đơn vị gì vây anh?
Như hình em đăng dưới đây độ rộng cột là 8,11, thì đơn vị của nó là gì vậy anh?
Em nghĩ không phải pt, không phải px. View attachment 228274
Thầy be09 sẽ khiến khác bạn nhầm lẩn giữa đơn vị đo lường tiêu chuẩn và tỉ lệ điều chỉnh kích thước trang tính mặc định (không bao giờ đổi).
Cái Thầy chụp kia là đơn vị để tính trong việc căn chỉnh (Lề, khổ giấy, ...), bố trí trang (xem trước trang, bố cục trang, ...), nó hỗ trợ 2 mục là View (Xem) và Page Layout (Bố trí trang).
Thầy be09 sẽ khiến khác bạn nhầm lẩn giữa đơn vị đo lường tiêu chuẩn và tỉ lệ điều chỉnh kích thước trang tính mặc định (không bao giờ đổi).
Cái Thầy chụp kia là đơn vị để tính trong việc căn chỉnh (Lề, khổ giấy, ...), bố trí trang (xem trước trang, bố cục trang, ...), nó hỗ trợ 2 mục là View (Xem) và Page Layout (Bố trí trang).
Tôi tự học máy tính và kiến thức là do tự mò học mà có chứ không đến trường học vi tính ngày nào và cũng không có đến bằng A, vì vậy cách hiểu của tôi có thể sai lệch.
Chắc phải tìm hiểu thêm vụ này.
Thầy be09 sẽ khiến khác bạn nhầm lẩn giữa đơn vị đo lường tiêu chuẩn và tỉ lệ điều chỉnh kích thước trang tính mặc định (không bao giờ đổi).
Cái Thầy chụp kia là đơn vị để tính trong việc căn chỉnh (Lề, khổ giấy, ...), bố trí trang (xem trước trang, bố cục trang, ...), nó hỗ trợ 2 mục là View (Xem) và Page Layout (Bố trí trang).
Cách lấy độ rộng và chiều cao đã xác định:
Set RNG = [B4:C25]
Thay thế toàn bộ Selection thành RNG
Hàm (Tạo một Module và copy code dưới vào):
PHP:
Public RSelection As Range
Function SelectionWidth() As Long
Application.Volatile
Dim Rng As Range
If Not RSelection Is Nothing Then
Set Rng = RSelection
SelectionWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End If
End Function
Function SelectionHeight() As Long
Application.Volatile
Dim Rng As Range
If Not RSelection Is Nothing Then
Set Rng = RSelection
SelectionHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End If
End Function
Function RangeWidth(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RSelection
If Rng Is Nothing Then Exit Function
RangeWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End Function
Function RangeHeight(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RSelection
If Rng Is Nothing Then Exit Function
RangeHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End Function
Copy đoạn này vào Code Worksheet đang thực hiện:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set RSelection = Target
Application.Calculate
End Sub
Nhờ bác giải thích giúp em mới!
em dùng hàm =RangeWidth() thi đo được kết quả "48"
trong khi đó độ rộng 6,33 và 64 điểm ảnh là em click vào có kết quả vậy.
Vậy để quy đổi từ 48 ra 6,33 và 64 thì cách đổi thế nào đò vậy bác?
Và khi đo tổng độ rộng của vùng nào đó em thay đổi độ rộng của vùng đó thì không thấy kết quả =RangeWidth() thay đổi theo.
cảm ơn bác!
Thầy be09 có thể giúp em hàm mà tính được tổng độ rộng hoặc cao của vùng.
Không phải tính tổng thông qua hàm Sum() nữa!
Em xem thấy hàm tính độ rộng, cao của ô đơn thì rất hợp lý rồi ạ!
Cảm ơn thầy!
Thầy be09 có thể giúp em hàm mà tính được tổng độ rộng hoặc cao của vùng.
Không phải tính tổng thông qua hàm Sum() nữa!
Em xem thấy hàm tính độ rộng, cao của ô đơn thì rất hợp lý rồi ạ!
Cảm ơn thầy!
[/QUOTE]
Thầy chắc đang bận rồi, mình đang rảnh viết đại bạn thử nhé.
Mã:
Sub TinhChieuCao()
Dim i, Lr, ChCao, Total As Integer
Lr = Sheet2.Range("B" & Rows.Count).End(xlUp).Row
With Sheet2
For i = 2 To Lr
ChCao = .Range("B" & i).EntireRow.Height
Total = Total + ChCao
Next i
End With
MsgBox "Tong chieu cao la: " & Total
End Sub
Bạn copy bị thiếu một phần Code để vào Worksheet chứa cell có các hàm đó
Và vận dụng hàm bị sai.
Đúng sẽ là:
=SelectionWidth()
=SelectionHeight()
----------------------------------
=RangeWidth(A1) hoặc =RangeWidth(A1:C5)
=RangeHeight(A1) hoặc =RangeHeight(A1:C5)
Nhờ bác giải thích giúp em mới!
em dùng hàm =RangeWidth() thi đo được kết quả "48"
trong khi đó độ rộng 6,33 và 64 điểm ảnh là em click vào có kết quả vậy.
Vậy để quy đổi từ 48 ra 6,33 và 64 thì cách đổi thế nào đò vậy bác?
Anh ơi cho em hỏi đơn vị mặc định độ rông cột (khi xác định độ rộng cột) trong excel là đơn vị gì vây anh?
Như hình em đăng dưới đây độ rộng cột là 8,11, thì đơn vị của nó là gì vậy anh?
Em nghĩ không phải pt, không phải px. View attachment 228274
Bạn nhớ rằng đơn vị đo bề ngang (độ rộng cột) và bề cao (chiều cao) trong excel hoàn toàn khác nhau
Bạn có thể đo thực tế luôn nhé!
Và nữa là Đơn vị đo bề rông cột được định nghĩa như sau : 10,33 x (đơn vị bề rộng cột) = 2,54 cm bạn nhé!
Do đó bề rộng cột mặc định không phải là Picas (pc) bạn nhé! có nhiều người nhầm. bạn lưu ý!
Tiếp theo nói đến chiều cao: thì đơn vị chiều cao mặc định excel là pt (Point).
Nên kết luận là:
Đơn vị mặc định đo bề rộng cột trong excel là: Đơn vị đo chiều rộng cột, nó được tính là: 1 đơn vị đo bề rộng cột = 2,54cm/10.33
Đơn vị mặc định đo chiều cao dòng là Pt.
Còn cách đổi từ pt, cm, pc, px, inc...Bạn tham khảo trên mạng nhé!
Thân!
Bạn copy bị thiếu một phần Code để vào Worksheet chứa cell có các hàm đó
Và vận dụng hàm bị sai.
Đúng sẽ là:
=SelectionWidth()
=SelectionHeight()
----------------------------------
=RangeWidth(A1) hoặc =RangeWidth(A1:C5)
=RangeHeight(A1) hoặc =RangeHeight(A1:C5)
-----------------------------------------------
Bạn đọc lại các bài tôi đã đăng, có nói đến các đơn vị tính trong một Cell
Chỉ cần vận dụng lại và tính toán thôi.
Tính toán mà bạn chưa tính được thì sao có thể sử dụng các hàm Excel đây?
Bạn nhớ rằng đơn vị đo bề ngang (độ rộng cột) và bề cao (chiều cao) trong excel hoàn toàn khác nhau
Bạn có thể đo thực tế luôn nhé!
Và nữa là Đơn vị đo bề rông cột được định nghĩa như sau : 13 x (đơn vị bề rộng cột) = 2,54 cm bạn nhé!
Do đó bề rộng cột mặc định không phải là Picas (pc) bạn nhé! có nhiều người nhầm. bạn lưu ý!
Tiếp theo nói đến chiều cao: thì đơn vị chiều cao mặc định excel là pt (Point).
Nên kết luận là:
Đơn vị mặc định đo bề rộng cột trong excel là: Đơn vị đo chiều rộng cột, nó được tính là: 1 đơn vị đo bề rộng cột = 2,54cm/13
Đơn vị mặc định đo chiều cao dòng là Pt.
Còn cách đổi từ pt, cm, pc, px, inc...Bạn tham khảo trên mạng nhé!
Thân!
Vâng, vậy như hình em đo bề rộng cột là 11,67 như hình sau, thì đơn vị của 11,67 là gì anh?
Cái hàm mặc định anh viết giúp thì nó đơn vị là pt rồi, em sử dụng để đo cột mà có kết quả là 11,67 thì đo bằng hàm =RangeWidth(D2) anh giúp
sẽ có kết quả là 84 thì em hiểu là 84pt.
Nhưng cái 11,67 trên em không hiểu đơn vị là gì, nó không phải picas, không phải px
Đơn vị độ rộng để tính toán của cột trong VBA chắc chắn 100% là Points mình đồng ý!
Nhưng Pica là đơn vị để căn chỉnh độ rộng cột vấn đề này hình như chưa đúng, bạn thử thực tế xem.
Chiều cao cột thì là pt để căn chỉnh chiều cao rồi!
hic, em nhờ anh giúp em: bài toán
làm sao để chiều rộng cột J1 = tổng chiều rộng từ cột B1: H1
Em không biết lấy cách nào để nó tuyệt đối bằng nhau được.
Anh giúp em mới ạ!
Vâng, vậy như hình em đo bề rộng cột là 11,67 như hình sau, thì đơn vị của 11,67 là gì anh?
Cái hàm mặc định anh viết giúp thì nó đơn vị là pt rồi, em sử dụng để đo cột mà có kết quả là 11,67 thì đo bằng hàm =RangeWidth(D2) anh giúp
sẽ có kết quả là 84 thì em hiểu là 84pt.
Nhưng cái 11,67 trên em không hiểu đơn vị là gì, nó không phải picas, không phải px
Đơn vị độ rộng để tính toán của cột trong VBA chắc chắn 100% là Points mình đồng ý!
Nhưng Pica là đơn vị để căn chỉnh độ rộng cột vấn đề này hình như chưa đúng, bạn thử thực tế xem.
Chiều cao cột thì là pt để căn chỉnh chiều cao rồi!
hic, em nhờ anh giúp em: bài toán
làm sao để chiều rộng cột J1 = tổng chiều rộng từ cột B1: H1
Em không biết lấy cách nào để nó tuyệt đối bằng nhau được.
Anh giúp em mới ạ!
Em cứ tính bằng máy tính nên nó cứ lệch anh ạ! Không ra được một số gọi là hệ số tỷ lệ!
"sử dụng WinAPI để lấy thông số cơ sở của Window" là thế nào vậy anh?
Em cứ tính bằng máy tính nên nó cứ lệch anh ạ! Không ra được một số gọi là hệ số tỷ lệ!
"sử dụng WinAPI để lấy thông số cơ sở của Window" là thế nào vậy anh?
#If VBA7 Then
Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDC As LongPtr, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As LongPtr, ByVal hDC As LongPtr) As Long
#Else
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
#End If
Public PixelsPerX!, PixelsPerY!, PointsPerX!, PointsPerY!
Sub GetPerPointsAndPerPixels()
If PixelsPerX <> 0 Then Exit Sub
Const POINTSPERINCH = 72, LOGPIXELSX = 88, LOGPIXELSY = 90
#If VBA7 Then
Dim hDC^, SngX!, SngY!
#Else
Dim hDC&, SngX!, SngY!
#End If
hDC = GetDC(0)
SngX = GetDeviceCaps(hDC, LOGPIXELSX): SngY = GetDeviceCaps(hDC, LOGPIXELSY)
PixelsPerX = SngX / POINTSPERINCH: PixelsPerY = SngY / POINTSPERINCH 'Pixels = POINTS * PixelsPer
PointsPerX = POINTSPERINCH / SngX: PointsPerY = POINTSPERINCH / SngY 'Points = PIXELS * PointsPer
ReleaseDC 0, hDC
End Sub
'Sửa lại hàm sau:
'Với đối số IsPoints = True thì hàm trả về giá trị với đơn vị Points
'Với đối số IsPoints = False thì hàm trả về giá trị với đơn vị Pica
'Phương thức [A1].EntireColumn.ColumnWidth nhận giá trị phải là Pica
'1 Pica = 12 Point - Phụ thuộc thông số window mà giá trị này thay đổi
'Ví dụ:
'Trong giãn Cột: 1 Pica = 16 Pixel
'nhưng: 10 Pica = 97 Pixel, 100 Pica = 907 Pixel
Function RangeWidth!(ByVal Rng As Range, Optional ByVal IsPoints As Boolean = True)
If IsPoints Then
RangeWidth = Rng.EntireColumn.Width
Else
Dim I&
For I = 1 To Rng.Columns.Count
RangeWidth = RangeWidth + Rng(1, I).EntireColumn.ColumnWidth
Next I
End If
End Function
Cột A em đo được bề rộng là 48 points em muốn chuyển đổi về đơn vị.
1 Pica = 12 Points vậy Bề rộng tương ứng với 48pt tính theo pica sẽ là 48/12=4 pica
Nhưng đo độ rông cột bằng cách click chuột phải chọn Column Width sẽ là 6,33.
Nguyên nhân do đâu vậy anh?
Cám ơn anh!
Cột A em đo được bề rộng là 48 points em muốn chuyển đổi về đơn vị.
1 Pica = 12 Points vậy Bề rộng tương ứng với 48pt tính theo pica sẽ là 48/12=4 pica
Nhưng đo độ rông cột bằng cách click chuột phải chọn Column Width sẽ là 6,33.
Nguyên nhân do đâu vậy anh?
Cám ơn anh!
Cám ơn anh, anh cho em hỏi:
Cách sử dụng sao ạ?
Vùng [A1:C1] mình đo được đơn vị là pt
Thì chạy code ở ô D1 là picas đúng không ạ?
Nhưng em chạy code thấy không hiện dữ liệu ạ!
Cảm ơn anh!
Cám ơn anh, anh cho em hỏi:
Cách sử dụng sao ạ?
Vùng [A1:C1] mình đo được đơn vị là pt
Thì chạy code ở ô D1 là picas đúng không ạ?
Nhưng em chạy code thấy không hiện dữ liệu ạ!
Cảm ơn anh!
Không biết các bạn định vận dụng vấn đề gì.
Code này chỉ là code tạm, chứ ngâm cứu kỉ rất mất thời gian, và công sức.
PHP:
Public Sub TestArea()
' Height Point'
[A1] = RangeHeight([A1:D10], True)
' Height Character'
[A2] = RangeHeight([A1:D10], False)
' Width Point'
[A3] = RangeWidth([A1:D10], True)
' Width Character'
[A4] = RangeWidth([A1:D10], False)
'[A5:A15].EntireRow.RowHeight = 100 / [A5:A15].Rows.Count'
'[E1:F1].EntireColumn.ColumnWidth = 100 / [E1:F1].Columns.Count'
'Không thể áp dụng trực tiếp hàm vào Cell excel'
End Sub
Private Function RangeHeight!(ByVal Rng As Range, Optional ByVal IsPoints As Boolean = True)
RangeHeight = Rng.EntireColumn.Width
If Not IsPoints Then
RangeHeight = PointToCharacter(RangeHeight)
End If
End Function
Public Function RangeWidth!(ByVal Rng As Range, Optional ByVal IsPoints As Boolean = True)
If IsPoints Then
RangeWidth = Rng.EntireColumn.Width
Else
Dim I&
For I = 1 To Rng.Columns.Count
RangeWidth = RangeWidth + Rng(1, I).EntireColumn.ColumnWidth
Next I
End If
End Function
Private Function CharacterToPoint(ByVal Characters!)
If VBA.Abs(Characters) - 1 <= 0 Then Exit Function
Dim Tmp!, TiLe!, Points!
'---------------------------------'
Application.ScreenUpdating = False
Tmp = Columns(1).ColumnWidth
Columns(1).ColumnWidth = 10
TiLe = Columns(1).Width / 9 - 1
Columns(1).ColumnWidth = Tmp
Application.ScreenUpdating = True
'---------------------------------'
CharacterToPoint = (VBA.Abs(Characters) - 1) * TiLe + 9
End Function
Private Function PointToCharacter(ByVal Points!)
If VBA.Abs(Points) - 9 <= 0 Then Exit Function
Dim Tmp!, TiLe!, Characters!
'---------------------------------'
Application.ScreenUpdating = False
Tmp = Columns(1).ColumnWidth
Columns(1).ColumnWidth = 10
TiLe = Columns(1).Width / 9 - 1
Columns(1).ColumnWidth = Tmp
Application.ScreenUpdating = True
'---------------------------------'
PointToCharacter = (VBA.Abs(Points) - 9) / TiLe + 1
End Function
Không biết các bạn định vận dụng vấn đề gì.
Code này chỉ là code tạm, chứ ngâm cứu kỉ rất mất thời gian, và công sức.
PHP:
Public Sub TestArea()
' Height Point'
[A1] = RangeHeight([A1:D10], True)
' Height Character'
[A2] = RangeHeight([A1:D10], False)
' Width Point'
[A3] = RangeWidth([A1:D10], True)
' Width Character'
[A4] = RangeWidth([A1:D10], False)
'[A5:A15].EntireRow.RowHeight = 100 / [A5:A15].Rows.Count'
'[E1:F1].EntireColumn.ColumnWidth = 100 / [E1:F1].Columns.Count'
'Không thể áp dụng trực tiếp hàm vào Cell excel'
End Sub
Private Function RangeHeight!(ByVal Rng As Range, Optional ByVal IsPoints As Boolean = True)
RangeHeight = Rng.EntireColumn.Width
If Not IsPoints Then
RangeHeight = PointToCharacter(RangeHeight)
End If
End Function
Public Function RangeWidth!(ByVal Rng As Range, Optional ByVal IsPoints As Boolean = True)
If IsPoints Then
RangeWidth = Rng.EntireColumn.Width
Else
Dim I&
For I = 1 To Rng.Columns.Count
RangeWidth = RangeWidth + Rng(1, I).EntireColumn.ColumnWidth
Next I
End If
End Function
Private Function CharacterToPoint(ByVal Characters!)
If VBA.Abs(Characters) - 1 <= 0 Then Exit Function
Dim Tmp!, TiLe!, Points!
'---------------------------------'
Application.ScreenUpdating = False
Tmp = Columns(1).ColumnWidth
Columns(1).ColumnWidth = 10
TiLe = Columns(1).Width / 9 - 1
Columns(1).ColumnWidth = Tmp
Application.ScreenUpdating = True
'---------------------------------'
CharacterToPoint = (VBA.Abs(Characters) - 1) * TiLe + 9
End Function
Private Function PointToCharacter(ByVal Points!)
If VBA.Abs(Points) - 9 <= 0 Then Exit Function
Dim Tmp!, TiLe!, Characters!
'---------------------------------'
Application.ScreenUpdating = False
Tmp = Columns(1).ColumnWidth
Columns(1).ColumnWidth = 10
TiLe = Columns(1).Width / 9 - 1
Columns(1).ColumnWidth = Tmp
Application.ScreenUpdating = True
'---------------------------------'
PointToCharacter = (VBA.Abs(Points) - 9) / TiLe + 1
End Function
Em có áp dụng hàm để tính độ rộng cột và độ cao hàng của anh giúp trên!
Sau khi ra độ rộng của hàng của một vùng nào đó C1:C10, độ rộng tính bằng pt được điền kết quả vào ô D1, giờ em muốn đổi dữ liệu ô D1 từ đơn vị pt ra pica và điền kết quả tính ra pica vào ô nào đó do mình chọn.
Anh có nói "Code này chỉ là code tạm" là sao ạ? vận dụng code anh giúp trên thế nào vào trường hợp em nêu trong bài này ạ!
Cảm ơn anh nhiều!
Không biết các bạn định vận dụng vấn đề gì.
Code này chỉ là code tạm, chứ ngâm cứu kỉ rất mất thời gian, và công sức.
PHP:
Public Sub TestArea()
' Height Point'
[A1] = RangeHeight([A1:D10], True)
' Height Character'
[A2] = RangeHeight([A1:D10], False)
' Width Point'
[A3] = RangeWidth([A1:D10], True)
' Width Character'
[A4] = RangeWidth([A1:D10], False)
'[A5:A15].EntireRow.RowHeight = 100 / [A5:A15].Rows.Count'
'[E1:F1].EntireColumn.ColumnWidth = 100 / [E1:F1].Columns.Count'
'Không thể áp dụng trực tiếp hàm vào Cell excel'
End Sub
Private Function RangeHeight!(ByVal Rng As Range, Optional ByVal IsPoints As Boolean = True)
RangeHeight = Rng.EntireColumn.Width
If Not IsPoints Then
RangeHeight = PointToCharacter(RangeHeight)
End If
End Function
Public Function RangeWidth!(ByVal Rng As Range, Optional ByVal IsPoints As Boolean = True)
If IsPoints Then
RangeWidth = Rng.EntireColumn.Width
Else
Dim I&
For I = 1 To Rng.Columns.Count
RangeWidth = RangeWidth + Rng(1, I).EntireColumn.ColumnWidth
Next I
End If
End Function
Private Function CharacterToPoint(ByVal Characters!)
If VBA.Abs(Characters) - 1 <= 0 Then Exit Function
Dim Tmp!, TiLe!, Points!
'---------------------------------'
Application.ScreenUpdating = False
Tmp = Columns(1).ColumnWidth
Columns(1).ColumnWidth = 10
TiLe = Columns(1).Width / 9 - 1
Columns(1).ColumnWidth = Tmp
Application.ScreenUpdating = True
'---------------------------------'
CharacterToPoint = (VBA.Abs(Characters) - 1) * TiLe + 9
End Function
Private Function PointToCharacter(ByVal Points!)
If VBA.Abs(Points) - 9 <= 0 Then Exit Function
Dim Tmp!, TiLe!, Characters!
'---------------------------------'
Application.ScreenUpdating = False
Tmp = Columns(1).ColumnWidth
Columns(1).ColumnWidth = 10
TiLe = Columns(1).Width / 9 - 1
Columns(1).ColumnWidth = Tmp
Application.ScreenUpdating = True
'---------------------------------'
PointToCharacter = (VBA.Abs(Points) - 9) / TiLe + 1
End Function
Mình không nghĩ nó phức tạp vậy!
Cảm ơn bạn, nhờ bạn mà mình đã hiểu rõ hơn!
Nếu có thời gian bạn giúp cách quy đổi ra đơn vị pica từ pt mới nhé!
Mình cũng đang rất cần.
Em có áp dụng hàm để tính độ rộng cột và độ cao hàng của anh giúp trên!
Sau khi ra độ rộng của hàng của một vùng nào đó C1:C10, độ rộng tính bằng pt được điền kết quả vào ô D1, giờ em muốn đổi dữ liệu ô D1 từ đơn vị pt ra pica và điền kết quả tính ra pica vào ô nào đó do mình chọn.
Anh có nói "Code này chỉ là code tạm" là sao ạ? vận dụng code anh giúp trên thế nào vào trường hợp em nêu trong bài này ạ!
Cảm ơn anh nhiều!
Tôi không thể hỗ trợ bạn được thêm nữa vì vấn đề này là vấn đề chuyên sâu.
Bạn cần phải biết VBA.
"Code này chỉ là code tạm"
Vì khi lấy tỉ lệ Phông chữ tôi đã mượn giá trị độ rộng 10 của cột để tính, mà không dùng kĩ thuật hay giải thuật.
Bạn phải lấy tỉ lệ độ rộng này từ trong Font ở System Window bằng các hàm API, nhưng bạn không biết VBA làm sao làm đây.
Vì sao cần làm như vậy, vì nếu Sheet được định dạng ở Dạng phông và kích thước khác nhau thì tỉ lệ sẽ thay đổi theo phông.
-------------------------------------------
Trừ khi Trang tính của bạn Luôn luôn được định dạng ở một Font cố định
Ví dụ: Phông .VNArial và Size là 10 thì tỉ lệ này sẽ bằng 5.25, có rất nhiều phông có tỉ lệ này.
Nếu như vậy Trên hàm tôi viết ở trên bạn chỉ cần thay TiLe = 5.25, và xóa những dòng trong '-------------' đi.
Tôi không thể hỗ trợ bạn được thêm nữa vì vấn đề này là vấn đề chuyên sâu.
Bạn cần phải biết VBA.
"Code này chỉ là code tạm"
Vì khi lấy tỉ lệ Phông chữ tôi đã mượn giá trị độ rộng 10 của cột để tính, mà không dùng kĩ thuật hay giải thuật.
Bạn phải lấy tỉ lệ độ rộng này từ trong Font ở System Window bằng các hàm API, nhưng bạn không biết VBA làm sao làm đây.
Vì sao cần làm như vậy, vì nếu Sheet được định dạng ở Dạng phông và kích thước khác nhau thì tỉ lệ sẽ thay đổi theo phông.
-------------------------------------------
Trừ khi Trang tính của bạn Luôn luôn được định dạng ở một Font cố định
Ví dụ: Phông .VNArial và Size là 10 thì tỉ lệ này sẽ bằng 5.25, có rất nhiều phông có tỉ lệ này.
Nếu như vậy Trên hàm tôi viết ở trên bạn chỉ cần thay TiLe = 5.25, và xóa những dòng trong '-------------' đi.
Dạ! cám ơn anh, phiền anh thêm chút xíu ạ!
Nhờ anh giúp duy nhất một lần nữa:
Anh có thể cho em xin thêm 2 trường hợp là Phông phổ thông để soạn thảo văn bản "Times new Roman" cỡ chữ là 13 và 14 thì đoạn code hoàn thiện để quy đổi đơn vị từ pt ra pica được không ạ?
Dạ! cám ơn anh, phiền anh thêm chút xíu ạ!
Nhờ anh giúp duy nhất một lần nữa:
Anh có thể cho em xin thêm 2 trường hợp là Phông phổ thông để soạn thảo văn bản "Times new Roman" cỡ chữ là 13 và 14 thì đoạn code hoàn thiện để quy đổi đơn vị từ pt ra pica được không ạ?
Em cứ tính bằng máy tính nên nó cứ lệch anh ạ! Không ra được một số gọi là hệ số tỷ lệ!
"sử dụng WinAPI để lấy thông số cơ sở của Window" là thế nào vậy anh?
Cách lấy độ rộng và chiều cao đã xác định:
Set RNG = [B4:C25]
Thay thế toàn bộ Selection thành RNG
Hàm (Tạo một Module và copy code dưới vào):
PHP:
Public RSelection As Range
Function SelectionWidth() As Long
Application.Volatile
Dim Rng As Range
If Not RSelection Is Nothing Then
Set Rng = RSelection
SelectionWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End If
End Function
Function SelectionHeight() As Long
Application.Volatile
Dim Rng As Range
If Not RSelection Is Nothing Then
Set Rng = RSelection
SelectionHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End If
End Function
Function RangeWidth(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RSelection
If Rng Is Nothing Then Exit Function
RangeWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End Function
Function RangeHeight(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RSelection
If Rng Is Nothing Then Exit Function
RangeHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End Function
Copy đoạn này vào Code Worksheet đang thực hiện:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set RSelection = Target
Application.Calculate
End Sub
Em đã Thay thế toàn bộ Selection thành RNG
và được code trong module:
Mã:
Public RRNG As Range
Function RNGWidth() As Long
Application.Volatile
Dim Rng As Range
If Not RRNG Is Nothing Then
Set Rng = RRNG
RNGWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End If
End Function
Function RNGHeight() As Long
Application.Volatile
Dim Rng As Range
If Not RRNG Is Nothing Then
Set Rng = RRNG
RNGHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End If
End Function
Function RangeWidth(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RRNG
If Rng Is Nothing Then Exit Function
RangeWidth = Rng(1, Rng.Columns.Count).Left + Rng(1, Rng.Columns.Count).Width - Rng(1, 1).Left
End Function
Function RangeHeight(Optional ByVal Rng As Range) As Long
Application.Volatile
If Rng Is Nothing Then Set Rng = RRNG
If Rng Is Nothing Then Exit Function
RangeHeight = Rng(Rng.Rows.Count, 1).Top + Rng(Rng.Rows.Count, 1).Height - Rng(1, 1).Top
End Function
Code trong sheet:
Mã:
Private Sub Worksheet_RNGChange(ByVal Target As Range)
Set RRNG = Target
Application.Calculate
End Sub
Set RNG = [B4:C25] để lấy chiều cao là sao vậy anh?
nhờ anh chỉ bảo em thêm chút để em có thể lấy được chiểu cao của một cột theo ý muốn.
Cảm ơn anh!
Mình đã làm như #8 không có được, hay mình làm lỗi ở đoạn nào, nhờ bạn HeSanbicụ thể hơn giúp mình để mình làm được xác định độ rộng cột nào đó bằng tổng độ rộng các cột chọn