Hỏi đáp về VBA

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,440
Nghề nghiệp
Bác sĩ
Câu hỏi 1 : Lấy giá trị của ô trong VB như thế nào ?

Hỏi :

Dùng Refedit, khi người dùng chọn 1 ô nào đó rồi, không biết làm sao để lấy giá trị của ô đó, help me...

Mình đã biết hàm Cells(x,y) để lấy giá trị của một ô, nhưng khi dùng refedit thì giá trị của refedit là Data!$A$5.
Vậy nếu dùng Cells thì phải có toạ độ dòng của ô A5, nên cần phải xử lý chuỗi để lấy được chữ "A" và số "5".

Nếu dùng Rows hay Columns thì cũng phải có toạ độ dòng và cột, như vậy cũng bằng không.

Mình làm được như vậy, nhưng rắc rối quá.
Các bạn có biết hàm nào để lấy thẳng giá trị của ô đó không chỉ cho mình, nghĩa là lấy thẳng gía trị của ô mà người dùng chọn trong Refedit, mà khong phải xử lý chuỗi để lấy cột và dòng.

Trả lời :

Giả sử trong Form của bạn có control "RefEdit" đặt tên là RefEdit1 (đối tượng lấy địa chỉ ô hay vùng có kiểu là Text).
Để lấy giá trị Range(RefEdit1.Text).Value
Để lấy công thức Range(RefEdit1.Text).Formula
Để lấy cột bạn Range(RefEdit1.Text).Column
Để lấy dòng bạn Range(RefEdit1.Text).Row
Để lấy số cột Range(RefEdit1.Text).Columns.Count
Để lấy số dòng Range(RefEdit1.Text).Rows.Count
Nếu không đúng mục đích của bạn thì bạn giải thích thêm yêu cầu của bạn.
Chúc bạn thành công!
 
khó hỉ?
chép đoạn code này cho sheet2
Mã:
Private Sub Worksheet_Activate()
Sheet2.[A1].Resize(Sheet1.[D1000].End(3).Row).Value = Sheet1.[D1].Resize(Sheet1.[D1000].End(3).Row).Value
Sheet2.[B1].Resize(Sheet1.[B1000].End(3).Row, 2).Value = Sheet1.[B1].Resize(Sheet1.[B1000].End(3).Row, 2).Value
Sheet2.[D1].Resize(Sheet1.[A1000].End(3).Row).Value = Sheet1.[A1].Resize(Sheet1.[A1000].End(3).Row).Value
End Sub

phải nhấp chuột qua sheet2 mã mới chạy bạn ơi
có cách nào ko vào sheet2 vẫn chạy ko +-+-+-+
 
Upvote 0
phải nhấp chuột qua sheet2 mã mới chạy bạn ơi
có cách nào ko vào sheet2 vẫn chạy ko +-+-+-+

tôi không có cách nào,
hy vọng các cao thủ ghé qua giúp bạn,
tôi chỉ có một thắc mắc, bạn đưa nhưng số liệu y chang như vậy qua sheet2 để làm gì vậy?
ý tôi là bước kế tiếp bạn làm cái gì?
 
Upvote 0
Đưa số quyết định ra đầu để dò hàm vlookup theo số quyết định
 
Upvote 0
Đưa số quyết định ra đầu để dò hàm vlookup theo số quyết định

sao phải cực khổ vậy, để y như củ dùng index và match

=========
ví dụ cột F là cột số quyết định mà bạn sẻ đi tìm
G là họ tên
Mã:
G2=INDEX($A$2:$C$23,MATCH($F2,$D$2:$D$23,0),2)
H2=INDEX($A$2:$C$23,MATCH($F2,$D$2:$D$23,0),3)
I2=INDEX($A$2:$C$23,MATCH($F2,$D$2:$D$23,0),1)
 
Lần chỉnh sửa cuối:
Upvote 0
cột f là số quyết định
cột cần dò là phía trước cột f nên ko dùng vlookup dò dc (tìm cột a, b, c, d, e)
còn cột g thì dễ rồi
 
Upvote 0
ví dụ
m1=vlookup(n1,f1:k100,2,0)
vùng dò phải bắt đầu từ cột f trở về sau
 
Upvote 0
ví dụ
m1=vlookup(n1,f1:k100,2,0)
vùng dò phải bắt đầu từ cột f trở về sau

Dùng cột phụ đưa cột F ra trước rồi dùng Vlookup dò, còn ko dùng cộng thức của Gâu Gâu mà xử mà mở topic mới đi bạn bạn hỏi nên vào thẳng chủ đề mục đích làm gì để không đi lòng vòng mệt
 
