- ベストアンサー
Excelのマクロでセルの値をコピーしたいのですが
他の方も質問されているのかもしれませんが、見つけられなかったので教えてください。 Excelのセルに A1001~A2000まで数値が入っているとします それをA1~E1までにA1001~A1005までの数値を A2~E2までにA1006~A1010までの数値をコピー(参照)し、これを繰り返してA2000の数値まで対応したいのですが、マクロでコピーを組むにはどうしたらよいのでしょうか? ちなみに、OSはWin2000 ExcelはExcel2000です。 全く初歩的な質問ですみません。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
なんかアルゴリズム大会になりそうな予感ですが、以下ではどうでしょう Option Explicit Sub DtCopy() Dim idxCopy, idxPaste As Long idxPaste = 1 Application.ScreenUpdating = False For idxCopy = 1001 To 2000 Step 5 Cells(idxPaste, 1).Offset(0, 0) = Cells(idxCopy, 1).Offset(0, 0) Cells(idxPaste, 1).Offset(0, 1) = Cells(idxCopy, 1).Offset(1, 0) Cells(idxPaste, 1).Offset(0, 2) = Cells(idxCopy, 1).Offset(2, 0) Cells(idxPaste, 1).Offset(0, 3) = Cells(idxCopy, 1).Offset(3, 0) Cells(idxPaste, 1).Offset(0, 4) = Cells(idxCopy, 1).Offset(4, 0) idxPaste = idxPaste + 1 Next idxCopy Application.ScreenUpdating = True End Sub もし値をコピーするのではなく a1 に =a1001 b1 に =a1002 という式を入れたいのであれば補足にその旨を書いてください
その他の回答 (6)
- zap35
- ベストアンサー率44% (1383/3079)
訂正です FOR EACHは#02さんでした。失礼しました
- zap35
- ベストアンサー率44% (1383/3079)
#01です。面白いので処理時間(ms)を出してみました。数字はmsで1回目、2回目を掲載します #01 230ms、211ms #02さん 631ms、591ms #03さん 170ms、170ms #04さん 180ms、200ms #05さん 181ms、180ms #05さんのFOR~NEXTの入れ子でも遅くならないのが面白いですね。また#03さんのFOR EACHが一番速かったのも実は意外でした (参考 処理時間をmsでだすプログラム) Private Declare Function GetTickCount Lib "kernel32" () As Long Sub xxxx() Dim ST As Long 前処理 Application.ScreenUpdating = False ST = GetTickCount For 繰り返し処理 Next Application.ScreenUpdating = True MsgBox (GetTickCount - ST & " ms") End Sub
- ipsum11
- ベストアンサー率21% (55/251)
色々な回答が出揃ってきましたけど、こんなのはいかがでしょう。 r = 0 For i = 1001 To 2000 r = r + 1 For l = 1 To 5 Cells(r, l) = Cells(i, 1) i = i + 1 Next l i = i - 1 Next i
お礼
ありがとうございます。 難しくて文法などがよくわかりませんが、色々な方法があるということはわかりましたので、試してみます。
- ao777
- ベストアンサー率34% (43/123)
なんとなく他の方法も考えてみました。 テストしておりません。 Dim ro1 As Integer Dim ro2 As Integer Dim co1 As Integer ro1 = 1001 ro2 = 2 co1 = 1 Do Until ro1 >= 2000 Cells(ro2, co1).Value = Cells(ro1, 1).Value Cells(ro2, co1 + 1).Value = Cells(ro1 + 1, 1).Value Cells(ro2, co1 + 2).Value = Cells(ro1 + 2, 1).Value Cells(ro2, co1 + 3).Value = Cells(ro1 + 3, 1).Value Cells(ro2, co1 + 4).Value = Cells(ro1 + 4, 1).Value ro1 = ro1 + 5 ro2 = ro2 + 1 Loop End Sub
お礼
ありがとうございます。 難しくて文法などがよくわかりませんが、色々な方法があるということはわかりましたので、試してみます。
- merlionXX
- ベストアンサー率48% (1930/4007)
Sub test1() n = 1 For i = 1001 To 2000 Step 5 Range(Cells(i, 1), Cells(i + 4, 1)).Copy Cells(n, 1).PasteSpecial Paste:=xlValues, Transpose:=True Application.CutCopyMode = False n = n + 1 Next End Sub ではどうでしょう?
お礼
ありがとうございます。 難しくて文法などがよくわかりませんが、色々な方法があるということはわかりましたので、試してみます。
- hana-hana3
- ベストアンサー率31% (4940/15541)
こんな感じでしょうか。 Dim C As Range Dim ct As Integer Dim r As Integer r = 1 For Each C In Range("A1001:A2000") ct = ct + 1 Cells(r, ct) = C.Value If ct = 5 Then r = r + 1 ct = 0 End If Next >数値をコピー(参照) 参照というと「=A1001」という参照式の事ですか?
お礼
ありがとうございます。 難しくて文法などがよくわかりませんが、色々な方法があるということはわかりましたので、試してみます。 参照の意味は、本来は、式を入れたかったのですが、難しいので、数値でかまいません。私がやろうとしたことでは、結果は同じですし。
お礼
色々とありがとうございます。何度勉強してもマクロがよくわからず、結局、皆さんのお知恵を拝借することになってしまいます。これに懲りずにまたよろしくお願いします。