0

私はまだVBを学んでいます。メインシートで名前を選択し、別のシートに移動してその名前のすべての行を見つけ、すべての行をコピーしてメインシートに戻り、選択したセルの下にコピーしたセルを挿入する VB スクリプトを Excel 2010 で記録しようとしました名前。セルが押し下げられます。コピーされたセルが貼り付けられた場所の下にある次の名前に対して、コードを繰り返す必要があります。

私の録音では、上記のすべてを行うことができませんでした。提案はありますか?

    Sub Macro5()
'
' Macro5 Macro
'
' Keyboard Shortcut: Ctrl+l
'
    Selection.Copy
    Sheets("Sheet1").Select
    ActiveCell.Offset(2, 3).Range("A1").Select
    Cells.Find(What:="Leeanne Hickmott", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Rows("1:3").EntireRow.Select
    ActiveCell.Offset(0, -7).Range("A1").Activate
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet4").Select
    ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown
    ActiveCell.Offset(3, 6).Range("A1").Select
End Sub
4

1 に答える 1

0

Excel のマクロ記録プロセスでは、そのようなマクロを機能させるために必要な条件やループを記録できません。また、検索ダイアログに値を貼り付けたことを記録することもできません。「Leeanne Hickmott」を検索したいことを記録するだけです。

私の最初の提案は、範囲変数を使用して、各ワークシートの重要なセルを指すことです。例えば...

Dim rngPasteHere as Range, rngCopyFrom as Range
set rngPasteHere = Selection
set rngCopyFrom = Sheets("Sheet1").Range("D1")
' find first row
set rngCopyFrom = rngCopyFrom.Cells.Find(What:=rngPasteHere.Value _
                             , After:=rngCopyFrom, LookIn:=xlFormulas _
                             , LookAt:=xlPart, SearchOrder:=xlByRows _
                             , SearchDirection:=xlNext, MatchCase:=False _
                             , SearchFormat:=False)

次の名前のプロセス全体を繰り返す外側のループと、現在の名前を持つすべての行を検索する内側のループの 2 つのループも必要です。あなたのデータがどのように見えるかを知らなければ、それ以上に具体的になることはできません。

  1. 名前はアルファベット順に並べられていますか?
  2. 同じ名前のすべての行が隣り合っていますか、それとも他の名前が混在していますか?
  3. それぞれの名前が数行あるだけですか、それとも数千行ありますか?
于 2012-11-21T02:28:16.823 に答える