[英]Excel VBA - Copy and Paste
我正在嘗試獲取將搜索格式化為日期的單元格的VBA編碼,並且對於所有日期格式,再次搜索其上方的特定文本並將其復制到日期單元格所在的行。
為了說明,下面是我試圖解決的數據樣本。 對於C列中格式化為日期的任何單元格,我希望代碼找到客戶編號(單元格C2)和客戶名稱(D2)並復制到適用行上的A列和B列。 問題出現了,因為我的數據中的許多客戶都有多個憑證,所以我不能硬編碼它只是在具有日期的單元格上方兩行。 我希望我有意義!
Customer account Name
1001010 Internal : Sales Admin (9900)
Date Voucher
12/7/2011 CINV00000980
1/26/2012 CINV00001011
2/9/2012 CINV00001050
3/6/2012 CINV00002003
3/13/2012 CINV00002067
我正在嘗試使用嵌套的Do循環(見下文),顯然它不起作用。 代碼正在運行,但沒有發生復制/粘貼。
Sub ARAging()
Dim row As Integer
row = 2
finalrow = ActiveSheet.UsedRange.Rows.Count
Do
If Range(Cells(row, 3), Cells(row, 3)).NumberFormat = "dd/mm/yyyy" Then
Do
If Range(Cells(row, 3), Cells(row, 3)).Value = "Customer account" Then
Range(Cells(row - 1, 3), Cells(row - 1, 4)).Select
With Selection.Copy
End With
End If
row = row - 1
Loop Until Range(Cells(row, 3), Cells(row, 3)).Value = "Customer account"
Range(Cells(row, 1), Cells(row, 2)).Select
With Selection.Paste
End With
End If
row = row + 1
Loop Until row = finalrow
End Sub
任何幫助,將不勝感激!
我認為這段代碼可以滿足您的需求。 我希望我已經包含了足夠的評論來解釋我的代碼。 如有必要,請回答問題。
' Option Explicit means every variable must be explicitly declared. Without
' it a misspelt variable name becomes an implicit declaration. This can be
' a very difficult error to find.
Option Explicit
Sub ARAging()
' On a 32-bit system, the native size is what Excel calls Long. So integer
' variables are slower than long variables.
' My style is to start a variable name with its type and then add classifiers
' to identify its purpose. This means that when I return to this macro in
' six or twelve months, I know what the variables are. If you do not like my
' style, develop your own or develop one with colleagues. Consistent names
' are a godsend during maintenence.
Dim acctNumCust As String
Dim rowCrnt As Long
Dim rowFinal As Long
With Worksheets("Sheet1")
' I avoid ActiveSheet unless I want the user to be able to run the macro
' against a worksheet of their choice.
acctNumCust = ""
rowFinal = .UsedRange.Rows.Count
For rowCrnt = 2 To rowFinal
' In .Cells(R,C), C can be a number or a column code.
' If I am accessing a single cell, I do not need to make it into
' a range since .Cells(R,C) is a range.
If .Cells(rowCrnt, "C").Value = "Customer account" Then
' Since I know column C is "Customer account", I do not need to
' save it. Save the value of column 4 in a variable not the
' scratchpad.
acctNumCust = .Cells(rowCrnt, "D").Value
' I do not like testing for the formatting. What if the user changes
' it to dd-mmm-yy?
ElseIf IsDate(.Cells(rowCrnt, "C").Value) Then
.Cells(rowCrnt, "A").Value = "Customer account"
.Cells(rowCrnt, "B").Value = acctNumCust
Else
Call MsgBox("Cell C" & rowCrnt & " is neither """ & _
"Customer account"" nor a date", vbOKOnly)
End If
Next rowCrnt
End With ' Worksheets("Sheet1")
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.