webdevqa.jp.net

行をループしてセル値を別のワークシートにコピーするExcel

macroで望ましい結果を達成するのに、いくつかの困難に直面しています。

意図

sheets(input).column Aにデータのリストがあります(値を持つ行の数は異なるため、アクティブセルが空白になるまでマクロを実行するループを作成しました)。

私のマクロはRange(A2)から始まり、列Aまでずっと伸びます。空白行にヒットしたときのみ停止します

マクロの望ましい結果は、sheet(input).Range(A2)のセル値のコピーを開始してsheet(mywork).Range(B2:B6)に貼り付けることです。

たとえば、「Peter」がセルsheet(input),range(A2)の値だった場合、marcoが実行され、sheet(mywork) range(B2:B6)に値が貼り付けられます。すなわち、範囲_B2:B6_は「Peter」を反映します

次に、マクロはシート(入力)にループバックし、次のセル値をコピーしてrange(B7:B10)に貼り付けます

:「Dave」はsheet(input) Range(A3)の値でしたが、「Dave」はsheet(mywork).Range(B7:B10)の次の4行に貼り付けられます。 _B7:B10_は「Dave」を反映します

再び同じプロセスを繰り返すと、今回はrange(A4)に戻り、値はsheet(mywork)にコピーされ、_B11:B15_に貼り付けられます。

基本的にプロセスが繰り返されます。

マクロは、sheet(input) column Aのactivecellが空になると終了します。

_Sub playmacro()
    Dim xxx As Long, yyy As Long
    ThisWorkbook.Sheets("Input").Range("A2").Activate
    Do While ActiveCell.Value <> ""
        DoEvents
        ActiveCell.Copy
        For xxx = 2 To 350 Step 4
            yyy = xxx + 3
            Worksheets("mywork").Activate 
            With ActiveSheet
                .Range(Cells(xxx, 2), Cells(yyy, 2)).PasteSpecial xlPasteValues
            End With
        Next xxx
        ThisWorkbook.Sheets("Input").Select
        ActiveCell.Offset(1, 0).Activate
    Loop
    Application.ScreenUpdating = True
End Sub
_
5
user2451335
Private Sub CommandButton1_Click() 

Dim Z As Long 
Dim Cellidx As Range 
Dim NextRow As Long 
Dim Rng As Range 
Dim SrcWks As Worksheet 
Dim DataWks As Worksheet 
Z = 1 
Set SrcWks = Worksheets("Sheet1") 
Set DataWks = Worksheets("Sheet2") 
Set Rng = EntryWks.Range("B6:ad6") 

NextRow = DataWks.UsedRange.Rows.Count 
NextRow = IIf(NextRow = 1, 1, NextRow + 1) 

For Each RA In Rng.Areas 
    For Each Cellidx In RA 
        Z = Z + 1 
        DataWks.Cells(NextRow, Z) = Cellidx 
    Next Cellidx 
Next RA 
End Sub

代わりに

Worksheets("Sheet2").Range("P2").Value = Worksheets("Sheet1").Range("L10") 

これはCopynPaste-メソッドです

Sub CopyDataToPlan()

Dim LDate As String
Dim LColumn As Integer
Dim LFound As Boolean

On Error GoTo Err_Execute

'Retrieve date value to search for
LDate = Sheets("Rolling Plan").Range("B4").Value

Sheets("Plan").Select

'Start at column B
LColumn = 2
LFound = False

While LFound = False

  'Encountered blank cell in row 2, terminate search
  If Len(Cells(2, LColumn)) = 0 Then
     MsgBox "No matching date was found."
     Exit Sub

  'Found match in row 2
  ElseIf Cells(2, LColumn) = LDate Then

     'Select values to copy from "Rolling Plan" sheet
     Sheets("Rolling Plan").Select
     Range("B5:H6").Select
     Selection.Copy

     'Paste onto "Plan" sheet
     Sheets("Plan").Select
     Cells(3, LColumn).Select
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
     False, Transpose:=False

     LFound = True
     MsgBox "The data has been successfully copied."

     'Continue searching
      Else
         LColumn = LColumn + 1
      End If

   Wend

   Exit Sub

Err_Execute:
  MsgBox "An error occurred."

End Sub

そして、Excelでそれを行ういくつかのメソッドがあるかもしれません。

6
user2432923