数千行のExcelスプレッドシートがあります。そのスプレッドシートから7行ごとに選択します。(「選択」とは、他の行をすべて削除するか、選択した行を新しいワークシートにコピーすることを意味します。)
Excel 2003でこれを行う最も簡単な方法は何ですか?
関連項目:Numbersの各n番目の行を選択する
数千行のExcelスプレッドシートがあります。そのスプレッドシートから7行ごとに選択します。(「選択」とは、他の行をすべて削除するか、選択した行を新しいワークシートにコピーすることを意味します。)
Excel 2003でこれを行う最も簡単な方法は何ですか?
関連項目:Numbersの各n番目の行を選択する
回答:
個人的には、最初の3行または4行(もちろん7行単位で)を実行するマクロを記録し、その行を新しいシートにコピーします。次に、マクロを編集して、7のステップで、シートにある行の数をカウントするループを使用します。
擬似コードの例:
Dim i as Integer
For i = 1 To 1000 Step 7
'Add current row to selection
...
Next i
'Copy the selected rows to new sheet
...
ランドルフ・ポッターが始めたアイデアを本当に完成させただけです。
記録については、記録によってこれを思い付くことができるとは思わない。マクロの記録は、Excelオブジェクトモデルに慣れるには良い方法ですが、再利用可能な関数を記述するのにはあまり良い方法ではありません。
Option Explicit
'A simple test that copies every 7th row from the active sheet to a new sheet.
Sub SimpleTest()
Dim r As Range
Dim ws As Worksheet
Set r = GetEveryNthRow(7)
If Not r Is Nothing Then
Set ws = Worksheets.Add(Before:=Sheets(1))
r.Copy ws.Range("A1")
Else
MsgBox "Nothing came back from GetEveryNthRow"
End If
Set ws = Nothing
Set r = Nothing
End Sub
'
Function GetEveryNthRow(ByVal NthRow As Long) As Range
Dim keepRows As Range
Dim r As Range
If NthRow > 0 Then
Set keepRows = Rows(1)
For Each r In ActiveSheet.UsedRange.Rows
If (r.Row Mod NthRow) = 0 Then
Set keepRows = Union(keepRows, Rows(r.Row))
End If
Next r
Set GetEveryNthRow = keepRows
Else
MsgBox "The row multiple provided must be greater than 0"
End If
Set keepRows = Nothing
End Function
1
ます。7行ごとに選択するには、より簡単な方法があります。列の最初の7行に1つ(最初の行)を入力します。次に、この7行を選択し、列全体にコピーします。必要なのは、SELECT-> GO TO SPECIAL-> select BLANKS-> OKに行くことです。各7行を選択します。これで、必要なことを実行できます。楽しい!
7行ごとに、