私は、日付としてフォーマットされたセルを検索するVBAコーディングを取得しようとしています。また、すべての日付フォーマットで、その上の特定のテキストを再度検索し、日付セルがある行にコピーします。
説明するために、以下は私のデータのサンプルです。私は解決しようとしています。日付としてフォーマットされているC列のセルについては、顧客番号(セルC2)と顧客名(D2)を見つけて列AとBにコピーすることを望みます該当する行に表示されます。この問題は、データの顧客の多くが複数のバウチャーを持っているために発生するため、日付が付いたセルの2行上にハードコードすることはできません。
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
どんな助けもありがとう!
回答:
回答№1は2私はこのコードがあなたが望むことをすると思います。私は私のコードを説明するのに十分なコメントを入れておきたいと思います。必要に応じて質問に戻りましょう。
" 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