[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『変数のコピーがわかりません』(卒論終わらんorz)
マクロを勉強しだして1時間のど素人です。
1082行から2164行目まで8個飛ばしで行全体をコピーしたくて下のように組んでみたのですが全然わかりません助けてください。
Sub ()
Dim i As Integer
For i = 1082 To 2164 Step 8
Sheets("Sheet3").Rows(i).Copy
Next i
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
コピーしたものを、どこにペーストしたいのでしょうか?
(β) 2017/01/29(日) 07:18
(γ) 2017/01/29(日) 08:32
エクセルのシート間でのコピー、ペーストだと仮定すると、 Sheet3がコピー元、Sheet4がコピー先ってことで、いいですかね?
たかだか、135行ぐらいなら、行毎にコピーペイストを繰り返すのが、 簡単でいいでしょう。
5000行以上あったら、作業列を用いて、 【並べ替え】または、【フィルター】処理した後に、 コピーして、元に戻すって方法かな…?
>γさん >行をUnionで累積 20行分ぐらいしか、Unionで一度に処理できなかったような?
それとも、コピー先が、エクセルじゃなくて、メモ帳とか、違うアプリ ですかね? γさんがおっしゃるように、コピー先は考えないで、 クリップボードにコピーするだけですかね?
それと、行全体ってありますけど。列は決まってないんですかね。 本当に? A〜Z列までで十分だったりしませんか?
(マリオ) 2017/01/29(日) 10:02
>>20行分ぐらいしか、Unionで一度に処理できなかったような?
えっ? そんなことはないですよ。 以下の例は、1000個ほどしか結合していませんが、実際はもっともっと可能です。 (アドレス文字列は制限がありますが)
Sub Test() Dim r As Range Dim i As Long
For i = 1 To 2000 Step 2 If r Is Nothing Then Set r = Cells(i, "A") Else Set r = Union(r, Cells(i, "A")) End If Next
MsgBox r.Address & vbLf & r.Count
r.Select
End Sub
(β) 2017/01/29(日) 10:24
↑ アップしたコードは単一セルのUNION ですが、行領域にしても同じです。
(β) 2017/01/29(日) 10:56
(γ) 2017/01/29(日) 14:40
>γさん、βさん >繰り返しを使うので、ふたつの領域をUnionするだけです。 Set r = Union(r, Cells(i, "A")) とすれば、いいのか〜 繰返して、Setし直すんですね。Unionする領域は2つだけですね。
余談ですが…、一度にUnionできるセル領域は★30個までですね。下記の例だと、test1はNG1で、test2はOK ★セル領域の30個制限は、マクロじゃなくて、関数でも、いくつかありますね。SUM関数とか
Sub test1() Dim r As Range Set r = Union(Cells(1, "A"), Cells(2, "A"), Cells(3, "A"), Cells(4, "A"), Cells(5, "A"), _ Cells(6, "A"), Cells(7, "A"), Cells(8, "A"), Cells(9, "A"), Cells(10, "A"), _ Cells(11, "A"), Cells(12, "A"), Cells(13, "A"), Cells(14, "A"), Cells(15, "A"), _ Cells(16, "A"), Cells(17, "A"), Cells(18, "A"), Cells(19, "A"), Cells(20, "A"), _ Cells(21, "A"), Cells(22, "A"), Cells(23, "A"), Cells(24, "A"), Cells(25, "A"), _ Cells(26, "A"), Cells(27, "A"), Cells(28, "A"), Cells(29, "A"), Cells(30, "A"), _ Cells(31, "A")) MsgBox r.Address End Sub
Sub test2() Dim r As Range Set r = Union(Cells(1, "A"), Cells(2, "A"), Cells(3, "A"), Cells(4, "A"), Cells(5, "A"), _ Cells(6, "A"), Cells(7, "A"), Cells(8, "A"), Cells(9, "A"), Cells(10, "A"), _ Cells(11, "A"), Cells(12, "A"), Cells(13, "A"), Cells(14, "A"), Cells(15, "A"), _ Cells(16, "A"), Cells(17, "A"), Cells(18, "A"), Cells(19, "A"), Cells(20, "A"), _ Cells(21, "A"), Cells(22, "A"), Cells(23, "A"), Cells(24, "A"), Cells(25, "A"), _ Cells(26, "A"), Cells(27, "A"), Cells(28, "A"), Cells(29, "A"), Cells(30, "A")) MsgBox r.Address End Sub
(マリオ) 2017/01/30(月) 04:18
βさんのTestコード【(β) 2017/01/29(日) 10:24】で、 Debug.Print r.Address & vbLf & r.Count してみたら、イミディエイトウィンドウには次のように記述されました。 ***************************************************************** $A$1,$A$3,$A$5,$A$7,$A$9,$A$11,$A$13,$A$15,$A$17,$A$19,$A$21,$A$23,$A$25,$A$27,$A$29,$A$31,$A$33,$A$35,$A$37,$A$39,$A$41,$A$43,$A$45,$A$47,$A$49,$A$51,$A$53,$A$55,$A$57,$A$59,$A$61,$A$63,$A$65,$A$67,$A$69,$A$71,$A$73,$A$75,$A$77,$A$79,$A$81,$A$83,$A$85 1000 ***************************************************************** r.Addressの文字列で記録できるのは、43個までみたいです。 $A$1〜$A$85は、$A$1〜$A$86で【86】あると仮定すると、 86÷2=43(奇数のものだけは、半分の43) ★ただ、文字列としては、43個でも、実際には rには、1000個のセル範囲が記録されているみたいですね。
卒論終わらんorzさんの要望に応えると、次のようなコードでしょうか。 ***************************************************************** Sub Test3() Dim r As Range Dim i As Long Dim sh1 As Worksheet, sh2 As Worksheet Set sh1 = ThisWorkbook.Sheets("Sheet3") '★コピー元シート Set sh2 = ThisWorkbook.Sheets("Sheet4") '★コピー先シート Dim sc As Integer Dim fc As Integer sc = 1 '★コピー元シートの開始列 fc = Columns.Count '★コピー元シートの最終列
For i = 1082 To 2164 Step 8'★コピー元シートの開始行と最終行(※8行飛ばし) If r Is Nothing Then Set r = sh1.Range(sh1.Cells(i, sc), sh1.Cells(i, fc)) Else Set r = Union(r, sh1.Range(sh1.Cells(i, sc), sh1.Cells(i, fc))) End If Next Debug.Print r.Address & vbLf & r.Count 'イミディエイトウィンドウで確認 r.Copy 'コピーして sh2.Range("A1").PasteSpecial '★コピー先のシートに貼付け(A1を基準セルにして)書式も '★値だけならコチラ 'Sheets("Sheet4").Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 'コピーモードを解除 End Sub
(マリオ) 2017/01/30(月) 04:18
(γ) 2017/01/30(月) 08:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.