[英]Pasting multiple ranges to another sheet in vba
我希望代碼將“ cashb”粘貼到“ rngcel”下方,但是每次運行代碼時,“ cashb”的值都會出現在“ rngCel” .value上方。 Rngcell的范圍是A2:A34,我希望“ Cashb”出現在A35的正下方。 我嘗試將“ A35”放入范圍內,但不起作用。
這是我想顯示在rngcel.value下面的代碼。
Sheets(" Price").Range("A35").Resize(Cashb.Rows.Count).Value = Cashb.Value
我也想返回“ cashb”范圍右側5列的列,我感謝收到的任何幫助。
這是我所擁有的代碼。
Sub liveP()
Application.ScreenUpdating = False
Dim rngTicker As Range
Dim rngCel As Range
Dim Cashb As Range
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "Live"
Set rngTicker = Worksheets("prices").Range("H16:H200")
Set Cashb = Sheets("prices").Range("cashbalances")
For Each rngCel In rngTicker
If rngCel.Font.ColorIndex = 33 Then
Worksheets("Live").Cells(Rows.Count, 1).End(xlUp).offset(1).Resize(1, 2).Value = Array(rngCel.offset(, "-7").Value, rngCel.Value) ' this is range cell value'
WorkSheets("Live").Range("A35").Resize(Cashb.Rows.Count).Value = Cashb.Value.offset ' this is the value I'd like to appear under rngcel value
'New data that im posting on the Live sheet'
Sheets("Live").Range("C2:H33").Formula = "=($B2 +$C5)"
Sheets("Live").Range("A1") = "Header1"
Sheets("Live").Range("B1") = "Header2"
Sheets("Live").Range("C1") = "Header3"
Sheets("Live").Range("D1") = "Header4"
Sheets("Live").Range("E1") = "Header5"
Sheets("Live").Range("F1") = "Header6"
End If
Next
Application.ScreenUpdating = True
End Sub
Sub liveP()
Application.ScreenUpdating = False
Dim rngTicker As Range
Dim rngCel As Variant 'used in for each this should be variant
Dim Cashb As Range
Dim ws As Worksheet
Dim LastRow As Long 'dimensioned variable for the last row
Dim CashbRows As Long 'dimensioned variable for Cashb rows
Set ws = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "Live"
Set rngTicker = Worksheets("prices").Range("H16:H200")
Set Cashb = Sheets("prices").Range("cashbalances")
'Assuming "cashbalances" is a named range in the worksheet
CashbRows = Cashb.Rows.Count
For Each rngCel In rngTicker
If rngCel.Font.ColorIndex = 33 Then
With Worksheets("Live")
LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'set lastrow variable
.Cells(LastRow, 1) = rngCel.Offset(0, -7).Value 'putting value 7 columns before into live worksheet column A
.Cells(LastRow, 2) = rngCel.Value 'putting value into live worksheet column B
.Range(.Cells(35, 1), .Cells(35 + CashbRows, 1)) = Cashb.Offset(, 5).Value 'im not really sure if this line is going to work at all
'New data that im posting on the Live sheet'
.Range("C2:H33").Formula = "=($B2 +$C5)"
.Range("A1") = "Header1"
.Range("B1") = "Header2"
.Range("C1") = "Header3"
.Range("D1") = "Header4"
.Range("E1") = "Header5"
.Range("F1") = "Header6"
End With
End If
Next
Application.ScreenUpdating = True
End Sub
rngCel現在是變體而不是范圍
使用LastRow變量擺脫偏移量
將數據放入“ LIVE”時刪除了數組,原因為何
現在,CashbRows將僅在循環之前計算一次。 節約時間
With Worksheets("Live")
語句是一種節省時間的措施。
您將A35稱為范圍,但不是,然后將其調整為范圍? 當我不能說出什么是“現金余額”時,很難知道。 如果“現金余額只有1行或曾經是1行,那么您將需要添加If Then Else
控件來處理它。
同樣,A35在每個循環中都會被覆蓋...因此不確定在此要做什么。
我希望我能夠很好地理解您的問題,以使您朝正確的方向前進。
不再將“現金余額”視為命名范圍。 我相信VBA會掛在該范圍的原始行號上,類似於以下所述分配變量數組時從1開始的方式。 看起來您沒有在修改“現金余額”,因此在循環之前但在CashbRows之后創建一個變量數組。
例:
Dim CB() as variant, j as long
with sheets("PUT THE SHEET NAME OR INDEX HERE")
CB = .range(.cells(1,6), .cells(CashbRows,6)).value 'address to whatever .offset(,5) is
'i assumed cashb was in column A
代替.Range(.Cells(35, 1), .Cells(35 + CashbRows, 1)) = Cashb.Offset(, 5).Value
使用:
For j = 1 to CashbRows
.cells(34 + j, 1) = CB(j)
Next j
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.