Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây (1 người xem)

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cho em hỏi về đoạn code sau:
PHP:
Sub xoadongtrong1sheet()
Dim a, b, c, d, e As Integer
'Tim hang dau tien co du lieu
a = ActiveSheet.UsedRange.Row
Debug.Print " gia tri cua a :"; a
'tim hang cuoi cung co du lieu
b = ActiveSheet.UsedRange.Rows.Count
Debug.Print " gia tri cua b :" & b
'tim so cot co du lieu
c = ActiveSheet.UsedRange.Columns.Count
Debug.Print " gia tri cua c :" & c
'so hang co chua du lieu
d = a - 1 + b
Application.ScreenUpdating = False
For e = d To 1 Step -1
If Application.CountA(Rows(e)) = 0 Then Rows(e).Delete
Debug.Print e
Next e
Debug.Print e
Application.ScreenUpdating = True
End Sub
</b>Đoạn code trên hoạt động bình thường.Tất cả các dòng trống trong 1 sheet đều được xoá hết. Nhưng khi em sửa lại đoạn vòng lặp lại như bên dưới thì nó không xoá hết các dòng trống trong 1 lần chạy mà phải chạy nhiều lần . Mong các anh chị giúp đỡ.
PHP:
[B]Sub xoadongtrong1sheet()[/B]
[B]Dim a, b, c, d, e As Integer[/B]
[B]'Tim hang dau tien co du lieu[/B]
[B]a = ActiveSheet.UsedRange.Row[/B]
[B]Debug.Print " gia tri cua a :"; a[/B]
[B]'tim hang cuoi cung co du lieu[/B]
[B]b = ActiveSheet.UsedRange.Rows.Count[/B]
[B]Debug.Print " gia tri cua b :" & b[/B]
[B]'tim so cot co du lieu[/B]
[B]c = ActiveSheet.UsedRange.Columns.Count[/B]
[B]Debug.Print " gia tri cua c :" & c[/B]
[B]'so hang co chua du lieu[/B]
[B]d = a - 1 + b[/B]
[B]Application.ScreenUpdating = False[/B]
[B]For e = 1 To d Step 1[/B]
[B]If Application.CountA(Rows(e)) = 0 Then Rows(e).Delete[/B]
[B]Debug.Print e[/B]
[B]Next e[/B]
[B]Debug.Print e[/B]
[B]Application.ScreenUpdating = True[/B]
[B]End Sub[/B]
[B][/B]

Khi xóa dòng thì sẽ đẩy dòng dưới lên thế chỗ. Vì thế khi bạn dùng đoạn code trên thì nó sẽ xoá theo thứ từ dưới lên, và không bị mất dữ liệu. Nếu dùng đoạn code dưới, coi chùng mất dữ liệu đấy
 
Upvote 0
Thấy cần fải nặng lời với anh chàng này một tẹo mới được

các ô màu đỏ nằm ở bên sheets(“Trinh”) ví dụ W26, AA26…(mình dow về vẫn thấy)
Việc của mình như sau: . . . Nhờ các bạn xem giúp. Thanks !

Những lời khó nghe đây:

(1)
Là những người từ học mà thành, chúng ta bao giờ cũng fải khai báo tường minh!
Bỡi không khai báo tường minh nên bạn có dòng lệnh không giống ai như vầy:
Mã:
 [B]Tmp1 = Nothing[/B]
Lỗi này khi biên dịch sẽ fát hiện ra nếu ta có câu lệnh Option Explicit

Tmp1, Tmp & Tmp2 đều là biến loại chuỗi để lưu giữ địa chỉ các ô khảo sát, cớ gì lại cho nó bằng Nothing?

Mã:
Set Cls = Nothing
dùng để thu hồi bộ nhớ với các biến đối tượng.

(2) On Error Resume Next
Đây là con dao 2 lưỡi; Khi xài nó ta fải biết chắc rằng ta có thể bỏ qua khi gặp lỗi;
Nhưng trong macro, lỗi Tmp = Nothing là lỗi nặng không thể cho qua một cách dễ dãi như vậy, Trong macro này, cũng như từ nay về sau, lúc nào bạn muốn viết macro.
[ Thường thì mình viết lúc đầu 1 cách rất dài dòng, chạy được cái đã, sau đó tu chỉnh, bỏ bớt những đoạn thừa; Cũng như dùng chung biến]

(1a) Xin nhắc bạn thêm: Các Next fải hay rất nên gắn cái mà mình gọi là đối số cho nó.
Ví dụ Next Cls hay Next Jj, . . .
Rất lợi, khi viết như vậy, sau đó ta tha hồ xài lại biến Cls hay Jj vì nó đã hoàn thành nghĩa vụ trên rồi.
Hơn nữa, theo mình nghĩ dù bạn không ghi tường minh rằng Next Cls thì máy cũng sẽ đi tìm cái Cls để làm việc & như vậy sẽ chậm hơn khi ta chỉ cho nó ngay bằng vài ba chữ cái, như Cls
(Cái lười của bạn làm nhọc lòng thêm cho máy & đôi lúc nó sẽ nổi khùng cho bạn biết tay)

Với những í như vậy mình sửa lại đoạn mã đó như sau;
Nói trước rằng sửa đề theo chuẩn của những người tự học mà thôi; Chứ hoàn toàn chưa can thiệp vào giải thuật của bạn.

Bạn sẽ thấy đoạn code của mình như là người nông dân viết code, không chút nào có vẻ hàm lâm; nhưng dễ đọc & bảo trì cũng như sửa đổi.

PHP:
Option Explicit '1'
Sub ShTrinh()
'On Error Resume Next'
Dim Sh As Worksheet, Cls As Range
Dim i As Integer, Dong As Long, Cot As Byte
Dim Tmp1 As String, Tmp2 As String, Tmp As String

With Application
   .DisplayAlerts = False:                         Set Sh = Sheets("TongHop")
   .ScreenUpdating = False:                        Sheets("Trinh").Select
   [a10:bl10000].Clear                             'A10:BL10000'
   [d9:bl9] = "  "                                 'D9:BL9'
   Sh.[c11:l10000].Copy [c11]                      'C11:L10000'
   With Sh.Range("c10:c10000").SpecialCells(2) 'C11,C25,C41'
      For i = 1 To .Areas.Count
1        'M12:S12'
2        'M26:S26
3        'M42:S42'
         For Each Cls In .Areas(i)(2, 11).Resize(, 52).SpecialCells(2)
            Tmp1 = Cls.Address
            Tmp = Sh.[m8:bl8].Find(Cls).Address '(...)'
            Dong = Cls.Row:                        Cot = Range(Tmp).Column
            Tmp2 = Cells(Dong, Cot).Address
'           MsgBox "cls= " & cls
'           MsgBox "Copy toi " & tmp2
            Sh.Range(Tmp1).Resize(100).Copy Range(Tmp2)
            Tmp = "":      Tmp1 = "":              Tmp2 = ""
         Next
      Next
   End With
 End With
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cho em hỏi Đoạn code thứ 2 em cho biến e chạy từ 1 tới d bước nhảy bằng 1 thì cũng tương đương với việc cho e chạy từ d tới 1 với bước nhảy bằng -1 ở đoạn code 1 đúng không. Nhưng tại sao kết quả chạy 2 đoạn code lại khác nhau.
Và cho em hỏi thêm về ý nghĩa của câu lệnh " If Application.CountA(Rows(e)) = 0 Then Rows(e).Delete ". Câu này em vẫn chưa hiểu rõ được.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng chạy để xóa dòng thì không à nha!

Cho em hỏi Đoạn code thứ 2 em cho e chạy từ 1 tới d bước nhảy bằng 1 thì cũng tương đương với việc cho e chạy từ d tới 1 với bước nhảy bằng -1 ở đoạn code 1 đúng không. Nhưng tại sao kết quả chạy 2 đoạn code lại khác nhau.

Để xóa dòng, kinh nghiệm trên diễn đàn cho thấy có 2 cách như sau:

Cách 1
Tìm tất cả những ô thỏa điều kiện xóa, nhốt chúng vô biến đối tượng kiểu Range bằng fương thức Union()
Cuối cùng xóa 1 lần 1;

Cách thứ 2: Duyệt từ dưới lên đầu CSDL, gặp hàng nào xóa hàng đó;

(Hai cách tốc độ tương đương nhau)

Không nên xóa từ trên xuống; Lúc đó 2 dòng kề nhau cùng đạt điều kiện, nhưng chỉ xóa dòng trên, dòng dưới bị bỏ lại, ta sẽ fải chạy macro lần nữa mới mong đạt ước nguyện.
 
Upvote 0
Với những í như vậy mình sửa lại đoạn mã đó như sau;
Nói trước rằng sửa đề theo chuẩn của những người tự học mà thôi; Chứ hoàn toàn chưa can thiệp vào giải thuật của bạn.
PHP:
Option Explicit '1'
Sub ShTrinh()
'On Error Resume Next'
Dim Sh As Worksheet, Cls As Range
Dim i As Integer, Dong As Long, Cot As Byte
Dim Tmp1 As String, Tmp2 As String, Tmp As String

With Application
   .DisplayAlerts = False:                         Set Sh = Sheets("TongHop")
   .ScreenUpdating = False:                        Sheets("Trinh").Select
   [a10:bl10000].Clear                             'A10:BL10000'
   [d9:bl9] = "  "                                 'D9:BL9'
   Sh.[c11:l10000].Copy [c11]                      'C11:L10000'
   With Sh.Range("c10:c10000").SpecialCells(2) 'C11,C25,C41'
      For i = 1 To .Areas.Count
1        'M12:S12'
2        'M26:S26
3        'M42:S42'
         For Each Cls In .Areas(i)(2, 11).Resize(, 52).SpecialCells(2)
            Tmp1 = Cls.Address
            Tmp = Sh.[m8:bl8].Find(Cls).Address '(...)'
            Dong = Cls.Row:                        Cot = Range(Tmp).Column
            Tmp2 = Cells(Dong, Cot).Address
'           MsgBox "cls= " & cls
'           MsgBox "Copy toi " & tmp2
            Sh.Range(Tmp1).Resize(100).Copy Range(Tmp2)
            Tmp = "":      Tmp1 = "":              Tmp2 = ""
         Next
      Next
   End With
 End With
