Chuyên mục xử lý, gỡ rối code VBA

Liên hệ QC
Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,932
Đây là file mình làm:
Mình muốn lấy giá trị Sheet2.[B6] = Sheet1.[A3] thông qua giá trị Sheet1[C1] qua 1 nút lệnh.
Các bác có cách nào không,
 

File đính kèm

  • tesst.xlsm
    17.9 KB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
code của bạn khó dùng quá. với những người không hiểu về lập trình như tôi thì càng đơn giản càng dễ dùng bạn ạ! cảm ơn bạn nhiều nhé.
Tôi viết trong chủ đề của bạn nhưng các bài viết trên GPE là cho cả những người khác, cho cả những người trong tương lai dùng công cụ tìm kiếm để có được cái họ cần. Nếu chỉ trả lời thớt thôi thì gửi vào e-mail chứ làm rác diễn đàn làm gì?
Những người khác có thể có nhiều dữ liệu hơn bạn và cách của bạn là phải đi uống cà phê. Vì tôi viết cho cả những người khác có cùng nhu cầu nên tôi viết khác và tôi lưu ý.
 
Upvote 0
Tôi viết trong chủ đề của bạn nhưng các bài viết trên GPE là cho cả những người khác, cho cả những người trong tương lai dùng công cụ tìm kiếm để có được cái họ cần. Nếu chỉ trả lời thớt thôi thì gửi vào e-mail chứ làm rác diễn đàn làm gì?
Những người khác có thể có nhiều dữ liệu hơn bạn và cách của bạn là phải đi uống cà phê. Vì tôi viết cho cả những người khác có cùng nhu cầu nên tôi viết khác và tôi lưu ý.
Bạn ơi. Bạn có thể giúp mình file tesst trên kia ko bạn.
 
Upvote 0
Bạn ơi. Bạn có thể giúp mình file tesst trên kia ko bạn.
Không hiểu ý lắm.
Nếu là như bạn viết thì công thức cho Sheet2!B6
Mã:
=Sheet1!A3
Trong Sheet1!C1 có công thức =B3. Dữ liệu chỉ có 1 dòng.
"B" là cố định, "3" là cố định?
Nếu không thì mô tả từ đầu, ý như thế nào.
 
Upvote 0
Chào Thầy!
em cần giúp đỡ, em có đoạn code dưới, nhưng khi chạy thì khi gặp giá trị rỗng trong mãng nó xuất hiện 2 hộp thoại "data is empty"
cách giải quyết như thế nào vậy thầy, mong được sự giúp đỡ
Mã:
Function searchdk(ByVal ter As String, ByVal wire As String, hsArray)
Dim colP As Long
Dim rowP As Long
 colP = Sheet2.[A1].End(xlToRight).Column + 1
 rowP = Sheet2.[A1].End(xlDown).Row + 1
  Dim i As Long, j As Long, dk As String, TmpArr, TmpStr, Tmp, Arr
  TmpArr = hsArray
  For i = 1 To UBound(TmpArr)
     
     If TmpArr(i, 1) = ter Then
            For j = 1 To UBound(TmpArr, 2)
                    If TmpArr(1, j) = Empty And TmpArr(1, j) <> wire Then
                        MsgBox ("data is empty")
                        Sheet2.Cells(1, colP).Value = wire
                    Exit Function
           
                    ElseIf TmpArr(1, j) = wire Then
                        searchdk = TmpArr(i, j)
                    Exit Function
                    End If
               
     
            Next j
       
     End If
  Next i
 ' searchdk = Arr
End Function
[code]
 
Upvote 0
Chào Thầy!
em cần giúp đỡ, em có đoạn code dưới, nhưng khi chạy thì khi gặp giá trị rỗng trong mãng nó xuất hiện 2 lần hộp thoại "data is empty" sau khi bấm OK
cách giải quyết như thế nào vậy thầy, mong được sự giúp đỡ
Mã:
Function searchdk(ByVal ter As String, ByVal wire As String, hsArray)
Dim colP As Long
Dim rowP As Long
colP = Sheet2.[A1].End(xlToRight).Column + 1
rowP = Sheet2.[A1].End(xlDown).Row + 1
  Dim i As Long, j As Long, dk As String, TmpArr, TmpStr, Tmp, Arr
  TmpArr = hsArray
  For i = 1 To UBound(TmpArr)
    
     If TmpArr(i, 1) = ter Then
            For j = 1 To UBound(TmpArr, 2)
                    If TmpArr(1, j) = Empty And TmpArr(1, j) <> wire Then
                        MsgBox ("data is empty")
                        Sheet2.Cells(1, colP).Value = wire
                    Exit Function
          
                    ElseIf TmpArr(1, j) = wire Then
                        searchdk = TmpArr(i, j)
                    Exit Function
                    End If
              
    
            Next j
      
     End If
  Next i
' searchdk = Arr
End Function
[code]
 
Upvote 0
Chào Thầy!
em cần giúp đỡ, em có đoạn code dưới, nhưng khi chạy thì khi gặp giá trị rỗng trong mãng nó xuất hiện 2 hộp thoại "data is empty"
cách giải quyết như thế nào vậy thầy, mong được sự giúp đỡ
Mã:
Function searchdk(ByVal ter As String, ByVal wire As String, hsArray)
Dim colP As Long
Dim rowP As Long
colP = Sheet2.[A1].End(xlToRight).Column + 1
rowP = Sheet2.[A1].End(xlDown).Row + 1
  Dim i As Long, j As Long, dk As String, TmpArr, TmpStr, Tmp, Arr
  TmpArr = hsArray
  For i = 1 To UBound(TmpArr)
    
     If TmpArr(i, 1) = ter Then
            For j = 1 To UBound(TmpArr, 2)
                    If TmpArr(1, j) = Empty And TmpArr(1, j) <> wire Then
                        MsgBox ("data is empty")
                        Sheet2.Cells(1, colP).Value = wire
                    Exit Function
          
                    ElseIf TmpArr(1, j) = wire Then
                        searchdk = TmpArr(i, j)
                    Exit Function
                    End If
              
    
            Next j
      
     End If
  Next i
' searchdk = Arr
End Function
[code]
Tui chả hiểu bạn học vba ở đâu, chứ chả có ai viết function lại dùng mấy cái msgbox làm gì. function thì thường thì thực hiện tính toán thui, chứ không hiện thông báo làm gì. Lại còn thực hiện viết dữ liệu vào các sheet khác nữa, mặc dù nó vẫn có thể viết được dữ liệu, nhưng khi dùng trong excel thì lệnh đó sẽ vô tác dụng, thà nói mục đích là gì, người khác viết lại cho nhanh, mà chả có file thì ai dám giúp.
 
Upvote 0
Nhờ các anh chị sửa giúp ( khi bỏ đoạn code dưới ) để được kết quả như sheet KQ. Xin cảm ơn
Mã:
 N = .Range("H1").Value * 10 - 9
        STT = N - 1
    If N <= K Then
        TieuDe = .Range("I1:N1").Value
        Rws = IIf((N + 9) < K, N + 9, K)
        For I = N To Rws
 

File đính kèm

  • tim chinh xac khu pho.rar
    24.1 KB · Đọc: 4
Upvote 0
Nhờ các anh chị sửa giúp ( khi bỏ đoạn code dưới ) để được kết quả như sheet KQ. Xin cảm ơn
Mã:
 N = .Range("H1").Value * 10 - 9
        STT = N - 1
    If N <= K Then
        TieuDe = .Range("I1:N1").Value
        Rws = IIf((N + 9) < K, N + 9, K)
        For I = N To Rws

Bài này quen quá!
 

File đính kèm

  • tim chinh xac khu pho.rar
    27 KB · Đọc: 5
Upvote 0
Mã:
Sub SetupRowBangKL2()
Dim i As Long
    For i = 1 To 11
        Sheet24.Range("B" & i).RowHeight = Sheet23.Range("B" & i).RowHeight
        Sheet25.Range("B" & i).RowHeight = Sheet23.Range("B" & i).RowHeight
    Next i
End Sub
Nhờ anh chị! vòng for này em chạy thấy chậm quá, có cách khác không ạ giúp em với. sheet dùng mảng array như nào ạ. em xin cảm ơn
 
Upvote 0
Mã:
Sub SetupRowBangKL2()
Dim i As Long
    For i = 1 To 11
        Sheet24.Range("B" & i).RowHeight = Sheet23.Range("B" & i).RowHeight
        Sheet25.Range("B" & i).RowHeight = Sheet23.Range("B" & i).RowHeight
    Next i
End Sub
Nhờ anh chị! vòng for này em chạy thấy chậm quá, có cách khác không ạ giúp em với. sheet dùng mảng array như nào ạ. em xin cảm ơn
Không biết có nhanh hơn không
Mã:
Sub SetupRowBangKL2()
Dim i As Long, hArr ()
 Redim hArr(1 to 11)
    For i = 1 To 11
        hArr(i) = Sheet23.Range("B" & i).RowHeight
    Next i
  
  For i = 1 To 11
        Sheet24.Range("B" & i).RowHeight = hArr(i)
        Sheet25.Range("B" & i).RowHeight = hArr(i)
    Next i
End Sub
 
Upvote 0
Không biết có nhanh hơn không
Mã:
Sub SetupRowBangKL2()
Dim i As Long, hArr ()
Redim hArr(1 to 11)
    For i = 1 To 11
        hArr(i) = Sheet23.Range("B" & i).RowHeight
    Next i

  For i = 1 To 11
        Sheet24.Range("B" & i).RowHeight = hArr(i)
        Sheet25.Range("B" & i).RowHeight = hArr(i)
    Next i
End Sub
Anh ơi! vẫn thế a à, còn cách khác ko ạ. Dòng lệnh Sheet24, Sheet25 có thể đưa vào thành 1 dòng giống như for ko ạ. Bên trên chỉ cần khai báo có những sheet ("Sheet24", "Sheet25")
 
Upvote 0
Anh ơi! vẫn thế a à, còn cách khác ko ạ. Dòng lệnh Sheet24, Sheet25 có thể đưa vào thành 1 dòng giống như for ko ạ. Bên trên chỉ cần khai báo có những sheet ("Sheet24", "Sheet25")
Mã:
Sub SetupRowBangKL2()
Dim i As Long, hArr ()
  Const sArr("Sheet24","Sheet25")
  Redim hArr(1 to 11)
  For i = 1 To 11
     hArr(i) = Sheet23.Range("B" & i).RowHeight
  Next i
  For n = 0 To Ubound(sArr)   
    For i = 1 To 11
        Sheets(sArr(n).Range("B" & i).RowHeight = hArr(i)
    Next i
  Next n
End Sub
 
Upvote 0
Mã:
Sub SetupRowBangKL2()
Dim i As Long, hArr ()
  Const sArr("Sheet24","Sheet25")
  Redim hArr(1 to 11)
  For i = 1 To 11
     hArr(i) = Sheet23.Range("B" & i).RowHeight
  Next i
  For n = 0 To Ubound(sArr)  
    For i = 1 To 11
        Sheets(sArr(n).Range("B" & i).RowHeight = hArr(i)
    Next i
  Next n
End Sub
Const sArr("Sheet24","Sheet25")
Sheets(sArr(n).Range("B" & i).RowHeight = hArr(i)
2 dòng này báo lỗi mầu đỏ sai cấu trúc à anh, a xem dùm hộ em
 
Upvote 0
Const sArr("Sheet24","Sheet25")
Sheets(sArr(n).Range("B" & i).RowHeight = hArr(i)
2 dòng này báo lỗi mầu đỏ sai cấu trúc à anh, a xem dùm hộ em
Thiếu vài ký tự
Mã:
Sub SetupRowBangKL2()
Dim i As Long, n As Byte, hArr()
  Const sArr = Array("Sheet24", "Sheet25")
  ReDim hArr(1 To 11)
  For i = 1 To 11
     hArr(i) = Sheet23.Range("B" & i).RowHeight
  Next i
  For n = 0 To UBound(sArr)
    For i = 1 To 11
        Sheets(sArr(n)).Range("B" & i).RowHeight = hArr(i)
    Next i
  Next n
End Sub
 
Upvote 0
Thiếu vài ký tự
Mã:
Sub SetupRowBangKL2()
Dim i As Long, n As Byte, hArr()
  Const sArr = Array("Sheet24", "Sheet25")
  ReDim hArr(1 To 11)
  For i = 1 To 11
     hArr(i) = Sheet23.Range("B" & i).RowHeight
  Next i
  For n = 0 To UBound(sArr)
    For i = 1 To 11
        Sheets(sArr(n)).Range("B" & i).RowHeight = hArr(i)
    Next i
  Next n
End Sub
Vẫn báo lỗi dòng này a ạ!
Const sArr = Array("Sheet24", "Sheet25")
 
Upvote 0
Thiếu vài ký tự
Mã:
Sub SetupRowBangKL2()
Dim i As Long, n As Byte, hArr()
  Const sArr = Array("Sheet24", "Sheet25")
  ReDim hArr(1 To 11)
  For i = 1 To 11
     hArr(i) = Sheet23.Range("B" & i).RowHeight
  Next i
  For n = 0 To UBound(sArr)
    For i = 1 To 11
        Sheets(sArr(n)).Range("B" & i).RowHeight = hArr(i)
    Next i
  Next n
End Sub
Mình nhớ nhầm
Mã:
Sub SetupRowBangKL2()
Dim i As Long, n As Byte, hArr(), sArr()
  sArr = Array("Sheet24", "Sheet25")
  ReDim hArr(1 To 11)
  For i = 1 To 11
     hArr(i) = Sheet23.Range("B" & i).RowHeight
  Next i
  For n = 0 To UBound(sArr)
    For i = 1 To 11
        Sheets(sArr(n)).Range("B" & i).RowHeight = hArr(i)
    Next i
  Next n
End Sub
 
Upvote 0
Mình nhớ nhầm
Mã:
Sub SetupRowBangKL2()
Dim i As Long, n As Byte, hArr(), sArr()
  sArr = Array("Sheet24", "Sheet25")
  ReDim hArr(1 To 11)
  For i = 1 To 11
     hArr(i) = Sheet23.Range("B" & i).RowHeight
  Next i
  For n = 0 To UBound(sArr)
    For i = 1 To 11
        Sheets(sArr(n)).Range("B" & i).RowHeight = hArr(i)
    Next i
  Next n
End Sub
Có lẽ nó chậm là do thao tác gán chiều cao cho dòng, nếu không giải quyết được vấn đề này thì coi như hỏng.
 
Upvote 0
Mã:
If sArr(I, 19) <> Empty Then
        If Month(sArr(I, 19)) < 8 Then
            dArr(I, 8) = Right(sArr(I, 19), 2) - 1 & Right(sArr(I, 19), 2)
        ElseIf Month(sArr(I, 19)) > 8 Then
            dArr(I, 8) = Right(sArr(I, 19), 2) & Right(sArr(I, 19), 2) + 1
        Else
            dArr(I, 8) = "/"
        End If
    End If
Nhờ anh chị chỉ giúp: chỉnh lại như thể nào để:
khi sArr(I, 19) = Empty thì dArr(I, 8) điền "/".
 
Lần chỉnh sửa cuối:
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom