Xin Code tìm khoảng cách (Pixels) cho một ô bất kỳ

Liên hệ QC

Minh Ngọc LH

Thành viên chính thức
Tham gia
14/7/18
Bài viết
71
Được thích
32
Giới tính
Nữ
Chào đại gia đình GPE

Cho em hỏi có cách nào xác định chiều cao tính từ lề trên và chiều rộng tính từ lề trái (đơn vị là pixels) cho một ô bất kỳ không ạ?
Ví dụ cho 1 sheet mặc định thì có độ cao dòng là 20 pixels và độ rộng là 64 pixels. Nhưng nếu như có tác động làm thay đổi kích thước dòng/cột thì em chưa tính được số pixels cho ô E16 chẳng hạn.
Cảm ơn!
 
cho 1 sheet mặc định thì có độ cao dòng là 20 pixels và độ rộng là 64 pixels
Đấy là mặc định trên riêng màn hình máy tính của bạn vậy thôi. 72 DPI (dots per inch) = 72 points = 96 pixels.
Đơn vị chiều cao Row là point, mặc định với máy tính của bạn là 15 point = 96/72*15 = 20 pixels.

Thiết lập DPI trên màn hình mỗi máy tính có thể khác nhau. Ví dụ mình chọn 120 pixels vì mắt kém, nên mặc định row height = 16.8 points.
1609385016807.png
 
Upvote 0
Chào đại gia đình GPE

Cho em hỏi có cách nào xác định chiều cao tính từ lề trên và chiều rộng tính từ lề trái (đơn vị là pixels) cho một ô bất kỳ không ạ?
Ví dụ cho 1 sheet mặc định thì có độ cao dòng là 20 pixels và độ rộng là 64 pixels. Nhưng nếu như có tác động làm thay đổi kích thước dòng/cột thì em chưa tính được số pixels cho ô E16 chẳng hạn.
Cảm ơn!
Bạn thử phương án này coi thế nào
Giả sử ô xác định là E5 vậy khoảng cách từ E5 và lề trái là A5+B5+C5+D5. Tương tự cho khoảng cách so với cạnh trên. Để biết địa chỉ của ô cần thì dùng Range.Address
 
Upvote 0
Chủ thớt cần tính ra pixel(s) mà.
1609385313764.png
Biết được khoảng cách cell rồi nhưng phải biết DPI của màn hình đó mới tính ra được cái pích xồ kia.
 
Upvote 0
Đấy là mặc định trên riêng màn hình máy tính của bạn vậy thôi. 72 DPI (dots per inch) = 72 points = 96 pixels.
Đơn vị chiều cao Row là point, mặc định với máy tính của bạn là 15 point = 96/72*15 = 20 pixels.

Thiết lập DPI trên màn hình mỗi máy tính có thể khác nhau. Ví dụ mình chọn 120 pixels vì mắt kém, nên mặc định row height = 16.8 points.
View attachment 252206
Dạ không phải ý này. Ví dụ đối với máy tính của em (để chế độ mặc định) thì tính ra kết quả như hình dưới
nhưng khi có thay đổi độ cao dòng/cột thành số bất kỳ thì em không tính được ạ
Bài đã được tự động gộp:

Chủ thớt cần tính ra pixel(s) mà.
View attachment 252207
Biết được khoảng cách cell rồi nhưng phải biết DPI của màn hình đó mới tính ra được cái pích xồ kia.
DPI có phải là số 1920 x 1080 như hình dưới phải không ạ?
 

File đính kèm

  • z2255616610611_92eedbd6373a7b3913565844454989a4.jpg
    z2255616610611_92eedbd6373a7b3913565844454989a4.jpg
    57.4 KB · Đọc: 16
  • z2255631710002_7009ca26e5c36a1a351435ee692b9206.jpg
    z2255631710002_7009ca26e5c36a1a351435ee692b9206.jpg
    55.3 KB · Đọc: 13
Lần chỉnh sửa cuối:
Upvote 0
Dạ không phải ý này. Ví dụ đối với máy tính của em (để chế độ mặc định) thì tính ra kết quả như hình dưới
Bài trên tôi chỉ nói lên rằng: Không phải trên mọi màn hình máy tính đều giống nhau, đều mặc định như giá trị bạn nêu ở bài #1. Để nếu ai có đọc tránh hiểu lầm.

khi có thay đổi độ cao dòng/cột thành số bất kỳ thì em không tính được ạ
Nếu bạn chỉ áp dụng trên máy tính của bạn, và chắc chắn rằng thiết lập đó là cố định thì đã có tham chiếu cố định (72DPI), nên hoàn toàn tính được thôi.

Khoảng cách từ mép bảng tính tới cạnh trên của 1 cell X= tổng chiều cao dòng của các cells phía trên cell X (points) * 96/72 = a pixels
 
Upvote 0
Bài trên tôi chỉ nói lên rằng: Không phải trên mọi màn hình máy tính đều giống nhau, đều mặc định như giá trị bạn nêu ở bài #1. Để nếu ai có đọc tránh hiểu lầm.


Nếu bạn chỉ áp dụng trên máy tính của bạn, và chắc chắn rằng thiết lập đó là cố định thì đã có tham chiếu cố định (72DPI), nên hoàn toàn tính được thôi.

Khoảng cách từ mép bảng tính tới cạnh trên của 1 cell X= tổng chiều cao dòng của các cells phía trên cell X (points) * 96/72 = a pixels
Cái khó ở đây là chiều cao dòng cột đôi khi nó lung tung như hình dưới. Nên em muốn hỏi là có mã code VBA nào để có thể gọi ra khoảng cách lề trên (.top), khoảng cách lề trái (.left) không ạ
em có tìm kiếm trên mạng được đoạn mã tìm vị trí cho Shape (đơn vị là points). Nhưng khi áp dụng cho ô (cells) thì chưa được
 

File đính kèm

  • 1.jpg
    1.jpg
    27.3 KB · Đọc: 9
  • 4.jpg
    4.jpg
    53.3 KB · Đọc: 4
  • 3.jpg
    3.jpg
    26.8 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
Ợ. Thấy hỏi cái cao siêu vậy mà lại hỏi cái này.
Mình record macro thao tác thay đổi chiều cao dòng là có code luôn và ngay rồi còn gì.

PHP:
Sub vidu()
    Dim h As Double
    h = Sheet1.Range("A1").RowHeight
    MsgBox h
End Sub
Dạ kết quả chưa chính xác ạ. Số đúng cho chiều cao tính từ lề trên ô C12 là 195.75 points
Sub vidu()
Dim h As Double
h = Sheets("2").Range("C12").RowHeight
MsgBox h
End Sub
 

File đính kèm

  • 5.jpg
    5.jpg
    39.2 KB · Đọc: 11
  • find position.xlsm
    15.1 KB · Đọc: 1
Upvote 0
Dạ kết quả chưa chính xác ạ. Số đúng cho chiều cao tính từ lề trên ô C12 là 195.75 points
Sub vidu()
Dim h As Double
h = Sheets("2").Range("C12").RowHeight
MsgBox h
End Sub
Thế thì thua bạn rồi đới.
Chỗ tổng đâu mất tiêu rồi, C12 là C12 thôi, còn bao nhiêu cells nữa cơ mà.
1609388071983.png
with sheets("2")
h1=.range("A1").RowHeight
h2=.range("A2").RowHeight
h3=.range("A3").RowHeight
h4=.range("A4").RowHeight
h5=.range("A5").RowHeight
'...
h11=.range("A11").RowHeight
End with
h_tong = h1+h2 + h3 + ... + h11
msgbox h_tong

Chỉ là tiết mục toán tính tổng thôi mà.
 
Upvote 0
Quá rảnh.
Mã:
Public Sub TopLeft()
Dim rng As Range, r As Long, c As Long
Dim sumR As Double, sumC As Double
Set rng = Range("F10") ' thay doi tai day

For r = 1 To rng.Row - 1
sumR = sumR + Cells(r, 1).RowHeight
Next r
MsgBox sumR


For c = 1 To rng.Column - 1
sumC = sumC + Cells(1, c).ColumnWidth
Next c
MsgBox sumC
End Sub
 
Upvote 0
@Minh Ngọc LH

Dưới đây là một phương pháp lấy đơn vị pixels trái, và trên của một ô so với khung cửa sổ chính

ActiveWindow.PointsToScreenPixelsX(0)
ActiveWindow.PointsToScreenPixelsY(0)

UsableHeight, UsableWidth, VisibleRange Left top trong Lớp Window

Ví dụ: ActiveWindow.PointsToScreenPixelsX([C3].left)

ActivePane là tính từ mép trên và trái của các ô, trong vùng đã được ngăn
ActiveWindow.ActivePane.PointsToScreenPixelsX(0)
ActiveWindow.ActivePane.PointsToScreenPixelsX(0)

Ví dụ: ActiveWindow.ActivePane.PointsToScreenPixelsX([C3].left)

Trái và trên của vùng ô nhìn thấy được trong vùng đã được ngăn
ActiveWindow.ActivePane.VisibleRange.Left
ActiveWindow.ActivePane.VisibleRange.top

Bạn dựa vào các phương pháp trên để tìm ra được trái trên cao rộng của tập hợp ô.

Excel không quy định cố định thông số rộng cao mà dựa vào Font chữ, cứ Font chữ thay đổi thì tỉ lệ giữa Pixels và đơn vị độ rộng của font chữ lại thay đổi. Vì vậy mà việc tính toán trở nên khó khăn và phức tạp hơn.

Nếu bạn muốn đi xâu hơn về mục đích của bạn, thì đương nhiên bạn cần phải tìm hiểu kiến thức cũng chuyên xâu.
 
Upvote 0
Quá rảnh.
Mã:
Public Sub TopLeft()
Dim rng As Range, r As Long, c As Long
Dim sumR As Double, sumC As Double
Set rng = Range("F10") ' thay doi tai day

For r = 1 To rng.Row - 1
sumR = sumR + Cells(r, 1).RowHeight
Next r
MsgBox sumR


For c = 1 To rng.Column - 1
sumC = sumC + Cells(1, c).ColumnWidth
Next c
MsgBox sumC
End Sub
Cảm ơn bác. Cái này mất cả vòng lặp chỉ để xác định vị trí của 1 ô nào đó
Bài đã được tự động gộp:

@Minh Ngọc LH

Dưới đây là một phương pháp lấy đơn vị pixels trái, và trên của một ô so với khung cửa sổ chính

ActiveWindow.PointsToScreenPixelsX(0)
ActiveWindow.PointsToScreenPixelsY(0)

UsableHeight, UsableWidth, VisibleRange Left top trong Lớp Window

Ví dụ: ActiveWindow.PointsToScreenPixelsX([C3].left)

ActivePane là tính từ mép trên và trái của các ô, trong vùng đã được ngăn
ActiveWindow.ActivePane.PointsToScreenPixelsX(0)
ActiveWindow.ActivePane.PointsToScreenPixelsX(0)

Ví dụ: ActiveWindow.ActivePane.PointsToScreenPixelsX([C3].left)

Trái và trên của vùng ô nhìn thấy được trong vùng đã được ngăn
ActiveWindow.ActivePane.VisibleRange.Left
ActiveWindow.ActivePane.VisibleRange.top

Bạn dựa vào các phương pháp trên để tìm ra được trái trên cao rộng của tập hợp ô.

Excel không quy định cố định thông số rộng cao mà dựa vào Font chữ, cứ Font chữ thay đổi thì tỉ lệ giữa Pixels và đơn vị độ rộng của font chữ lại thay đổi. Vì vậy mà việc tính toán trở nên khó khăn và phức tạp hơn.

Nếu bạn muốn đi xâu hơn về mục đích của bạn, thì đương nhiên bạn cần phải tìm hiểu kiến thức cũng chuyên xâu.
Cảm ơn anh. Gợi ý của anh rất ok ạ. Dùng tốt, đơn giản!
 
Upvote 0
Web KT

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

Back
Top Bottom