End Sub

Cảm ơn bác HYen ! được bác "mắng" mấy câu khoái ghê nhưng em vẫn chưa làm được, nhờ bác xem giúp code này sai ở đâu mà thông báo trong Msgbox thì đúng nhưng kết quả ở bảng tính lại không đúng. Theo phán đoán của em thì hình như khi chuyển sang vòng lặp khác các biến vẫn lưu giữ kết quả của vòng lặp trước nên em nothing đại xem sao chứ vụ khai báo biến em còn ngu ngơ lắm.
Em đã viết lại Tmp = "" : Tmp1 = "" : Tmp2 = "" nhưng vẫn không được bác ạ. Rất mong bác và các bạn quan tâm giúp vì tôi đang rất cần.
 
Lần chỉnh sửa cuối:
Upvote 0
Vẫn chưa làm được, nhờ bác xem giúp code này sai ở đâu mà thông báo trong Msgbox thì đúng nhưng kết .

Đây là fương thức tìm kiếm chuẩn cho bạn:

PHP:
Option Explicit
Sub ShTrinh()
' On Error Resume Next
Dim Sh As Worksheet, Cls As Range, sRng As Range, Rng As Range
Dim Dong As Long, Cot As Byte, jJ As Byte
Dim Tmp1 As String, Tmp2 As String, Tmp As String

With Application
   .DisplayAlerts = False
   .ScreenUpdating = False:              Sheets("Trinh").Select
   Set Sh = Sheets("TongHop")
'    [a10:BL10000].Clear
   [D9:BL9] = "  "
   Sh.[c11:l10000].Copy [c11]
   With Sh.Range("c10:c10000").SpecialCells(2)
      'C11, C25 & C41 '
      For jJ = 1 To .Areas.Count '3'
1        'M12:S12: Rong'
2        'M26:S26 LUC, LUK & NHK'
3        'M42:S42 LUC, LUK & NHK'
         For Each Cls In .Areas(jJ)(2, 11).Resize(, 52).SpecialCells(2)
            If Cls.Value <> "" Then
5 ' Tim O Ben Sh Có Chúa Tri Trong Cls Khong Rong'
               Set Rng = Sh.Range(Sh.[M8], Sh.[BL8])
               Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
6 ' Néu Tìm Tháy:'
               If Not sRng Is Nothing Then
7 ' Gán Dòng Tìm Tháy Vo Bién Dòng & Bien Cot Da Khai Báo:'
                  Dong = sRng.Row:                Cot = sRng.Column
                  MsgBox Dong, , Cot
               End If
'               Sh.Range(Tmp1).Resize(100).Copy Range(Tmp2)
'               Tmp = "": Tmp1 = "":               Tmp2 = ""
            End If
         Next Cls
      Next jJ
    End With
End With
End Sub

Bạn chạy macro & ghi lại tọa độ dòng & cột của các MsgBoxx xuất hiện;

Sau đó tra lại xem bên Trang 'TongHop' nó là những toạn độ nào

(Chú í các dòng lệnh đánh số từ 1 - 3' để đối chiếu)

Chờ tin bạn!
 
Upvote 0
Đây là fương thức tìm kiếm chuẩn cho bạn:

PHP:
Option Explicit
Sub ShTrinh()
' On Error Resume Next
Dim Sh As Worksheet, Cls As Range, sRng As Range, Rng As Range
Dim Dong As Long, Cot As Byte, jJ As Byte
Dim Tmp1 As String, Tmp2 As String, Tmp As String

With Application
   .DisplayAlerts = False
   .ScreenUpdating = False:              Sheets("Trinh").Select
   Set Sh = Sheets("TongHop")
'    [a10:BL10000].Clear
   [D9:BL9] = "  "
   Sh.[c11:l10000].Copy [c11]
   With Sh.Range("c10:c10000").SpecialCells(2)
      'C11, C25 & C41 '
      For jJ = 1 To .Areas.Count '3'
1        'M12:S12: Rong'
2        'M26:S26 LUC, LUK & NHK'
3        'M42:S42 LUC, LUK & NHK'
         For Each Cls In .Areas(jJ)(2, 11).Resize(, 52).SpecialCells(2)
            If Cls.Value <> "" Then
5 ' Tim O Ben Sh Có Chúa Tri Trong Cls Khong Rong'
               Set Rng = Sh.Range(Sh.[M8], Sh.[BL8])
               Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
6 ' Néu Tìm Tháy:'
               If Not sRng Is Nothing Then
7 ' Gán Dòng Tìm Tháy Vo Bién Dòng & Bien Cot Da Khai Báo:'
                  Dong = sRng.Row:                Cot = sRng.Column
                  MsgBox Dong, , Cot
               End If
'               Sh.Range(Tmp1).Resize(100).Copy Range(Tmp2)
'               Tmp = "": Tmp1 = "":               Tmp2 = ""
            End If
         Next Cls
      Next jJ
    End With
End With
End Sub

Bạn chạy macro & ghi lại tọa độ dòng & cột của các MsgBoxx xuất hiện;

Sau đó tra lại xem bên Trang 'TongHop' nó là những toạn độ nào

(Chú í các dòng lệnh đánh số từ 1 - 3' để đối chiếu)

Chờ tin bạn!

Vẫn chưa được bạn ạ. Tôi muốn kết quả như thông báo trong Msgbox và như trong Sheets Trinh. Tôi đã sửa lại file đính kèm, bạn xem giúp tôi nhé, tôi đang chờ trên máy. Thanks !

P/s: tôi nghĩ không cần If Cls.Value <> "" Then vì Cls In .Areas(jJ)(2, 11).Resize(, 52).SpecialCells(2) có nghĩa là Cls chỉ bao gồm các ô <> ""
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vẫn chưa được bạn ạ. Tôi muốn kết quả như thông báo trong Msgbox và như trong Sheets Trinh. Tôi đã sửa lại file đính kèm, bạn xem giúp tôi nhé, tôi đang chờ trên máy. Thanks !

P/s: tôi nghĩ không cần If Cls.Value <> "" Then vì Cls In .Areas(jJ)(2, 11).Resize(, 52).SpecialCells(2) có nghĩa là Cls chỉ bao gồm các ô <> ""

Hiễn nhiên là chưa được! Vì mình đã vô hiệu hóa các dòng lệnh của bạn sau khi hiện hộp thoại chỉ ra số dòng & cột của trang 'TongHop' rồi còn đâu;
Cái chủ yếu của cái macro mình đưa ra là chuẩn hóa vấn đề tìm kiếm thôi

Xin hỏi bạn lần này, chắc là lần cuối hay gần cuối:
Trong macro sau:

PHP:
Option Explicit
Sub ShTrinh()
' On Error Resume Next'
Dim Sh As Worksheet, Cls As Range, sRng As Range, Rng As Range
Dim Dong As Long, Cot As Byte, jJ As Byte
Dim Tmp1 As String, Tmp2 As String, Tmp As String

With Application
   .DisplayAlerts = False
   .ScreenUpdating = False:              Sheets("Trinh").Select
   Set Sh = Sheets("TongHop")
'    [a10:BL10000].Clear
   [D9:BL9] = "  "
   Sh.[c11:l10000].Copy [c11]
   With Sh.Range("c10:c10000").SpecialCells(2)
      'C11, C25 & C41 '
      For jJ = 1 To .Areas.Count '3'
1        'M12:S12: Rong'
2        'M26:S26 LUC, LUK & NHK'
3        'M42:S42 LUC, LUK & NHK'
         For Each Cls In .Areas(jJ)(2, 11).Resize(, 52).SpecialCells(2)
               Set Rng = Sh.Range(Sh.[M8], Sh.[BL8]) 'Dong =8'
               Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
               If Not sRng Is Nothing Then
                  Cot = sRng.Column
                  MsgBox jJ & " " & Cls.Value, , Cot & " " & sRng.Value
               End If
9 '               Sh.Range(Tmp1).Resize(100).Copy Range(Tmp2)
            
         Next Cls
      Next jJ
    End With
End With
End Sub

Câu lệnh 9 là bạn muốn chép từ cột có ô tìm thấy (bằng fương thức tìm kiếm) sang trang 'Trinh' Nhưng bạn cần chép nó đến chổ nào?
Có fảii cần chép dươi ô Cls 1 ô trở đi hay không?
Nếu đúng vậy thì câu lệnh fải là:
PHP:
  sRng.Offset(1).Resize(100). Copy Destination:=Cls.Offset(1)

Nếu không fải thì bạn muốn chép như thế nào?!

Chờ tin!
 
Upvote 0
Hiễn nhiên là chưa được! Vì mình đã vô hiệu hóa các dòng lệnh của bạn sau khi hiện hộp thoại chỉ ra số dòng & cột của trang 'TongHop' rồi còn đâu;
Cái chủ yếu của cái macro mình đưa ra là chuẩn hóa vấn đề tìm kiếm thôi

Câu lệnh 9 là bạn muốn chép từ cột có ô tìm thấy (bằng fương thức tìm kiếm) sang trang 'Trinh' Nhưng bạn cần chép nó đến chổ nào?
Có fảii cần chép dươi ô Cls 1 ô trở đi hay không?
Nếu đúng vậy thì câu lệnh fải là:
PHP:
  sRng.Offset(1).Resize(100). Copy Destination:=Cls.Offset(1)

Nếu không fải thì bạn muốn chép như thế nào?!

Chờ tin!

Cảm ơn Bác HYen và Bác ChanhTQ@ ! từ sự giúp đỡ của 2 bác em đã làm được rồi. Còn về vùng Copy đúng như bác nói, tức là chỉ cần Copy từ dưới Cls 1 ô trở đi nhưng để kiểm tra tên cột nên em tạm lấy cả Cls bác ạ.

P/s Qua 2 bài trên em thấy hình như 2 bác là một, nếu đúng thì cho em xin lỗi bác ChanhTQ@ nha (vì từ trước tới giờ em vẫn nghĩ là “bạn” ChanhTQ@ còn rất trẻ nên mới xưng hô như vậy).
 
Upvote 0
1) Cho dãy: Ai=cos(2*i)*100 , với i=1,2,...100
Tìm hiệu của số dương min và số âm max
2)Tìm min của n sao cho:
1+1/căn 2 + 1/căn 3 +1/căn n >108
Hic mình ngu quá ko có mẫu là chịu chết chả biết làm thế nào cả
Ai có tài liệu cơ bản ko gửi cho mình đọc với , tiếng việt hay tiếng anh cũng đc

Ai làm ơn giúp mình với
 
Upvote 0
Hai macro của bạn đây, xin mời. Hãy động não hơn ở những lần sau

PHP:
Option Explicit
Sub CosN()
 Dim jJ As Byte, MinD As Double, MaxA As Double, Num As Double
 MinD = 101:           MaxA = -101
 For jJ = 1 To 100
   Num = 100 * Cos(2 * jJ)
   If Num < 0 Then
      If MaxA < Num Then MaxA = Num
   Else
      If Num < MinD Then MinD = Num
   End If
 Next jJ
 [L1].Value = MinD:      [L2].Value = MaxA
 [L4].Value = MinD - MaxA
End Sub

PHP:
Sub CanN()
 Dim jJ As Integer, Tong As Double
 For jJ = 1 To 9999
   Tong = Tong + 1 / (jJ) ^ (1 / 2)
   If Tong > 108 Then Exit For
 Next jJ
 MsgBox Tong, , jJ
End Sub
 
Upvote 0
Nhờ anh em giải mã giúp mình với, cảm ơn nhiều ah.

Mình có 1 file *.txt trong đó là 1 đoạn mã.
Mình muốn giải mã file txt đó và đưa vào excel luôn.
Anh em giúp hộ mình nha, mình cảm ơn nhiều.
 

File đính kèm

Upvote 0
Mình chỉ có thể cung cấp cho bạn giải pháp để thực hiện việc giải mã này theo các bước sau:

1. Bạn link hoặc import dữ liệu vào excel, các cột được chia theo tiêu chí khoảng trắng " "
2. Xóa những dòng ghi chú (ví dụ dòng 1 đến dòng 3)
3. Viết Code để tập hợp thành bảng tính mới bao gồm 6 cột (Mã số trạm, Loại chỉ số, Ngày, Giờ, Chỉ số mực nước, chỉ số lượng mưa)
Các cột sẽ được định nghĩa điều kiện khi chạy code như sau:
- Mã số trạm: bao gồm 5 ký tự và bắt đầu bằng 7
- Loại chỉ số: bao gồm 2 ký tự
- Ngày: trích 2 ký tự đầu trong ngày giờ (ban đầu là 4 ký tự)
- Giờ: trích 2 ký tự đuôi trong ngày giờ (ban đầu là 4 ký tự)
- Chỉ số mực nước: bao gồm 5 ký tự (ký tự đầu khác 7, nhóm 22)
- Chỉ số lượng mưa: bao gồm 5 ký tự (ký tự đầu khác 7, nhóm 44)

Mỗi dòng dữ liệu sẽ được ghi ở dòng mới
Sau đó, dùng công thức excel để điền vào bảng tính của bạn.

Chúc bạn thành công!
 
Upvote 0
With Range([I65536].End(xlUp).Offset(, 62), [BK65536].End(xlUp).Offset(1))
.FormulaR1C1 = "=vlookup(RC[-1],'PLNN636'!c1:c2,5,0)"
.Value = .Value
End With
Nhờ các bác giải thích giùm em cái code này. Em dùng nó để vlookup trong VBA nhưng toàn báo lỗi vì em vẫn chưa hiểu rõ về mấy tham số sau
With Range([I65536].End(xlUp).Offset(, 62), [BK65536].End(xlUp).Offset(1))
FormulaR1C1 = "=vlookup(RC[-1],'PLNN636'!c1:c2,5,0)"
Nhờ các bác giải thích cặn kẽ giùm em với,
 
Upvote 0
PHP:
Option Explicit
Sub CosN()
 Dim jJ As Byte, MinD As Double, MaxA As Double, Num As Double
 MinD = 101:           MaxA = -101
 For jJ = 1 To 100
   Num = 100 * Cos(2 * jJ)
   If Num < 0 Then
      If MaxA < Num Then MaxA = Num
   Else
      If Num < MinD Then MinD = Num
   End If
 Next jJ
 [L1].Value = MinD:      [L2].Value = MaxA
 [L4].Value = MinD - MaxA
End Sub
PHP:
Sub CanN()
 Dim jJ As Integer, Tong As Double
 For jJ = 1 To 9999
   Tong = Tong + 1 / (jJ) ^ (1 / 2)
   If Tong > 108 Then Exit For
 Next jJ
 MsgBox Tong, , jJ
End Sub
Câu 2 em nghĩ dùng Do.. Loop sẽ hợp lý hơn (vì làm sao sư phụ biết chắc số n cần tìm sẽ <10000)
PHP:
Sub Test()
  Dim n As Long, Tong As Double
  Do
    n = n + 1
    Tong = Tong + 1 / Sqr(n)
  Loop Until Tong > 107
  MsgBox n
End Sub
Kết quả n= 2941
 
Upvote 0
Mã:
With Range([I65536].End(xlUp).Offset(, 62), [BK65536].End(xlUp).Offset(1))
 1   .FormulaR1C1 = "=vlookup(RC[-1],'PLNN636'!c1:c2,5,0)"
 2   .Value = .Value
  End With

vì em vẫn chưa hiểu rõ về mấy tham số sau; Nhờ các bác giải thích cặn kẽ giùm em với,

