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

Liên hệ QC
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

  • TongHop_File2.rar
    66.6 KB · Đọc: 34
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

  • File dau vao.TXT
    1.4 KB · Đọc: 21
  • File dau ra.xls
    37 KB · Đọc: 22
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

  • ImportData.xls
    30 KB · Đọc: 22
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

  • Book1.xls
    46 KB · Đọc: 12
  • Book1.xls
    42.5 KB · Đọc: 6
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
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom