概要:私の会社には2つの異なるスプレッドシートがあり、それぞれに多くのポリシーがあります。彼らは私にポリシーIDでポリシーを照合し、古いスプレッドシートから新しいスプレッドシートにすべての古いメモを転送することを望んでいます。
理由:私の問題は、これを行う方法を理解していないことではなく、これを行うための最良の方法です。StackOverflowに参加して以来、私はすべきこととすべきでないことを言われてきました。For Each
単純なループではなく、ループを使用する方がよいと何度も言われてきましたDo
。また、私は.Select
頻繁に使用するべきではないと言われました(しかし私はそうします)。
通常の方法:通常はループを使用しDo
てデータを調べ、データを選択して.Find
使用します。ActiveCell
現在の行の他の列とやり取りする場合は、を使用しますActiveCell.Offset()
。私はいつもそれを愛し.Select
て使用する傾向がありますが、このプロジェクトでは、箱から出して自分自身を押し出し、悪いコーディングの習慣を変えて、より良いものを使い始めようとしています。
質問:ループActiveCell.Offset()
を使用しているときに、と同等のことを行うにはどうすればよいですか?For Each
これまでの私のコード: **質問/批評を歓迎します
Sub NoteTransfer()
transferNotes
End Sub
Function transferNotes()
Dim theColumn As Range
Dim fromSheet As Worksheet
Dim toSheet As Worksheet
Dim cell As Range
Dim lastRow As Integer
Set fromSheet = Sheets("NotesFrom")
Set toSheet = Sheets("NotesTo")
With fromSheet 'FINDING LAST ROW
lastRow = .Range("B" & .Rows.Count).End(xlUp).Row
End With
Set theColumn = fromSheet.Range("B5:B" & lastRow)
For Each cell In theColumn 'CODE FOR EACH CELL IN COLUMN
If cell.Text = "" Then
'do nothing
Else
With toSheet 'WANT TO FIND DATA ON THE toSheet
Cells.find(What:=cell.Text, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
End With
End If
Next cell
End Function
例
シートの下部