Range([I65536].End(xlUp) : Sẽ đến ô cuối cùng của cột I có chứa dữ liệu;
Range([I65536].End(xlUp).Offset(, 62) Từ ô I cuối cùng đó ta tính sang fải 62 cột ta sẽ đến ô thứ nhất của 1 vùng; (Hay còn gọi ô đầu tiên của vùng)
Ô cuối của vùng sẽ là Ô cuối cùng có dữ liệu của cột 'BK'
(Nói thêm: Cột mang ký tự z sẽ là cột thứ 26; & cột Az sẽ là cột thứ 52 kể từ trái; vậy nhẩm ra cột BK sẽ 52+11
Nếu từ cột I đếm sang fải 52 cột ta sẽ đến BI. . . . (Nếu cộng 10 nũa ta sẽ biết mã cột của ô đầu của vùng))

Nhưng theo mình 2 dòng lệnh có số 1 & số 2 có thể thay bằng

Application.WorksheetFunction.. . . . thì khoẻ hơn.

Xài cái RC hơi trừu tượng!
 
Upvote 0
Mình có 1 file *.txt trong đó là 1 đoạn mã.
Mình muốn giải mã file txt đó và đưa vào excel luôn.
Anh em giúp hộ mình nha, mình cảm ơn nhiều.
Xem file Excel của bạn tôi không biết dữ liệu lấy được từ file *.txt sẽ được nhập vào đâu.
Tạm thời tôi tạo một thủ tục để lấy dữ liệu từ file *.txt. Từ code này bạn có thể triển khai tiếp theo nhu cầu của bạn.
PHP:
Sub ImportData()
Application.ScreenUpdating = False
Dim TextLine As String, ArrayLine
With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False
    .Show
On Error GoTo NoFileSelect
    Open .SelectedItems(1) For Input As #1
On Error GoTo 0
End With
Do While Not EOF(1)
    Line Input #1, TextLine
    If Trim(TextLine) <> "" Then
    ArrayLine = Split(Trim(TextLine), " ")
    [A65536].End(xlUp).Offset(1).Resize(, UBound(ArrayLine) + 1).Value = ArrayLine
    End If
Loop
Close #1
NoFileSelect:
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Nhờ các bác sưa lại đoạn code này giúp em với . Em đang cần gấp

Em kính mong các bác giải quyết nốt vấn đề này hộ em. Tai em ngu muội quá em nghĩ không ra. Tức là tại đoạn code nay em muốn tìm thấy 2 lần trở lên thì tiếp tục còn không thì dừng lại.

Dim Rng2 As Range, sRng2o As Range, StrC2 As String, StrC2o As String, Dem As Integer, FirstAddress As String

Set Rng2 = vong1.Cells(6, Dem).Resize(, Col)
StrC2 = Cells(5, i) & Cells(5, j)
StrC2o = Cells(5, j) & Cells(5, i)
Set sRng2 = Rng2.Find(StrC2, , xlFormulas, xlPart)
Set sRng2o = Rng2.Find(StrC2o, , xlFormulas, xlPart)
If Not sRng2 Is Nothing And Not sRng2o Is Nothing And StrC2 <> StrC2o Then

Câu lệnh này nó chỉ cho phép tìm thấy thôi. Chứ chẳng bít bao nhiêu lần cả. hic. Cưu em với các bác ơi. Toàn bộ nội dung trong tệp tin đính kèm đó

Điều kiện bài ra là: tại bảng chính. Ghép lần lượt các con số với nhau tại dòng 2 bảng chính thành số có 2 chữ số sau đó so sánh với dòng 3 bảng phu.
Nếu dòng 3 bảng phụ ko tồn tại số đó thì lấy tại cột bảng chính dòng 3 con số tiếp theo ghép với nhau và so sánh với dòng 4 bảng phụ
Nếu có thì tiếp tục.
Cho đến dòng 5 bảng chính lại ghép với nhau và so sánh với dòng 4 bảng phụ.
Nếu có thì làm thêm cái điều kiện là phải xuất hiện từ 2 lần trở lên thì mới chạy tiếp
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Văn với chẳng vẽ

Nếu (1) dòng 2 bảng phụ ko tồn tại số đó thì lấy tại (2) cột (?) bảng chính dòng 3 con số tiếp theo ghép với nhau và so sánh với dòng 4 bảng chính

(1) Dòng 2 của bảng fụ đang trống trơn, chả có xíu dữ liệu nào, thì sao mà có tồn tại số nào.
(Có fải số 3 mà bạn viết sai thành số 2 không vậy? Ông bà mình nói sai con tính bán con trâu đó nha!)

(2) Cột nào của dòng 3 bảng chính đây hở bạn?

Phải viết để người khác hiểu, chứ không fải viết những cái mình hiểu!​
 
Upvote 0
Em thật sự xin lỗi vì sự giải thích rắm rối của em làm mọi người không hiểu được. Nay em tải lại file. Và đã nói rõ trong file. Xin các anh các chị giúp cho em. Em xin chân thành cảm ơn. Mong mỏi chờ tin hồi âm của các anh các chị
 

File đính kèm

Upvote 0
Ai giúp tôi dịch ra tiếng Việt các câu sau với

- Tớ đưa lại bàng này nhé:
Ví dụ: tại cột BS và cột CD tại bảng chính ghép được các con số sau:
- Con thứ nhất là : + 23, 32 đem so sánh với dòng 3 bảng phụ không tìm được con nào cả thì tiếp tục chạy code
- Con thứ là : 53, 35 so sánh với dòng 4 bảng phụ thì thấy có 35 chạy tiếp code.
- Con thứ là: 23, 32 so sánh với dòng 5 tại bảng phụ thì thấy có 32 chạy tiếp code
- Con thứ tiếp là 48,84 nếu mà tìm thấy có cả 48 và 84 nhưng trong đó 48 hoặc 84 có tại dòng 6 bảng phụ thì hiện lên số tiêp là: 06
1./ Cột BS & CD là cột nào vậy ta, ở bảng chính?
2./ Tại sao số 23 được đánh dấu '+' mà số 32 thì không có dấu ấy?
3./ Mà tại sao chủ có 2 số ấy thôi?

Mất thời gian của nhau quá đi mất!
 
Upvote 0
thật ra là em lấy ví dụ là tại hai cột đó ghép với nhau thôi. Anh có thấy em đánh dấu màu vàng không?
Chứ nếu mà ghép thì nhiều lắm cả ngàn con số cơ.
em xin trả lời:
- 2 cột BS và cột CD là 2 cột em có đánh dấu làm ví dụ ở sheet : chính đó
- dấu (+) là em đánh nhầm vào thôi, không có gì liên quan cả
- Em chỉ lấy ví dụ là 2 cột đó thôi, tại nhiều quá dùng mắt thường mà ghép chắc đến sang năm quá bác ah
 
Upvote 0
Chờ xem bóng đá định viết code giùm bạn nhưng thực sự mình chả hiểu gì cả
Bạn nên dành ra thời gian viết bài mô tả quá trình bạn phải làm thế nào, cứ cho là bạn phải làm bằng tay đi. Bắt đầu từ đâu, nếu thấy thì làm gì và không thấy làm gì. Có như vậy mọi người mới giúp bạn được. Mình thấy nhiều anh em kỳ cựu đã có ý kiến với bài của bạn nhưng chắc họ cũng rơi vào tình trạng như mình.
 
Lần chỉnh sửa cuối:
Upvote 0
Tự nhiên thấy ngứa nghề fiên dịch. khà, khà,. . .

Đây là những gì sau 1 thời gian dài suy ngẫm & đoán già, đoán non:

(*) Hiện tại bên 'Chinh' có 5 dòng, trị các ô điều là 1 kí số;
Ta hãy ghép lần lượt 2 ô làm 1 (& hoán đổi vị trí cho nhau nữa) để được cơ man nào là số có 2 chữ số;
Ví dụ: Trong dẫy
|A|B|C|D|E|. . .
2 |6|9|8|0|0|5
Đầu tiên ta sẽ có 69, rồi 96; 68, 86; 60, 06,. . .

(*) Đem lần lượt các số ghép này đối chiếu với từng hàng của vùng dữ liệu tại 'Phu' (Là các ô chứa 2 ký số trong nó)
Nếu tìm thấy trùng 2 lần thì dừng & báo kết quà; Còn không vậy thì cứ tiếp. . . Mệt nghỉ!

(Đây là bản dịch cho người có quốc tịch ngoài Việt nam & quan trọng là cấm cười, khì, khì,. . . )
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Đúng rồi bạn HYến ah. Có tất cả các bước sau:
-B1: lấy tất cả các kí số tại dòng 2 bảng "chính" ghép lại với nhau ( có hoán đổi vị trí) rồi đem so sánh với dòng 3 bảng "phụ".
-B2: lấy tất cả các kí số tại dòng 3 bảng "chính" ghép lại với nhau ( có hoán đổi vị trí) rồi đem so sánh với dòng 4 bảng "phụ".
-B3: lấy tất cả các kí số tại dòng 4 bảng "chính" ghép lại với nhau ( có hoán đổi vị trí) rồi đem so sánh với dòng 5 bảng "phụ".
-B4: lấy tất cả các kí số tại dòng 5 bảng "chính" ghép lại với nhau ( có hoán đổi vị trí) rồi đem so sánh với dòng 6 bảng "phụ".
-B5: Nếu đạt được đủ ĐK thì hiện lên kết quả tại ô "AN15" bảng phụ

Điều kiện của các bước là:
-B1: Tất cả những số ghép với nhau tại dòng 2 bảng "chính"không có trong dòng 3 bảng phụ thì chạy tiếp đến bước 2
-B2: Tất cả những số ghép với nhau tại dòng 3 bảng "chính" trong dòng 4 bảng phụ thì chạy tiếp đến bước 3
-B3: Tất cả những số ghép với nhau tại dòng 4 bảng "chính" trong dòng 5 bảng phụ thì chạy tiếp đến bước 4
-B4: Tất cả những số ghép với nhau tại dòng 5 bảng "chính" trong dòng 6 bảng phụ thì chạy tiếp đến bước 5
-B5: những số ghép với nhau tại dòng 6 bảng "chính" Nếu đạt đủ điều kiện thì hiện kết quả lên ô "AN 15" tại bảng phụ

Tất cả các bước trừ B4 ra thì em đã làm xong. chỉ còn tại bước 4 em muốn thêm 1 diều kiện nữa vào là nếu các số ghép nay mà tìm thấy có 2 lần xuất hiện thì mới chậy đến B5.

Em ngu văn dốt học nên có gì thì các anh chị cứ thẳng tay chỉ bảo. Em chân thành cám ơn
 
Upvote 0
Mình tìm ra (2836-13) kết quả ngay tại bước 1 rồi

Xin xem bảng trích kết quả như sau:

Chinh|Chinh|Fu
$A$2|$B$2|$F$3
$A$2|$F$3|$F$3
$A$2|$AD$2|$F$3
$A$2|$AE$2|$F$3
$A$2|$BL$2|$F$3
$A$2|$BQ$2|$F$3
$A$2|$CB$2|$F$3
$A$2|$CP$2|$F$3
$A$2|$CQ$2|$F$3
$A$2|$CR$2|$F$3

Macro trong file đính kèm:
 

File đính kèm

Upvote 0
Vẫn còn vấn đề cần rõ hơn:
-Điều kiện 1 ngược với 4 điều kiện sau?
-Trong các điều kiện thoả mãn thì thực hiện như bạn giải trình. Ngược lại thì làm gì (Thoát ra, Thông báo, Điền vào ô nào đó....) ?
 
Upvote 0
Vẫn còn vấn đề cần rõ hơn:
-Điều kiện 1 ngược với 4 điều kiện sau?
-Trong các điều kiện thoả mãn thì thực hiện như bạn giải trình. Ngược lại thì làm gì (Thoát ra, Thông báo, Điền vào ô nào đó....) ?

- Đúng là diều kiện tại bước 1 ngược với 4 diều kiện sau đó. Bởi nó phải chạy từng phần một. Và mỗi phần đều có điều kiện khác nhau. (chỉ có B2,B3 là có điều kiện giống nhau mà thôi).
- và thêm 1 điều kiện tại bước 4.
- nếu thoả mãn các điều kiện thì điền kết quả là các số ghép tìm được vào ô "BS 15" của bảng phụ. Còn không thì để rỗng
 
Lần chỉnh sửa cuối:
Upvote 0
Từ từ xong bước I cái đã, các bạn!

Bạn khẳng định rằng:
-B1: Tất cả những số ghép với nhau tại dòng 2 bảng "chính" mà không có trong dòng 3 bảng phụ thì chạy tiếp đến bước 2

Nhưng mình thấy là ; Vậy tác giả topic đã kiểm kết quả mình đưa ra chưa?

Hãy khẳng định xem ai sai thì mới tiếp bước (2) được!

Chờ tin tác giả. --=0 --=0
 
Upvote 0
Khi ghép tất cả các ô tại dòng 2 lại với nhau thì tất nhiên là có rồi. Nhưng điều kiện là lấy nhũng ô khi ghép lại với nhau mà đem so sánh với dòng 3 bảng phụ mà không có kia.
 
Upvote 0
Em cũng ghi rõ đièu kiện ở bên trên của từng bước rồi mà hicc. Tại em dốt quá không biết phải trình bày thế nào cho rõ ràng được cả hic +-+-+-++-+-+-++-+-+-++-+-+-+
 
Upvote 0
Mình lại tưởng cách ghép kiểu này chứ:

ghép ô A2 với B2 ta được 69; thì con số này đang chình ình ở F3 bảng fụ đó thôi?!

& đây nữa: B2 ghép với h2 của bảng chính ta có 94 thì G3 ở bảng kia có 49 đó thay

Hay ghép theo kiểu nào khác vậy?

@!## @!##
 
Upvote 0
Đúng là ghép kiểu đó: nhưng nếu những con số nào ghép mà có thì loại đi:
Nhờ anh thử kiểm tra lại tại cột. BS và CD bảng chính thì biêts nhe: ( em chỉ lấy ví dụ là 2 cột này thôi, chứ thật ra thì có vô số cột phù hợp với điều kiện chạy đầu tiên này)
ghép tại dòng 2 ta được các số: 23,32 đem 2 số này so sánh với dòng 3 bảng phu. thì không thấy có. phù hợp diều kiện với bước 1. vậy là xong bước 1. chạy tiếp đến bước 2
ghép tại dòng 3 ta được các số: 53,35 đem 2 số này so sánh với dòng 4 bảng phu. thì thấy có : 35 . phù hợp diều kiện với bước21. vậy là xong bước 2. chạy tiếp đến bước 3.....
Thế nên em mới phải dùng vòng for để hoán vị tất cả và đem tất cả các số đó mà so sánh.
 
Upvote 0
Tôi muốn hỏi chỗ này:
Con thứ tiếp là 48,84 nếu mà tìm thấy có cả 48 và 84 nhưng trong đó 48 hoặc 84 có tại dòng 6 bảng phụ thì hiện lên số tiêp là: 06
1. Nếu chỉ tìm thấy 1 trong 2 số 48 và 84 trong dòng 6 bảng phụ thì có tiếp đến bước 5 không?
2. Tại sao điền vào kết quả là 60 mà là 06. Chỗ này có quy tắc gì không?
 
Upvote 0
Tôi muốn hỏi chỗ này:

1. Nếu chỉ tìm thấy 1 trong 2 số 48 và 84 trong dòng 6 bảng phụ thì có tiếp đến bước 5 không?
2. Tại sao điền vào kết quả là 60 mà là 06. Chỗ này có quy tắc gì không?
- Chính vì nó vẫn tiếp tục chạy bước 5 nên em muốn thêm điều kiện. là phả tìm thấy cả 2 số. và ít nhất một trong 2 số đó có xuất hiện từ 2 lần trở lên thì mới tiếp tục bước 5.
- Chỗ diền kết quả là con 60 hay con 06 không quan trong lắm.
Em chân thành cám ơn sự quan tâm của mọi người
 
Upvote 0
- Chính vì nó vẫn tiếp tục chạy bước 5 nên em muốn thêm điều kiện. là phả tìm thấy cả 2 số. và ít nhất một trong 2 số đó có xuất hiện từ 2 lần trở lên thì mới tiếp tục bước 5.
- Chỗ diền kết quả là con 60 hay con 06 không quan trong lắm.
Em chân thành cám ơn sự quan tâm của mọi người
Kết quả của tôi khác với kết quả mẫu của bạn. Một số kết quả của bạn tôi không biết từ đâu mà có.
Bạn chạy code và so sánh kết quả với kết quả của bạn. Chỉ ra vị trí các cột cho kết quả 93, 23, 05,... trong kết quả mẫu của bạn.
PHP:
Sub Test()
Dim Phu1 As String, Phu2 As String, Phu3 As String, Phu4 As String, Str As String
Dim Arr As Variant
Dim i As Long, ii As Long
Dim Rng As Range
Set Rng = Range(Sheets("Phu").[B3], Sheets("Phu").[IV3].End(xlToLeft).Offset(, 1))
With Application.WorksheetFunction
    Phu1 = Join(.Transpose(.Transpose(Rng)), " ")
    Phu2 = Join(.Transpose(.Transpose(Rng.Offset(1))), " ")
    Phu3 = Join(.Transpose(.Transpose(Rng.Offset(2))), " ")
    Phu4 = Join(.Transpose(.Transpose(Rng.Offset(3))), " ")
End With
Set Rng = Nothing
Arr = Range(Sheets("Chinh").[A2], Sheets("Chinh").[IV6].End(xlToLeft)).Value
For i = 1 To Sheets("Chinh").[IV2].End(xlToLeft).Column
    For ii = i + 1 To Sheets("Chinh").[IV2].End(xlToLeft).Column
        If InStr(Phu1, " " & Arr(1, i) & Arr(1, ii) & " ") + InStr(Phu1, " " & Arr(1, ii) & Arr(1, i) & " ") > 0 Then GoTo NextN
        If InStr(Phu2, " " & Arr(2, i) & Arr(2, ii) & " ") + InStr(Phu2, " " & Arr(2, ii) & Arr(2, i) & " ") = 0 Then GoTo NextN
        If InStr(Phu3, " " & Arr(3, i) & Arr(3, ii) & " ") + InStr(Phu3, " " & Arr(3, ii) & Arr(3, i) & " ") = 0 Then GoTo NextN
        If InStr(Phu4, " " & Arr(4, i) & Arr(4, ii) & " ") * InStr(Phu4, " " & Arr(4, ii) & Arr(4, i) & " ") = 0 Then GoTo NextN
        If InStr(InStr(Phu4, " " & Arr(4, i) & Arr(4, ii) & " ") + 1, Phu4, " " & Arr(4, i) & Arr(4, ii) & " ") + InStr(InStr(Phu4, " " & Arr(4, ii) & Arr(4, i) & " ") + 1, Phu4, " " & Arr(4, ii) & Arr(4, i) & " ") = 0 Then GoTo NextN
        Str = Str & Arr(5, i) & Arr(5, ii) & " "
NextN:
    Next
Next
Sheets("Phu").[AN16].Value = Replace(Trim(Str), " ", ", ")
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hỏi Code xóa sheet đang active

Cho mình hỏi, mình viết đoạn code sau:

Sub Xoasheet()
ActiveWindow.ActiveSheets.Delete
Menu.Show
End Sub

Mục đích của mình là khi Click vào button của sheet đó, thì thực hiện lệnh xóa Sheet đó và hiện Form menu. Nhưng khi mình Click vào thì Form Menu hiện lên, nhưng Sheet đó vẫn không xóa. Vậy mình phải sửa lại chổ nào.
 
Lần chỉnh sửa cuối:
Upvote 0
Cho mình hỏi, mình viết đoạn code sau:

Sub Xoasheet()
ActiveWindow.ActiveSheets.Delete
Menu.Show
End Sub

Mục đích của mình là khi Click vào button của sheet đó, thì thực hiện lệnh xóa Sheet đó và hiện Form menu. Nhưng khi mình Click vào thì Form Menu hiện lên, nhưng Sheet đó vẫn không xóa. Vậy mình phải sửa lại chổ nào.
Nếu không có bẫy lỗi thì code của bạn bị lỗi chứ làm gì hiện UserForm được. Bạn sửa lại như thế này.
PHP:
Sub Button1_Click()
Application.DisplayAlerts = False
ActiveWindow.ActiveSheet.Delete
Menu.Show
Application.DisplayAlerts = True
End Sub
Nhưng tôi vẫn thấy kỳ kỳ. Xóa sheet hiện hành thì Button cũng bị xóa luôn. Lần sau lấy cái gì mà Click đây.
 
Upvote 0
Nếu không có bẫy lỗi thì code của bạn bị lỗi chứ làm gì hiện UserForm được. Bạn sửa lại như thế này.
PHP:
Sub Button1_Click()
Application.DisplayAlerts = False
ActiveWindow.ActiveSheet.Delete
Menu.Show
Application.DisplayAlerts = True
End Sub
Nhưng tôi vẫn thấy kỳ kỳ. Xóa sheet hiện hành thì Button cũng bị xóa luôn. Lần sau lấy cái gì mà Click đây.
Cảm ơn huuthang, tại vì sheet này là khi thực hiện một lệnh nó mới tạo ra sheet tạm thời này để xem dữ liệu, và tạo luôn các button này. Do vậy khi xem xong mình trở về Form menu đồng thời xóa luôn sheet này.
 
Upvote 0
Cái sai của bạn nằm ở đây

ActiveWindow.ActiveSheets.Delete

Bạn sửa thành:

ActiveSheet.Delete

Chạy vô tư trừ khi nó là Sheet cuối cùng
 
Upvote 0
Đoạn code này sai chỗ nào?xin chỉ giúp!!

Mình muốn chọn dữ liệu từ Ô Ai đến Ô A20 nhưng dòng "Range ("A & i : A20").select " không có tác dụng, mong người người xem giúp.
dim i
i = Range("A1").value
Range ("A & i : A20").select
 
Upvote 0
Sao bạn không dùng Range("Ai1:A20").Select
 
Upvote 0
Bạn bị lỗi cú pháp thôi.

Dim i
I = Range("A1").Value
' Thêm câu lệnh xử lý điều kiện để tránh gây lỗi
If i > 0 Then Sheet1.Range("A" & i & ":A20").Select
 
Upvote 0
Upvote 0
Để học code từ căn bản để có thể sử dụng thành thạo như các Pro thì học từ đâu!?
 
Upvote 0
Thế thì hay quá, xin hỏi tiếp là bắt đầu học cái gì để có thể viết code. Ý là người mới toanh đó...
Thankyou!
Kiến thức cơ bản về Visual Basic for Applications (VBA)
Chập chững đến với VBA
2 bài này thôi là học mệt luôn rồi ---> Ngoài ra có thể mua sách do GPE xuất bản
Kinh nghiệm bản thân:
- Hỏi nhiều
- Làm nhiều
- Liên tục cải tiến và không bao giờ hài lòng với những cái đã làm
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn nhiều nhé. Nhưng liệu cách tổ chức bài viết có giúp mình nắm bắt được không? Thử xem sao

À, đọc cái nào mà có thể nắm bắt cơ bản sau đó tự ngâm cứu tiếp ! Giống như 1 tuổi biết đi rồi nó tự đi và sau đó nó chạy được ấy. Hy vọng là bài trên sẽ giải quyết!
Thank nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Ý nghĩa dòng code

Chào cả nhà GPE!
Em xin hỏi dòng code này có nghĩa là gì?
PHP:
iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Xin anh/chị giải thích kỹ dùm em nhé!
 
Upvote 0
Em xin hỏi dòng code này có nghĩa là gì?
PHP:
iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Xin anh/chị giải thích kỹ dùm em nhé!

(1)
Mã:
iRow = ws.Cells([COLOR="Red"]Rows.Count[/COLOR], 1).End(xlUp).Offset(1, 0).Row
Rows.Count := Số dòng có trên trang tính của ta;
(2)
Mã:
 iRow = ws.[COLOR="Red"]Cells(Rows.Count, 1)[/COLOR].End(xlUp).Offset(1, 0).Row
Cells(Rows.Count,1) := Ô cuối cùng của cột đầu (cột 'A')
(3)
Mã:
 iRow = ws.[COLOR="Red"]Cells(Rows.Count, 1).End(xlUp)[/COLOR].Offset(1, 0).Row
Nghĩa là từ ô cuối cột 'A' ta bấm giữ fím {CTRL} & bấm cùng nó fím mũi tên lên. Lúc đó ta sẽ đến ô cuối cùng của cột 'A' có chứa dữ liệu
(4) Fương thức Offset(1,0) cũng tương tự như ta bấm fím mũi tên xuống để chọn được ô cùng cột ('A') dòng dưới liền kề;

(5) F ương thức Row cuối dòng lênh sẽ cho ta biết số hiệu dòng mà ta vừa tới;

(6) Lấy số hiệu dòng này gán vô biến đã được đặt tên là iRow;

Có những dòng lệnh sau:

iRow = ws.Cells(65535, 1).End(xlUp).Offset(1, 0).Row

iRow = ws.[A65535].End(xlUp).Offset(1, 0).Row

cũng là cùng họ;

Còn ws hẵn là 1 biến đối tượng đã được tác gia khai báo để tiện gán cho trang tính đang được lệnh này tác động.

Mong giúp được bạn ít nhiều!
 
Upvote 0
Anh SA_DQ ơi, nhân tiện em có ví dụ muốn nhờ anh xem luôn dùm cho em nhe!
User: abc
Pass: 1234
 

File đính kèm

Upvote 0
Đây là code em viết:
Mã:
Private Sub CommandButton1_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("DATA")
iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
  If Trim(Me.TextBox2.Value) = "" Then
  Me.TextBox2.SetFocus
  MsgBox "Ma nhan vien khong duoc de trong ", vbCritical + vbOKOnly
  Exit Sub
End If
ws.Cells(iRow, 1).Value = Me.TextBox1.Value
ws.Cells(iRow, 2).Value = Me.TextBox2.Value
ws.Cells(iRow, 3).Value = Me.TextBox3.Value
ws.Cells(iRow, 4).Value = Me.TextBox4.Value
ws.Cells(iRow, 5).Value = Format(Me.TextBox5.Value, "DD/MM/YYYY")
ws.Cells(iRow, 6).Value = Me.TextBox6.Value
ws.Cells(iRow, 7).Value = Me.TextBox7.Value
ws.Cells(iRow, 8).Value = Format(Me.TextBox8.Value, "DD/MM/YYYY")
ws.Cells(iRow, 9).Value = Me.TextBox9.Value
ws.Cells(iRow, 10).Value = Me.TextBox10.Value
ws.Cells(iRow, 11).Value = Me.TextBox11.Value
ws.Cells(iRow, 12).Value = Me.TextBox12.Value
ws.Cells(iRow, 13).Value = Me.TextBox13.Value
ws.Cells(iRow, 14).Value = Me.TextBox14.Value
ws.Cells(iRow, 15).Value = Format(Me.TextBox15.Value, "DD/MM/YYYY")
ws.Cells(iRow, 16).Value = Me.TextBox16.Value
ws.Cells(iRow, 17).Value = Format(Me.TextBox17.Value, "DD/MM/YYYY")
ws.Cells(iRow, 18).Value = Me.TextBox18.Value
ws.Cells(iRow, 19).Value = Me.TextBox19.Value
ws.Cells(iRow, 20).Value = Me.TextBox20.Value
ws.Cells(iRow, 21).Value = Me.TextBox21.Value
ws.Cells(iRow, 22).Value = Me.TextBox22.Value
ws.Cells(iRow, 23).Value = Me.TextBox23.Value
ws.Cells(iRow, 24).Value = Me.TextBox24.Value
ws.Cells(iRow, 25).Value = Me.TextBox25.Value
ws.Cells(iRow, 26).Value = Me.TextBox26.Value
ws.Cells(iRow, 27).Value = Format(Me.TextBox27.Value, "DD/MM/YYYY")
ws.Cells(iRow, 28).Value = Format(Me.TextBox28.Value, "DD/MM/YYYY")
ws.Cells(iRow, 29).Value = Format(Me.TextBox29.Value, "DD/MM/YYYY")
ws.Cells(iRow, 30).Value = Me.TextBox30.Value
Me.TextBox1.Value = ""
Me.TextBox2.Value = ""
Me.TextBox3.Value = ""
Me.TextBox4.Value = ""
Me.TextBox5.Value = ""
Me.TextBox6.Value = ""
Me.TextBox7.Value = ""
Me.TextBox8.Value = ""
Me.TextBox9.Value = ""
Me.TextBox10.Value = ""
Me.TextBox11.Value = ""
Me.TextBox12.Value = ""
Me.TextBox13.Value = ""
Me.TextBox14.Value = ""
Me.TextBox15.Value = ""
Me.TextBox16.Value = ""
Me.TextBox17.Value = ""
Me.TextBox18.Value = ""
Me.TextBox19.Value = ""
Me.TextBox20.Value = ""
Me.TextBox21.Value = ""
Me.TextBox22.Value = ""
Me.TextBox23.Value = ""
Me.TextBox24.Value = ""
Me.TextBox25.Value = ""
Me.TextBox26.Value = ""
Me.TextBox27.Value = ""
Me.TextBox28.Value = ""
Me.TextBox29.Value = ""
Me.TextBox30.Value = ""
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub TextBox5_AfterUpdate()
TextBox5 = Format(Me.TextBox5.Value, "DD/MM/YYYY")
End Sub
Private Sub TextBox8_AfterUpdate()
TextBox8 = Format(Me.TextBox8.Value, "DD/MM/YYYY")
End Sub
Private Sub TextBox15_AfterUpdate()
TextBox15 = Format(Me.TextBox15.Value, "DD/MM/YYYY")
End Sub
Private Sub TextBox17_AfterUpdate()
TextBox17 = Format(Me.TextBox17.Value, "DD/MM/YYYY")
End Sub
Private Sub TextBox27_AfterUpdate()
TextBox27 = Format(Me.TextBox27.Value, "DD/MM/YYYY")
End Sub
Private Sub TextBox28_AfterUpdate()
TextBox28 = Format(Me.TextBox28.Value, "DD/MM/YYYY")
End Sub
Private Sub TextBox29_AfterUpdate()
TextBox29 = Format(Me.TextBox29.Value, "DD/MM/YYYY")
End Sub
Anh xem dùm em nhé!
 
Upvote 0
Nó ghi vô dòng 22 là đúng rồi!

Vì dòng 21 đang có công thức & nếu xóa công thức trong [A21] thì nó sẽ ghi vô dòng 18 của trang tính.

Lỗi của chàng mà chàng lại đổ thừa cho macro; Tội nghiệp cho nó làm vậy! @!## @!## @!##
 
Upvote 0
Giải thích ý nghĩa code

Trong đoạn code sau, anh/chị giải thích dùm em ý nghĩa dòng code đánh in đậm nhé!
Mã:
Private Sub CommandButton1_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Data")
iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
  [B]If Trim(Me.ComboBox1.Value) = "" Then[/B]
[B]  Me.ComboBox1.SetFocus[/B]
  MsgBox "Ma vat lieu khong duoc de trong ", vbCritical + vbOKOnly
  Exit Sub
End If
With ws
.Cells(iRow, 1) = Me.TextBox1
.Cells(iRow, 2).Value = Format(Me.TextBox2.Value, "DD/MM/YYYY")
.Cells(iRow, 3) = Me.ComboBox1
.Cells(iRow, 4) = Me.TextBox4
.Cells(iRow, 5) = Me.TextBox5
.Cells(iRow, 6) = Me.TextBox6
.Cells(iRow, 7) = Val(Format(Me.TextBox7, "0"))
.Cells(iRow, 8 + IIf(Me.ComboBox2 = "PN", 0, 2)).Value = Val(Format(Me.TextBox8, "0"))
.Cells(iRow, 9 + IIf(Me.ComboBox2 = "PN", 0, 2)).Value = Val(Format(Me.TextBox9, "0"))
End With
[B]For j = 1 To 9[/B]
[B]If j = 3 Then[/B]
[B]ComboBox1 = ""[/B]
[B]Else[/B]
[B]Me.Controls("TextBox" & j) = ""[/B]
[B]End If[/B]
[B]Next[/B]
[B]Me.TextBox1.SetFocus[/B]
End Sub
Cám ơn anh/chị nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
Xin cám ơn Ptm0412concogia đã hướng dẫn ! Tôi làm được rồi
Cho hỏi thêm 1 câu nữa nhé !Thí dụ như hàm sum() có từ 1,2,3,.. đối số trở lên.
Ví dụ : Sum(A1,A2,A3) hoặc sum(A1:A3) hay là sum(A1:A3,A5,A7:B10) máy đều tính được và cho kết quả! Nếu như mình viết hàm như vậy trong VBA có được không ? Nếu được thì xin chỉ cách làm ! Xin cám ơn !
 
Lần chỉnh sửa cuối:
Upvote 0
Cho hỏi thêm 1 câu nữa nhé !Thí dụ như hàm sum() có từ 1,2,3,.. đối số trở lên.
Ví dụ : Sum(A1,A2,A3) hoặc sum(A1:A3) hay là sum(A1:A3,A5,A7:B10) máy đều tính được và cho kết quả! Nếu như mình viết hàm như vậy trong VBA có được không ? Nếu được thì xin chỉ cách làm ! Xin cám ơn !

Hoàn toàn được, bạn à;
Bạn khai báo 1 biến kiểu đối tượng & nhốt nối các ô đó vô biến bằng fương thức Union(); Ví dụ:
PHP:
 Dim Rng As Range

 Set Rng = Union("A1:A3",[A5],"A7:B10"); Bước cuối là tính tổng thôi.

Thân ái!
 
Lần chỉnh sửa cuối:
Upvote 0
Cách viết hàm chọn nhiều đối số, với các kiểu dữ liệu khác nhau !
Xin chỉ thêm chút nữa nhé !
Mình viết hàm tổng quát luôn, để sử dụng bất kỳ ô nào đó, với dữ liệu bất kỳ thì có được không ạ!
1). Viết hàm TrungBinhMon(mon1,mon2,mon3,....monk) mà cột các môn này không liên tục thì phải viết như thế nào?
Ví dụ =TrungBinhMon(A1,A2,A5:A7,B3:B7)
2). Mặt khác mình có cách nào đếm được số ô của nó không =TrungBinhMon(A1,A2,A5:A7,B3:B7) có 10 ô chẳng hạn !
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các mem giúp sửa đoạn code này

Tôi đang viết hàm riêng này mà không biết sai gì, khi chạy không ra kết quả. Các mem giúp tôi sửa với.
Private Function chieucaotrang(ByVal x As Integer) As Single
Dim n, d
Dim i, b, c As Integer
b = ActiveSheet.HPageBreaks(x).Location.Row
c = ActiveSheet.HPageBreaks(x + 1).Location.Row
For i = b To c
d = Rows(i).RowHeight
n = n + d
Next i
End Function
Cảm ơn trước.
 
Upvote 0
Bạn thử sửa như sau xem sao:

Mã:
Private Function chieucaotrang(ByVal x As Integer)
Dim A, B, I
A = 1
If x > 1 Then A = ActiveSheet.HPageBreaks(x - 1).Location.Row
B = ActiveSheet.HPageBreaks(x).Location.Row - 1
For I = A To B
chieucaotrang = chieucaotrang + ActiveSheet.Rows(I).RowHeight
Next I
End Function
 
Upvote 0
Giúp em giải lệnh vba

ace giai giup e bai nay trong access. e lam hoai khong dc
đề bài yêu cầu dùng hàm Docmd.applyfilter
dùng để lọc ký tự đầu tiên trong trường tendv
vd: Command lọc "c" thì các ký tự đầu tiên trong trường tendv chẳng hạn trong đề sẽ lọc ra "Cửa hàng số 01"
Command lọc "X" thì các ký tự đầu tiên trong trường tendv chẳng hạn trong đề sẽ lọc ra "Xí nghiệp 204"
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Code tự động kẻ khung

Nhờ các Bạn viết cho đoạn code tự động kẻ khung như sau:
- Dò tìm các ô trong sheet1 có dữ liệu tới đâu thì cộng thêm một dòng trống rồi kẻ khung tới đó.
- Ba dòng đầu (tiêu đề) không kẻ.
- Nét xung quanh và nét đứng là nét ttrung bình còn nét ngang là nét mờ.
 
Upvote 0
Nhờ các Bạn viết cho đoạn code tự động kẻ khung như sau:
- Dò tìm các ô trong sheet1 có dữ liệu tới đâu thì cộng thêm một dòng trống rồi kẻ khung tới đó.
- Ba dòng đầu (tiêu đề) không kẻ.
- Nét xung quanh và nét đứng là nét ttrung bình còn nét ngang là nét mờ.
Bạn có thể dùng CF để thực hiện điều này mà không cần dùng đến VBA
 
Upvote 0
Bạn có thể dùng CF để thực hiện điều này mà không cần dùng đến VBA
Bạn có thể nói cụ thể hơn không? Tôi ngốc lắm!. Ý tôi muốn là lồng đoạn code này vào trứơc khi kết thúc một macro khác mà.
Với lại câu:
Dò tìm các ô trong sheet1 có dữ liệu tới đâu thì cộng thêm một dòng trống rồi kẻ khung tới đó.
Sửa lại thành:
Dò tìm các ô trong sheet1, cột A đến cột F có dữ liệu tới đâu thì cộng thêm một dòng trống rồi kẻ khung tới đó.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể nói cụ thể hơn không? Tôi ngốc lắm!. Ý tôi muốn là lồng đoạn code này vào trứơc khi kết thúc một macro khác mà.
Với lại câu:
Dò tìm các ô trong sheet1 có dữ liệu tới đâu thì cộng thêm một dòng trống rồi kẻ khung tới đó.
Sửa lại thành:
Dò tìm các ô trong sheet1, cột A đến cột F có dữ liệu tới đâu thì cộng thêm một dòng trống rồi kẻ khung tới đó.
Bạn xem file đính kèm nhé (Dùng Conditional Formatting)
Hi vọng bạn tìm ra câu trả lời.
 

File đính kèm

Upvote 0
Giúp Sửa Code

Các Bạn Giúp Mình Sửa Code Này Với, Mình Mun Khi Bm Vào Nút “ThemDong” Thì Nó ChThêm M [FONT=&quot]ỗ[/FONT]i L [FONT=&quot]ầ[/FONT]n Bm Là1 Dòng Thôi.
Cảm ơn Các Bạn Nhiều
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Các Bạn Giúp Mình Sửa Code Này Với, Mình Mun Khi Bm Vào Nút “ThemDong” Thì Nó ChThêm 1 Dòng Thôi.
Cảm ơn Các Bạn Nhiều
Bạn record lại macro với động tác copy và insert copied cells, dừng record là được cái code đó.
 
Upvote 0
Các Bạn Giúp Mình Sửa Code Này Với, Mình Mun Khi Bm Vào Nút “ThemDong” Thì Nó ChThêm M [FONT=&quot]ỗ[/FONT]i L [FONT=&quot]ầ[/FONT]n Bm Là1 Dòng Thôi.
Cảm ơn Các Bạn Nhiều
Đối với những công việc như thế này, theo tôi bạn dùng chức năng Record Macro, làm thủ công một lần để lấy code gán vào nút lệnh là được.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
ace giai giup e bai nay. e lam hoai khong dc
đề bài yêu cầu dùng hàm Docmd.applyfilter
dùng để lọc ký tự đầu tiên trong trường tendv
vd: Command lọc "c" thì các ký tự đầu tiên trong trường tendv chẳng hạn trong đề sẽ lọc ra "Cửa hàng số 01"
Command lọc "X" thì các ký tự đầu tiên trong trường tendv chẳng hạn trong đề sẽ lọc ra "Xí nghiệp 204"

Bạn nhập Code cho nút lọc "C" như sau:

Mã:
Private Sub Command7_Click()
DoCmd.ApplyFilter , "tendv  like 'c*' "
End Sub
Tương tự cho nuts lọc "X"
 
Upvote 0
Chào cả nhà !!!!. Mình đang làm đề tài quản lý xếp lịch thời khóa biểu cho hệ trung cấp, mình có 1 trục trặc không giải quyết được cả nhà giúp mình nha. mình muốn tạo một command Button viết lệnh cho cột "D" của Sheet1 làm sao khi mình nhấp vào Button đó nếu như bất kỳ các cell nào trong cột "D" bị bỏ trống thì sẻ ẩn hàng tại cell bỏ trống đó ngay cả khi các ô khác có dữ liệu chỉ hiện các cell có giữ liệu. Cả nhà giúp mình nha!!. Thanks.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử với con này xem đúng ý chưa:

khi mình nhấp vào Button đó nếu như bất kỳ các cell nào trong cột "D" bị bỏ trống thì sẻ ẩn hàng tại cell bỏ trống đó chỉ hiện các cell có giữ liệu.

PHP:
Sub Macro1()    
  Columns("D:D").Select
  Selection.SpecialCells(xlCellTypeBlanks).Select
  Selection.EntireRow.Hidden = True
End Sub
 
Upvote 0
Thanks ChanhTQ@ nhưng mình làm không được nội dung trong cột D chỉ ẩn dòng đầu nhưng các dòng sau no ko ẩn được mình có gửi kem tập tin đó.
 

File đính kèm

Upvote 0
Thanks ChanhTQ@ nhưng mình làm không được nội dung trong cột D chỉ ẩn dòng đầu nhưng các dòng sau no ko ẩn được mình có gửi kem tập tin đó.
Vầy thử xem:
PHP:
Private Sub cmdRun_Click()
  Dim Rng As Range
  On Error Resume Next
  Set Rng = Range([A3], [A65536].End(xlUp))
  With cmdRun
    Rng.SpecialCells(4).EntireRow.Hidden = .Caption = "Hide"
    .Caption = IIf(.Caption = "Hide", "UnHide", "Hide")
  End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Giải thích giúp mình code in theo điều kiện

Câu hỏi của mình trong file đính kèm.
 

File đính kèm

Upvote 0
Câu hỏi của mình trong file đính kèm.

Tại sao L10 chỉ chạy đến 6
Vì bạn chỉ copy công thức đánh số TT bên sheet DATA cột A đến dòng 6 thôi, còn dòng 7 bị trống nên bị như vậy, vì trong code lấy dòng cuối để in là tính từ ô A5 xuống dưới một cách liên tục theo dòng này
PHP:
cuoi = Sheets("DATA").Cells(5, 1).End(xlDown).Row

số bản in ra không theo đúng như giá trị của L11
Vì trong code lấy sô bản in ở ô L10 theo dòng này.
PHP:
Copies:=Range("l10").Value

và để sửa lại thì bạn nên dùng code sau (mình đã có chỉnh sửa code cũ)
trước khi in bạn nhớ đặt máy in mặc định nhé.

PHP:
Sub Inphieu()
''code nay cua cac bac tren GPE
On Error GoTo baoloi
Dim dau As Integer, cuoi As Integer, n As Integer, rng As Range
Set rng = Range(Sheets("DATA").Cells(5, 1), Sheets("DATA").Cells(5, 1).End(xlDown))
dau = Application.WorksheetFunction.Min(rng)
cuoi = Application.WorksheetFunction.Max(rng)
If dau > 0 Then
For n = dau To cuoi
Sheet1.Cells(10, 12) = n
  ActiveWindow.SelectedSheets.PrintOut Copies:=Range("l11").Value
Next
Else
MsgBox "Chang co gi de in ca !"
End If
GoTo done
baoloi:
MsgBox "co loi!", vbOKOnly, "In giay uy quyen quyet toan"
done:
End Sub
 

File đính kèm

Upvote 0
Hỏi về code làm phần mềm giải phương trình bậc 2

Em mới học lập trình nên khi viết code hay bị thiếu và sai. Em mới làm 1 chương trình giải phương trình bậc 2 bằng vb nhưng khi chạy thì chương trình báo lỗi. Mong mọi người xem rồi chỉnh sửa code giúp em để chương trình có thể chạy được.Chương trình làm bằng vb6.
 

File đính kèm

Upvote 0
Sao bạn không đăng mã code đó lên bài luôn?

Em mới học lập trình nên khi viết code hay bị thiếu và sai. Em mới làm 1 chương trình giải phương trình bậc 2 bằng vb nhưng khi chạy thì chương trình báo lỗi. Mong mọi người xem rồi chỉnh sửa code giúp em để chương trình có thể chạy được.Chương trình làm bằng vb6.

Mình chưa thể xem được đoạn code đó; Nhưng nếu không fải tìm nghiệm ảo thì trên diễn đàn này không thiếu cách giải;
Bạn thử tìm kiếm & tham khảo thêm; Biết đâu sau 1 hồi đối chiếu bạn sẽ tìm ra được cái gì đó mà bạn đang thừa hay thiếu cũng nên!

Chúc thành công.
 
Upvote 0
Mã:
Sub Doi()
Dim Cll As Range, [COLOR="red"][B]Ch1, Dec[/B][/COLOR]
Ch1 = Application.ThousandsSeparator
Dec = InputBox("Nhap ky tu tach:")
For Each Cll In Selection
Cll = Replace(Format(Cll, "#,##0"), [COLOR="red"]Ch1, Dec[/COLOR])
Next
End Sub
Nhờ các bạn giải thích ý nghĩa của các tham số Ch1 và Dec trong code trên. Thanks !
 
Upvote 0
Mã:
Sub Doi()
Dim Cll As Range, [COLOR=red][B]Ch1, Dec[/B][/COLOR]
Ch1 = Application.ThousandsSeparator
 '  . . . . '
Next
End Sub
Nhờ các bạn giải thích ý nghĩa của các tham số Ch1 và Dec trong code trên. Thanks !
Nếu code này đang trong CS (của sổ) VBE, ta lấy chuột tô chọn các từ Application.ThousandsSeparator & nhấn {F1} ta sẽ được đưa đến màn hình chứa các câu được trích dẫn sau đây:
Nội dung | Dịch tạm
ThousandsSeparator Property| Thuộc tính dấu fân cách fần ngàn

ThousandsSeparator PropertySets or returns the character used for the thousands separator as a String . Read/write.| Gán hay trả về ký tự được sử dụng để fân cách các số hàng ngàn như là 1 kí tự. (Có tính) đọc/ghi

Và nó còn đưa ra các ví dụ sau:housandsSeparator PropertyExample

This example places "1,234,567.89" in cell A1 then changes the system separators to dashes for the decimals and thousands separators.
PHP:
Sub ChangeSystemSeparators()

    Range("A1").Formula = "1,234,567.89"
    MsgBox "The system separators will now change."

    ' Define separators and apply.
    Application.DecimalSeparator = "-"
    Application.ThousandsSeparator = "-"
    Application.UseSystemSeparators = False

End Sub
Còn biến Des (đán ra cần khai kiểu dữ liệu là chuỗi (As String)) là bạn hiểu liền hà.
Biến này dùng để thay thế dấu fân cách số hàng ngàn (Tách theo nhóm theo yêu cầu của chủ topic - Ta có thể dùng " ", "-",. . . )

Mong giúp được bạn ít nhiều.
 
Upvote 0
Nhờ các bạn giải thích ý nghĩa của các tham số Ch1 và Dec trong code trên. Thanks !

Bác hỏi cho ai mà dễ thế ạ?

- Ch1 là lấy dấu phân cách hàng ngàn của hệ thống
- Dec là lấy ký tự phân cách theo ý muốn của người dùng bằng inputbox
- Trong hàm Replace: Thay ký tự Ch1 bằng ký tự Dec trong chuỗi (tạo từ số) có đầy đủ ký tự phân cách hàng ngàn theo hệ thống. (Muốn thay thế nó thì phải cho nó ló cái mặt ra í mà)
 
Upvote 0
Em mới học lập trình nên khi viết code hay bị thiếu và sai. Em mới làm 1 chương trình giải phương trình bậc 2 bằng vb nhưng khi chạy thì chương trình báo lỗi. Mong mọi người xem rồi chỉnh sửa code giúp em để chương trình có thể chạy được.Chương trình làm bằng vb6.
Bạn xóa 2 TextBox txtBtxtC rồi vẽ lại cái khác là được rồi
(Tuy nhiên, code dài dòng quá)
 
Upvote 0
Bác hỏi cho ai mà dễ thế ạ?

- Ch1 là lấy dấu phân cách hàng ngàn của hệ thống
- Dec là lấy ký tự phân cách theo ý muốn của người dùng bằng inputbox
- Trong hàm Replace: Thay ký tự Ch1 bằng ký tự Dec trong chuỗi (tạo từ số) có đầy đủ ký tự phân cách hàng ngàn theo hệ thống. (Muốn thay thế nó thì phải cho nó ló cái mặt ra í mà)

Tôi hỏi như vậy vì code sau cũng có kết quả y chang (không cần Ch1 và Dec)
Mã:
Sub Nhom()
Dim cls As Range
    For Each cls In [b1].Resize(50).SpecialCells(2)
        cls = Format(cls, "#,##0")
    Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Đoạn code Bác hỏi của Sealand thì phải. Đoạn code đó cho phép người dùng sử dụng ký tự "-", khoảng trống " ", ... thay cho dấu phân cách. Ký tự đó cho vào sau bằng inputbox tuỳ ý thích mỗi người. Đoạn code của Bác ấn định ký tự "," không cần biết người dùng có thích hay không. Đại khái là thế.
 
Upvote 0
Giúp đở tôi, lổi code đau đầu quá!

Doạn code nầy tôi cpoy trong 1 file của bạn nào đó trên GPE (không nhớ tên), nhưng file đó bỏ vào máy tôi chỉnh hàng cột theo ý riêng thì vẫn tốt, nhưng khi copy code vào file của tôi thì bị lổi khó hiểu, có một bạn cũng muốn giúp tôi nhưng file về máy bạn ấy thì bạn ấy nói không gặp lổi như tôi miêu tả, tôi không biết máy tôi có bị... HIV không nên ghost lại - không khác hơn. Nhờ các bạn và ACE xem trong file đính kèm để có cách nào khắc khục và mách dùm.

(Sau file tôi đưa lên rồi mà vào không thấy??)

Nếu là vậy xin tải chổ nầy:
http://www.mediafire.com/?a9yaz311e37eoev
 
Lần chỉnh sửa cuối:
Upvote 0
Doạn code nầy tôi cpoy trong 1 file của bạn nào đó trên GPE (không nhớ tên), nhưng file đó bỏ vào máy tôi chỉnh hàng cột theo ý riêng thì vẫn tốt, nhưng khi copy code vào file của tôi thì bị lổi khó hiểu, có một bạn cũng muốn giúp tôi nhưng file về máy bạn ấy thì bạn ấy nói không gặp lổi như tôi miêu tả, tôi không biết máy tôi có bị... HIV không nên ghost lại - không khác hơn. Nhờ các bạn và ACE xem trong file đính kèm để có cách nào khắc khục và mách dùm.

(Sau file tôi đưa lên rồi mà vào không thấy??)

Nếu là vậy xin tải chổ nầy:
http://www.mediafire.com/?a9yaz311e37eoev
Bạn mô tả trời đất gì mà tôi chẳng tài nào hiểu nỗi:
Cái ComboBox nầy là để mình lấy link mã hàng hoặc mả KH đưa vào bảng tính, do cách dùng riêng mà mình không sử dụng "Bảng chọn DL". Nhưng lổi khi mình cích vào nó chọn 1 đối tượng thì nó ra nhiều hàng như thấy bên góc trái
Cứ như đọc tiếng Miên
Tóm lại: Giờ bạn muốn thế nào?
 
Upvote 0
tóm lại Thì hiện bảng tính đang bị lổi ở code khi Cích vào ComboBox trong danh sách sổ suống chọn một đối tượng xong nó lại không ra một mà ra đến 3, 4 hàng cùng một đối tượng. xin giúp
 
Upvote 0
Bạn mô tả trời đất gì mà tôi chẳng tài nào hiểu nỗi:
Cứ như đọc tiếng Miên
Tóm lại: Giờ bạn muốn thế nào?
Nghĩa là khi bạn ấy click chọn 1 mặt hàng trong combobox, nó insert 4 dòng vào dữ liệu chứ không phải 1.
 
Upvote 0
tóm lại Thì hiện bảng tính đang bị lổi ở code khi Cích vào ComboBox trong danh sách sổ suống chọn một đối tượng xong nó lại không ra một mà ra đến 3, 4 hàng cùng một đối tượng. xin giúp
Đừng dùng name động nữa ---> Nạp Combo bằng code sẽ hết bị liền
Cụ thể:
PHP:
Private Sub ComboBox1_DropButtonClick()
  With Sheets("LINK DS")
    ComboBox1.List() = .Range(.[C4], .[C65536].End(xlUp)).Resize(, 2).Value
  End With
End Sub
PHP:
Private Sub ComboBox1_Change()
  With Range("C65000").End(xlUp)
    .Offset(1, 0) = ComboBox1.Text
    .Offset(1, 1) = Date
    .Offset(1, 2) = ComboBox1.Column(1)
  End With
End Sub
Điền ngày tháng ta cho luôn vào sự kiện ComboBox1_Change, chẳng cần phải thêm Worksheet_Change đâu
------------------------
Tuy nhiên, dùng ComboBox kiểu này sẽ có 1 nhược điểm: Không thể chọn 2 lần liên tiếp cùng 1 mã hàng ---> Tạm sửa lại: Dùng ComboBox1_Click như sau:
PHP:
Private Sub ComboBox1_Click()
  With Range("C65000").End(xlUp)
    .Offset(1, 0) = ComboBox1.Text
    .Offset(1, 1) = Date
    .Offset(1, 2) = ComboBox1.Column(1)
  End With
  ComboBox1.Text = ""
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Không biết cám ơn ndu96081631 mấy lần tôi đau đầu nó nhiều mà không mạnh hỏi.
 
Upvote 0
ndu96081631 cho xin hỏi thêm là có cách nào thu hẹp cột mã hàng trong ComboBox1 và nới rộng cột tên hàng không?
 
Upvote 0
ndu96081631 cho xin hỏi thêm là có cách nào thu hẹp cột mã hàng trong ComboBox1 và nới rộng cột tên hàng không?
Bấm nút Design Mode rồi click phải chuột vào ComboBox, chọn Properties:
- Mục ColumnWidths dùng để tăng giảm độ rộng các cột như bạn nói
- Mục ListWidth để chỉnh độ rộng của nguyên List
thử xem

untitled.JPG
 
Upvote 0
Status
Không mở trả lời sau này.

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

Back
Top Bottom