Upvote 0
Dùng cột phụ đưa cột F ra trước rồi dùng Vlookup dò, còn ko dùng cộng thức của Gâu Gâu mà xử mà mở topic mới đi bạn bạn hỏi nên vào thẳng chủ đề mục đích làm gì để không đi lòng vòng mệt
bạn ơi cho hỏi chút dc ko?
có 2 sheet s1 để nhập liệu s2 để công thức vì để s1 sợ bị xóa nhầm
nên đoạn mã sau
Private Sub Worksheet_Activate()
Sheet2.[A1].Resize(Sheet1.[D1000].End(3).Row).Value = Sheet1.[D1].Resize(Sheet1.[D1000].End(3).Row).Value
Sheet2.[B1].Resize(Sheet1.[B1000].End(3).Row, 2).Value = Sheet1.[B1].Resize(Sheet1.[B1000].End(3).Row, 2).Value
Sheet2.[D1].Resize(Sheet1.[A1000].End(3).Row).Value = Sheet1.[A1].Resize(Sheet1.[A1000].End(3).Row).Value
End Sub
ở sheet2, ko muốn nhấp vào sheet2 nó vẫn chạy
 
Upvote 0
bạn ơi cho hỏi chút dc ko?
có 2 sheet s1 để nhập liệu s2 để công thức vì để s1 sợ bị xóa nhầm
nên đoạn mã sau
Private Sub Worksheet_Activate()
Sheet2.[A1].Resize(Sheet1.[D1000].End(3).Row).Value = Sheet1.[D1].Resize(Sheet1.[D1000].End(3).Row).Value
Sheet2.[B1].Resize(Sheet1.[B1000].End(3).Row, 2).Value = Sheet1.[B1].Resize(Sheet1.[B1000].End(3).Row, 2).Value
Sheet2.[D1].Resize(Sheet1.[A1000].End(3).Row).Value = Sheet1.[A1].Resize(Sheet1.[A1000].End(3).Row).Value
End Sub
ở sheet2, ko muốn nhấp vào sheet2 nó vẫn chạy

Dùng sự kiện nhiều file quá file nào là gốc là chính giả sự 1 ít đi rồi giúp luôn cụ thể

Private Sub Worksheet_Change(ByVal Target As Range)


End Sub
 
Upvote 0
mấy anh chị có cách nào trong sheet2 cột d nếu ô nào =0 thì các công thức ở cột e, f, g.... khoản 100 cột
không thực hiện công thức
 
Upvote 0
Các ban sửa giùm cho mình đoạn code mà mình không biết sai chỗ nào, soạn ra không sử dụng được:

Sub timM()
Dim a, b, c, i, j, k As Integer
Cells(3, 3) = a
Cells(4, 3) = b
Cells(5, 3) = c
Cells(3, 4) = i
Cells(4, 4) = j
Cells(5, 4) = k
For nc = 0 To 999999# Step c
M = nc + k
If (M - i) Mod a = 0 Then
If (M - j) Mod b = 0 Then
Exit For
End If
End If
Next nc
Cells(7, 5) = M
End Sub
 

File đính kèm

  • timso.xls
    40.5 KB · Đọc: 2
Upvote 0
Các ban sửa giùm cho mình đoạn code mà mình không biết sai chỗ nào, soạn ra không sử dụng được:

Sub timM()
...
Cells(7, 5) = M
End Sub
Bạn cũng chơi ít ác nhỉ. Bắt người ta tự dịch ngược code rồi mới biết M là cái gì xong mới sửa...o_O
 
Upvote 0
tôi đổi lai rồi nhưng vẫn không thực hiện được phép tính
 
Upvote 0
tôi đổi lai rồi nhưng vẫn không thực hiện được phép tính
Thì đây, vẫn code của bạn.
Mã:
Sub timM()
Dim a, b, c, i, j, k As Integer
a = Cells(3, 3)
b = Cells(4, 3)
c = Cells(5, 3)
i = Cells(3, 4)
j = Cells(4, 4)
k = Cells(5, 4)
For nc = 0 To 999999# Step c
M = nc + k
If (M - i) Mod a = 0 Then
If (M - j) Mod b = 0 Then
Exit For
End If
End If
Next nc
Cells(7, 5) = M
End Sub
 

File đính kèm

  • timso.xls
    44.5 KB · Đọc: 1
Upvote 0
oh, sao nhỉ hay bản excel của mình có vấn đè. mở file của bạn là ăn ngay lạ quá????
Bài đã được tự động gộp:

cám ơn ban nhiều lắm
 
Upvote 0
Các ban cho mình hỏi tý, sau khi thực hiện xong đoạn code thì tự nhiên trên file của mình xuất hiện thêm 1 sheet, trong đó có nội dung như sau:
Compatibility Report for timso.xls
Run on 11/5/2023 22:17

If the workbook is saved in an earlier file format or opened in an earlier version of Microsoft Excel, the listed features will not be available.

Minor loss of fidelity # of occurrences Version

Some cells or styles in this workbook contain formatting that is not supported by the selected file format. These formats will be converted to the closest format available. 1 Excel 97-2003
Vậy, nó là gì mà mình không hiểu
 
Upvote 0
Các ban cho mình hỏi tý, sau khi thực hiện xong đoạn code thì tự nhiên trên file của mình xuất hiện thêm 1 sheet, trong đó có nội dung như sau:
Compatibility Report for timso.xls
Run on 11/5/2023 22:17

If the workbook is saved in an earlier file format or opened in an earlier version of Microsoft Excel, the listed features will not be available.

Minor loss of fidelity # of occurrences Version

Some cells or styles in this workbook contain formatting that is not supported by the selected file format. These formats will be converted to the closest format available. 1 Excel 97-2003
Vậy, nó là gì mà mình không hiểu
Nhờ google dịch xem nó là cái gì?
trên máy tôi Bà google dịch ra là:
Báo cáo tương thích cho timso.xls
Chạy vào ngày 5/11/2023 22:17
Nếu sổ làm việc được lưu ở định dạng tệp cũ hơn hoặc được mở ở phiên bản cũ hơn của Microsoft Excel, các tính năng được liệt kê sẽ không khả dụng.
Mất đi một chút độ trung thực Số lần xuất hiện Phiên bản.
Một số ô hoặc kiểu trong sổ làm việc này chứa định dạng không được hỗ trợ bởi định dạng tệp đã chọn. Các định dạng này sẽ được chuyển đổi sang định dạng gần nhất hiện có. 1 Excel 97-2003

File của bạn đang lưu ở dạng .xls.
Bạn thử xóa bỏ cái sheet mới tạo ra và lưu lại file với thành phần mở rộng là .xlsm. sau đó đóng file và mở lại xem có bí nữa không?
 
Upvote 0
Các bạn cho mình hỏi, minh bị sai trên đoạn code sau:
Sub ptb2()
Dim a, b, c As Integer
Dim D As Double
Dim x, x1, x2 As Variant
a = Cells(5, 4)
b = Cells(5, 5)
c = Cells(5, 6)
D = Cells(4, 7)
x1 = Cells(5, 8)
x2 = Cells(5, 9)
x = Cells(6, 9)
D = b * b - 4 * a * c
If a = 0 And b <> 0 Then
x1 = ""
x2 = ""
x = -c / b
Else
End If
If a <> 0 And b = 0 And c <= 0 Then
x1 = Sqr(c) (debug báo lỗi ở hàng này tô vàng)
x2 = -Sqr(c)
x = ""
Else
If D < 0 Then
x1 = "vo nghiem"
x2 = "vo nghiem"
End If
If D > 0 Then
x1 = (-b + Sqr(D)) / (2 * a)
x2 = (-b - Sqr(D)) / (2 * a)
End If
If D = 0 Then
x1 = -b / (2 * a)
x2 = -b / (2 * a)
End If
End If
Cells(5, 8) = x1
Cells(5, 9) = x2
Cells(6, 9) = x
Cells(4, 7) = D
End Sub

các bạn chỉ giùm điểm sai, cần phải sửa lại cú pháp như thế nào, cảm ơn trước....
 

File đính kèm

  • Book1.xls
    25 KB · Đọc: 1
Upvote 0
Các bạn cho mình hỏi, minh bị sai trên đoạn code sau:
các bạn chỉ giùm điểm sai, cần phải sửa lại cú pháp như thế nào, cảm ơn trước....
Thử kiểm tra lại Ô F5 (Cells(5,6) ) là text hay số.
Nên bỏ các dòng
D = Cells(4, 7)
x1 = Cells(5, 8)
x2 = Cells(5, 9)
x = Cells(6, 9)
Và có thể tham khảo code sau (vẫn là code của bạn-tôi có sửa lại tý chút)

Mã:
Option Explicit

Sub ptb2()
Dim a, b, c As Integer
Dim D& ' As Double
Dim x, x1, x2 ' As Variant

On Error GoTo Loi

a = Cells(5, 4)
b = Cells(5, 5)
c = Cells(5, 6)

If a <> 0 And b = 0 And c <= 0 Then
    x1 = Sqr(--c) '(debug báo l?i ? hàng này tô vàng)
    x2 = -Sqr(--c)
    x = ""
    Exit Sub
ElseIf a = 0 And b <> 0 Then
    x1 = ""
    x2 = ""
    x = -c / b
    Exit Sub
Else

D = b * b - 4 * a * c

   If D < 0 Then
        x1 = "vo nghiem"
        x2 = "vo nghiem"
    End If
    If D > 0 Then
        x1 = (-b + Sqr(D)) / (2 * a)
        x2 = (-b - Sqr(D)) / (2 * a)
    End If
    If D = 0 Then
        x1 = -b / (2 * a)
        x2 = -b / (2 * a)
    End If
End If
Cells(5, 8) = x1
Cells(5, 9) = x2
Cells(6, 9) = x
Cells(4, 7) = D
MsgBox "Done"
Loi:
     If Err Then
        MsgBox "Đa có lôi say ra-Hay kiêm tra lai các thông sô"
     End If
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom