Gán giá trị cho lệnh copy.

  • Thread starter Thread starter salam
  • Ngày gửi Ngày gửi
Liên hệ QC

salam

Thành viên gắn bó
Tham gia
4/11/06
Bài viết
1,945
Được thích
1,896
Giới tính
Nam
Nghề nghiệp
Accountant
Các Bác cho em hỏi muốn gán một giá trị cho lệnh copy thì làm thế nào. Em hay đặt ở một cell rồi select cell đó sau đó copy.
VD: A1 = 1

Range("A1").Select
Selection.Copy

Vậy có cách nào gán giá trị VD 1 cho selection.copy không các Bác chỉ cho em với.

Cám ơn các Bác.
 
Các Bác cho em hỏi muốn gán một giá trị cho lệnh copy thì làm thế nào. Em hay đặt ở một cell rồi select cell đó sau đó copy.
VD: A1 = 1

Range("A1").Select
Selection.Copy

Vậy có cách nào gán giá trị VD 1 cho selection.copy không các Bác chỉ cho em với.

Cám ơn các Bác.
Dùng
Range("A1").Copy
Hay là dùng luôn, copy thì phải paste.
Range("Xi")= Range("A1")
 
Upvote 0
Ý em là gán giá trị cố định VD là 1 cho lệnh copy mà không phải dùng giá trị của ô A1 sau đó em sẽ dùng nó vào lệnh khác.
 
Upvote 0
Ý em là gán giá trị cố định VD là 1 cho lệnh copy mà không phải dùng giá trị của ô A1 sau đó em sẽ dùng nó vào lệnh khác.
Chưa hiểu lắm, trong VBA có cách gán biến như sau, gán trên đầu Sub:
Const iSLg as long = 1
Biến này sẽ dùng cho tòan Code.
 
Upvote 0
Đây Bác xem hộ em với.
Mã:
Sub ChangeNum()
    Range("C3").Select 'C3=1
    Selection.Copy [COLOR=Red]' Em muốnn bỏ không select C3 mà selection.copy vẫn =1[/COLOR]
    Range("B3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.PasteSpecial Operation:=xlMultiply
End Sub
 
Upvote 0
Đây Bác xem hộ em với.
Mã:
Sub ChangeNum()
    Range("C3").Select 'C3=1
    Selection.Copy [COLOR=Red]' Em muốnn bỏ không select C3 mà selection.copy vẫn =1[/COLOR]
    Range("B3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.PasteSpecial Operation:=xlMultiply
End Sub

Cái này dùng như sau có vẻ dễ hơn
iSL=1
eRow=[B3].end(xlDown).row
Range("B3:B" & Erow).value = iSL
 
Upvote 0
Range("B3:B" & Erow).value = iSL
Cái này là số liệu trong vùng chọn bằng 1 hết rồi Anh ThuNghi ơi.

Em muốn dùng chức năng paste special/ multiply để thêm (ví dụ 120 thành 12000 thì phải nhân với 100) vì trong file của em có ghi là 100 Tr hoặc 100 ngàn giờ em muốn chúng trở về số thực 100 000 000 hoặc 100 000.

Chỉ dùng paste special/ multiply thôi.
 
Upvote 0
Phương thức của bạn là nhanh lắm rồi. Đành phải mượn tạm 1 cell để gán số nhân vậy, sau khi nhân xong cả bảng tính thì clear cell đó đi.
Tôi cũng có cách này không phải mượn cell tạm, nhưng tốc độ tính toán rất củ chuối, không thể sánh nổi với tốc độ của phương thức Copy-PasteSpectialMultiply.
PHP:
Sub ChangeNum()
  Dim Rng As Range, Clls As Range, mMult As Double
  Set Rng = Range([B3], [B3].End(xlDown)) 
  mMult = 1000
  For Each Clls In Rng   
      Clls = Clls * mMult
  Next
  End Sub
Và thêm một cách nữa không mượn cell tạm - hay nói đúng hơn là có mượn nhưng mà là mượn 1 cell ngay trong bảng tính, cell cuối cùng - sau khi nhân xong cả bảng tính, còn lại cell này sẽ nhân sau cùng (trả lại cell cho bảng tính). Vì vậy, cách này hơi lòng vòng một chút, nhưng được cái là vẫn phương thức Copy-PasteSpectialMultiply nên tốc độ không bị ảnh hưởng.
PHP:
Sub ChangeNum()
  Dim Rng As Range, mMult As Double, mTemp As Double
  Set Rng = Range([B3], [B3].End(xlDown))
  mMult = 1000
  mTemp = Rng(Rng.Count)
  Rng(Rng.Count) = mMult
  Rng(Rng.Count).Copy
  Rng.Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply
  Rng(Rng.Count) = mTemp * mMult
  Application.CutCopyMode = False
  End Sub
 
Upvote 0
Sub ChangeNum()
Range("C3").Select 'C3=1
Selection.Copy ' muốn bỏ không select C3 mà selection.copy vẫn =1
Range("B3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.PasteSpecial Operation:=xlMultiply
End Sub

cách này thì hơi nông dân quá , còn cách kia thì củ chuối quá các bác xem có cách nào không?
 
Upvote 0
Tôi có 1 chiêu khác không cần bất cứ cell phụ nào (nhưng không biết có nhanh hơn PasteSpecial\Multiply hay không:
1> Giã sử muốn cộng 1 số vào 1 range (ví dụ đó là số 1)
PHP:
Sub Test()
  With Range([B3], [B3].End(xlDown))
    .Value = Evaluate(.Address & "+1")
  End With
End Sub
2> Nhân 1 số vào 1 range (ví dụ số nhân là số 2) ---> Cách làm tương tự
PHP:
Sub Test()
  With Range([B3], [B3].End(xlDown))
    .Value = Evaluate(.Address & "*2")
  End With
End Sub
3> Chia và trừ... từ đó suy ra
 
Upvote 0
Tôi có 1 chiêu khác không cần bất cứ cell phụ nào (nhưng không biết có nhanh hơn PasteSpecial\Multiply hay không:
1> Giã sử muốn cộng 1 số vào 1 range (ví dụ đó là số 1)
PHP:
Sub Test()
  With Range([B3], [B3].End(xlDown))
    .Value = Evaluate(.Address & "+1")
  End With
End Sub
2> Nhân 1 số vào 1 range (ví dụ số nhân là số 2) ---> Cách làm tương tự
PHP:
Sub Test()
  With Range([B3], [B3].End(xlDown))
    .Value = Evaluate(.Address & "*2")
  End With
End Sub
3> Chia và trừ... từ đó suy ra

Hỏi một chút,
sao lại vất vả vậy ndu..., cứ gán giá trị bình thường cũng được
không hiểu tại sao anh lại nhân lên làm gì
?
 
Upvote 0
Hỏi một chút,
sao lại vất vả vậy ndu..., cứ gán giá trị bình thường cũng được
không hiểu tại sao anh lại nhân lên làm gì
?
Thì làm theo yêu cầu của Tác giả mà:
Tác giả dùng chức năng PasteSpecial\Multiply để nhân 1 số nào đó vào 1 vùng... nhưng chức năng này bắt buộc số nhân phải nằm tại 1 cell nào đó... Và ý tác giả muốn bỏ qua đoạn copy... (PasteSpecial vào luôn)
Vậy ý Tigertiger thì sao? ---> Có cách gì khác không? Gán giá trị bình thường làm gán thế nào?
 
Upvote 0
anh có thể chỉ copy 1 range data động ( không cố định)?
Em tìm vẫn chưa thấy??
Vấn đề là em phải chỉ ra được địa chỉ của range đó.
DongCuoi=Cells(65000,1).End(xlUp).Row 'nếu range bắt đầu là cột A.
CotCuoi=Cells(1,256)..End(xlToLeft).Column ' Nếu dữ liệu bắt đầu ở dòng 1.
Range(Cells(1,1),Cells(DongCuoi,CotCuoi)).copy
Và muốn dán vào đâu thì tùy.
 
Upvote 0
Web KT

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

Back
Top Bottom