Tính độ rộng tông các cột hay hàng (2 người xem)

Liên hệ QC

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

quanglenb

Thành viên hoạt động
Tham gia
2/11/19
Bài viết
138
Được thích
25
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 b2.png
b1.pngb2.png
 
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
Cám ơn anh!
Mỗi lần cần thêm cột nào để tính tổng vào code để thêm đúng không anh?
 
Cám ơn anh!
Mỗi lần cần thêm cột nào để tính tổng vào code để thêm đúng không anh?
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ách khác thì xem ở sheet2 của File.
 

File đính kèm

Anh ơi! Cho em hỏi thêm ạ:
Anh giúp em đổi đơn vị ra luôn cm được không ạ?
Đơn vị tính anh giúp em ở trên là đơn vị gì vậy anh?
Đơn vị là Points
72 Points = 2.54 Cm
1 Points = 1/72*2.54 Cm

Cách lấy độ rộng Cột chọn:
PHP:
Selection(1,Selection.Columns.Count).Left + Selection(1,Selection.Columns.Count).Width  - Selection(1,1).Left
Cách lấy chiều cao Hàng chọn:
PHP:
Selection(Selection.Rows.Count, 1).Top + Selection(Selection.Rows.Count,1).Height - Selection(1,1).Top

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
 
Lần chỉnh sửa cuối:
Đơn vị là Points
72 Points = 2.54 Cm
1 Points = 1/72*2.54 Cm

Cách lấy độ rộng Cột chọn:
PHP:
Selection(1,Selection.Columns.Count).Left + Selection(1,Selection.Columns.Count).Width  - Selection(1,1).Left
Cách lấy chiều cao Hàng chọn:
PHP:
Selection(Selection.Rows.Count, 1).Top + Selection(Selection.Rows.Count,1).Height - Selection(1,1).Top

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
Mã:
Selection(Selection.Rows.Count, 1).Top + Selection(Selection.Rows.Count,1).Height - Selection(1,1).Top

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 đã 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:
Mã:
Selection(1,Selection.Columns.Count).Left + Selection(1,Selection.Columns.Count).Width  - Selection(1,1).Left

Mã:
Selection(Selection.Rows.Count, 1).Top + Selection(Selection.Rows.Count,1).Height - Selection(1,1).Top
Anh giúp em mới nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
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)
 
Lần chỉnh sửa cuối:
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)
Vâng, em cám ơn anh!
Hàm =SelectionWidth() bị lỗi anh ạ! 3 hàm còn lại thì không vấn đề gi ạ!44444.png
 

File đính kèm

Trong code dư EntireColumn , bạn xóa đi
 
Bạn copy lại
 
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.
eeeeee.png
 
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.
Độ rộng này được chuẩn hóa dựa theo tỉ lệ Font chữ
Và đơn vị điều chỉnh độ rộng này là Pica

Đơn vị độ rộng sẽ là: 1 Pica = 12 Points
Tỉ lệ chiều cao tương ứng là: 1*4/3 Points

Tất cả nên được quy về Points khi thực hiện tính toán trong VBA. Khi trả ngược giá trị thì ta nhân theo tỉ lệ tương ứng.
 
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
Theo tôi hiểu thì đơn vị tính là tùy thuộc vào cách thiết lập trong cửa sổ Options (xem hình).

A_Rong.GIF
 
Theo tôi hiểu thì đơn vị tính là tùy thuộc vào cách thiết lập trong cửa sổ Options (xem hình).

View attachment 228281
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.
 
Không phải anh ạ! 8,1 inch sao be vậy ạ?
Bài đã được tự động gộp:

Theo tôi hiểu thì đơn vị tính là tùy thuộc vào cách thiết lập trong cửa sổ Options (xem hình).

View attachment 228281
Em đã để mặc định là cm anh ạ! nhưng 8,1 cm nhỏ quá vậy sao anh?
Bài đã được tự động gộp:

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).
Vậy đơn vị độ rộng cột 8,1 là đơn vị gì vậy anh HeSanbi
 
Đơn vị là Points
72 Points = 2.54 Cm
1 Points = 1/72*2.54 Cm

Cách lấy độ rộng Cột chọn:
PHP:
Selection(1,Selection.Columns.Count).Left + Selection(1,Selection.Columns.Count).Width  - Selection(1,1).Left
Cách lấy chiều cao Hàng chọn:
PHP:
Selection(Selection.Rows.Count, 1).Top + Selection(Selection.Rows.Count,1).Height - Selection(1,1).Top

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
Anh ơi, code bị lỗi khi sử dụng 02 hàm :
=SelectionWidth(D1)
=SelectionWidth(D1)
thì báo lỗi #Value!
Anh xem cho em mới ạ!
 

File đính kèm

Độ rộng này được chuẩn hóa dựa theo tỉ lệ Font chữ
Và đơn vị điều chỉnh độ rộng này là Pica

Đơn vị độ rộng sẽ là: 1 Pica = 12 Points
Tỉ lệ chiều cao tương ứng là: 1*4/3 Points

Tất cả nên được quy về Points khi thực hiện tính toán trong VBA. Khi trả ngược giá trị thì ta nhân theo tỉ lệ tương ứng.
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!
66666.png
Bài đã được tự động gộp:

Cách khác thì xem ở sheet2 của File.
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!
 
Lần chỉnh sửa cuối:
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
 

File đính kèm

Lần chỉnh sửa cuối:
Anh ơi, code bị lỗi khi sử dụng 02 hàm :
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?
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?
 
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!
 
Lần chỉnh sửa cuối:
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?
Xin cảm ơn anh!
 
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!
Ai đã nói "bề rộng cột mặc định là Picas" vậy bạn?

Pica là đơn vị dùng để căn chỉnh độ rộng cột bạn nhé.

Chuột phải vào Cột -> Chọn Column Width... Sẽ rõ.

Ở trên người ta hỏi "8,11 là gì vậy?" Thì tôi đã trả lời rằng:

Trích dẫn #18 : "Và đơn vị điều chỉnh độ rộng này là Pica"

Đơn vị độ rộng để tính toán của cột trong VBA chắc chắn 100% là Points
 
Lần chỉnh sửa cuối:
Độ rộng này được chuẩn hóa dựa theo tỉ lệ Font chữ
Và đơn vị điều chỉnh độ rộng này là Pica

Đơn vị độ rộng sẽ là: 1 Pica = 12 Points
Tỉ lệ chiều cao tương ứng là: 1*4/3 Points

Tất cả nên được quy về Points khi thực hiện tính toán trong VBA. Khi trả ngược giá trị thì ta nhân theo tỉ lệ tương ứng.
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
 
Ai đã nói "bề rộng cột mặc định là Picas" vậy bạn?

Pica là đơn vị dùng để căn chỉnh độ rộng cột bạn nhé.

Chuột phải vào Cột -> Chọn Column Width... Sẽ rõ.

Ở trên người ta hỏi "8,11 là gì vậy?" Thì tôi đã trả lời rằng:

Trích dẫn #18 : "Và đơn vị điều chỉnh độ rộng này là Pica"

Đơn vị độ rộng để tính toán của cột trong VBA chắc chắn 100% là Points
Đơ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!
 
Ai đã nói "bề rộng cột mặc định là Picas" vậy bạn?

Pica là đơn vị dùng để căn chỉnh độ rộng cột bạn nhé.

Chuột phải vào Cột -> Chọn Column Width... Sẽ rõ.

Ở trên người ta hỏi "8,11 là gì vậy?" Thì tôi đã trả lời rằng:

Trích dẫn #18 : "Và đơn vị điều chỉnh độ rộng này là Pica"

Đơn vị độ rộng để tính toán của cột trong VBA chắc chắn 100% là Points
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 ạ!
bt.png
 
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!
Chẳng nhẽ tôi phải viết cả một bài viết để giải thích cho các bạn đây.

Cột mà khi bạn thực hiện Giãn cột: có hai thông số

Ví dụ: Cột A có thông số độ rộng là 6,33 và 64

Thì:
1. Thông số 6,33 đơn vị là Pica
2. Thông số 64 là đơn vị Pixels

Đơn vị tính trong VBA:
Range("A1").Width = 48 đơn vị là Points
hoặc Columns("A").Width = 48

Đối với Hàng:
1. Thông số 16.50 đơn vị là Points
2. Thông số 22.0 là đơn vị Pixels


Rows(1).Height = 16.50 đơn vị vẫn là Points


Để đổi đơn vị Points -> Pixels hoặc ngược lại các bạn cần sử dụng WinAPI để lấy thông số cơ sở của Window


Các bạn còn thắc mắc gì nữa không tôi giải thích luôn thể.
Bài đã được tự động gộp:

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 ạ!
Tôi đã có hướng dẫn ở #8 rồi
 
Lần chỉnh sửa cuối:
Chẳng nhẽ tôi phải viết cả một bài viết để giải thích cho các bạn đây.

Cột mà khi bạn thực hiện Giãn cột: có hai thông số

Ví dụ: Cột A có thông số độ rộng là 6,33 và 64

Thì:
1. Thông số 6,33 đơn vị là Pica
2. Thông số 64 là đơn vị Pixels

Đơn vị tính trong VBA:
Range("A1").Width = 48 đơn vị là Points
hoặc Columns("A").Width = 48



Để đổi đơn vị Points -> Pixels hoặc ngược lại các bạn cần sử dụng WinAPI để lấy thông số cơ sở của Window


Các bạn còn thắc mắc gì nữa không tôi giải thích luôn thể.
Bài đã được tự động gộp:


Tôi đã có hướng dẫn ở #8 rồi

Columns("J").ColumnWidth = RangeWidth([B1: H1])
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?
Bạn sang bài viết này đọc từ #34

Cách lấy:
JavaScript:
#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
 
Lần chỉnh sửa cuối:
Chẳng nhẽ tôi phải viết cả một bài viết để giải thích cho các bạn đây.

Cột mà khi bạn thực hiện Giãn cột: có hai thông số

Ví dụ: Cột A có thông số độ rộng là 6,33 và 64

Thì:
1. Thông số 6,33 đơn vị là Pica
2. Thông số 64 là đơn vị Pixels

Đơn vị tính trong VBA:
Range("A1").Width = 48 đơn vị là Points
hoặc Columns("A").Width = 48

Đối với Hàng:
1. Thông số 16.50 đơn vị là Points
2. Thông số 22.0 là đơn vị Pixels


Rows(1).Height = 16.50 đơn vị vẫn là Points


Để đổi đơn vị Points -> Pixels hoặc ngược lại các bạn cần sử dụng WinAPI để lấy thông số cơ sở của Window


Các bạn còn thắc mắc gì nữa không tôi giải thích luôn thể.
Bài đã được tự động gộp:


Tôi đã có hướng dẫn ở #8 rồi
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!
 
Lần chỉnh sửa cuối:
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!
Bạn thử thực hiện thế này xem sao:
---------
PHP:
Public Sub Test()
  Dim Tmp!, TiLe!, Characters!, 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
  '---------------------------------'
  Characters = 10
  Points = (Characters - 1) * TiLe + 9
  Characters = (Points - 9) / TiLe + 1
  Debug.Print TiLe, Points, Characters
  Points = [A1:C1].EntireColumn.Width
  [D1].EntireColumn.ColumnWidth = (Points - 9) / TiLe + 1
End Sub
 
Bạn thử thực hiện thế này xem sao:
---------
PHP:
Public Sub Test()
  Dim Tmp!, TiLe!, Characters!, 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
  '---------------------------------'
  Characters = 10
  Points = (Characters - 1) * TiLe + 9
  Characters = (Points - 9) / TiLe + 1
  Debug.Print TiLe, Points, Characters
  Points = [A1:C1].EntireColumn.Width
  [D1].EntireColumn.ColumnWidth = (Points - 9) / TiLe + 1
End Sub
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!
 
Lần chỉnh sửa cuối:
Bạn thử thực hiện thế này xem sao:
---------
PHP:
Public Sub Test()
  Dim Tmp!, TiLe!, Characters!, 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
  '---------------------------------'
  Characters = 10
  Points = (Characters - 1) * TiLe + 9
  Characters = (Points - 9) / TiLe + 1
  Debug.Print TiLe, Points, Characters
  Points = [A1:C1].EntireColumn.Width
  [D1].EntireColumn.ColumnWidth = (Points - 9) / TiLe + 1
End Sub
Anh cho em hỏi: dùng Code thế nào 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!
Anh cho em hỏi: dùng Code thế nào 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.

Xóa toàn bộ đoạn:
'---------------------------------'
Application.ScreenUpdating = False
Tmp = Columns(1).ColumnWidth
Columns(1).ColumnWidth = 10
TiLe = Columns(1).Width / 9 - 1
Columns(1).ColumnWidth = Tmp
Application.ScreenUpdating = True
'---------------------------------'
Sửa thành:
TiLe = 5.25

Và sửa Private thành Public, và vận dụng trực tiếp vào cell Excel

Để biết và lấy tỉ lệ phông chữ:
PHP:
Private Sub KiemTraTiLePhongChu()
  Dim Tmp!, TiLe!, Characters!
  '---------------------------------'
  Application.ScreenUpdating = False
  Tmp = Columns(1).ColumnWidth
  Columns(1).ColumnWidth = 10
  Debug.Print Columns(1).Width / 9 - 1
  MsgBox Columns(1).Width / 9 - 1
  Columns(1).ColumnWidth = Tmp
  Application.ScreenUpdating = True

End Function
 
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.

Xóa toàn bộ đoạn:
'---------------------------------'
Application.ScreenUpdating = False
Tmp = Columns(1).ColumnWidth
Columns(1).ColumnWidth = 10
TiLe = Columns(1).Width / 9 - 1
Columns(1).ColumnWidth = Tmp
Application.ScreenUpdating = True
'---------------------------------'
Sửa thành:
TiLe = 5.25

Và sửa Private thành Public, và vận dụng trực tiếp vào cell Excel

Để biết và lấy tỉ lệ phông chữ:
PHP:
Private Sub KiemTraTiLePhongChu()
  Dim Tmp!, TiLe!, Characters!
  '---------------------------------'
  Application.ScreenUpdating = False
  Tmp = Columns(1).ColumnWidth
  Columns(1).ColumnWidth = 10
  Debug.Print Columns(1).Width / 9 - 1
  MsgBox Columns(1).Width / 9 - 1
  Columns(1).ColumnWidth = Tmp
  Application.ScreenUpdating = True

End Function
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ũng đang cần Phong.Times new Roman và size 13.
Nhờ anh ra tay!
 
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 chạy code anh giúp để lấy độ rộng cột bằng độ rộng tổng các cột thấy báo lỗi anh ạ!
Anh xem giúp em:
Mã:
Sub Chay
Columns("J").ColumnWidth = RangeWidth([B1: H1])
End
111.png
Bài đã được tự động gộp:

Đơn vị là Points
72 Points = 2.54 Cm
1 Points = 1/72*2.54 Cm

Cách lấy độ rộng Cột chọn:
PHP:
Selection(1,Selection.Columns.Count).Left + Selection(1,Selection.Columns.Count).Width  - Selection(1,1).Left
Cách lấy chiều cao Hàng chọn:
PHP:
Selection(Selection.Rows.Count, 1).Top + Selection(Selection.Rows.Count,1).Height - Selection(1,1).Top

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!ok2.png
 

File đính kèm

Lần chỉnh sửa cuối:
Chẳng nhẽ tôi phải viết cả một bài viết để giải thích cho các bạn đây.

Cột mà khi bạn thực hiện Giãn cột: có hai thông số

Ví dụ: Cột A có thông số độ rộng là 6,33 và 64

Thì:
1. Thông số 6,33 đơn vị là Pica
2. Thông số 64 là đơn vị Pixels

Đơn vị tính trong VBA:
Range("A1").Width = 48 đơn vị là Points
hoặc Columns("A").Width = 48

Đối với Hàng:
1. Thông số 16.50 đơn vị là Points
2. Thông số 22.0 là đơn vị Pixels


Rows(1).Height = 16.50 đơn vị vẫn là Points


Để đổi đơn vị Points -> Pixels hoặc ngược lại các bạn cần sử dụng WinAPI để lấy thông số cơ sở của Window


Các bạn còn thắc mắc gì nữa không tôi giải thích luôn thể.
Bài đã được tự động gộp:


Tôi đã có hướng dẫn ở #8 rồi
Mình đã làm như #8 không có được, hay mình làm lỗi ở đoạn nào, nhờ bạn HeSanbi cụ 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
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom