• ベストアンサー

Excelのマクロでセルの値をコピーしたいのですが

 他の方も質問されているのかもしれませんが、見つけられなかったので教えてください。 Excelのセルに A1001~A2000まで数値が入っているとします それをA1~E1までにA1001~A1005までの数値を A2~E2までにA1006~A1010までの数値をコピー(参照)し、これを繰り返してA2000の数値まで対応したいのですが、マクロでコピーを組むにはどうしたらよいのでしょうか? ちなみに、OSはWin2000 ExcelはExcel2000です。  全く初歩的な質問ですみません。

  • dogs59
  • お礼率77% (279/359)

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

なんかアルゴリズム大会になりそうな予感ですが、以下ではどうでしょう 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)
回答No.7

訂正です FOR EACHは#02さんでした。失礼しました

dogs59
質問者

お礼

 色々とありがとうございます。何度勉強してもマクロがよくわからず、結局、皆さんのお知恵を拝借することになってしまいます。これに懲りずにまたよろしくお願いします。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

#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)
回答No.5

色々な回答が出揃ってきましたけど、こんなのはいかがでしょう。 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

dogs59
質問者

お礼

 ありがとうございます。  難しくて文法などがよくわかりませんが、色々な方法があるということはわかりましたので、試してみます。

  • ao777
  • ベストアンサー率34% (43/123)
回答No.4

なんとなく他の方法も考えてみました。 テストしておりません。 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

dogs59
質問者

お礼

 ありがとうございます。  難しくて文法などがよくわかりませんが、色々な方法があるということはわかりましたので、試してみます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

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 ではどうでしょう?

dogs59
質問者

お礼

 ありがとうございます。  難しくて文法などがよくわかりませんが、色々な方法があるということはわかりましたので、試してみます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

こんな感じでしょうか。 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」という参照式の事ですか?

dogs59
質問者

お礼

 ありがとうございます。  難しくて文法などがよくわかりませんが、色々な方法があるということはわかりましたので、試してみます。  参照の意味は、本来は、式を入れたかったのですが、難しいので、数値でかまいません。私がやろうとしたことでは、結果は同じですし。

関連するQ&A

  • エクセル マクロ 参照データのコピー

    エクセル2010を使っています。 A1セルに 山田 と入っています。 A5セルに =A1と入っていて 山田 が表示されています。 その状態でマクロ Sub ボタン1_Click() Worksheets("sheet1").Range("A5").Copy Worksheets("sheet2").Range("A5") End Sub を実行すると、コピーは出来るのですが、表示が #REF となってしまいます。 おそらくコピーしたA5セルが他セルを参照しているからだと思いますが、これを正しく表示させるにはどういった方法があるでしょうか? 実際の範囲はすごく広いので、あくまでも 他セルを参照しているセルをマクロでコピーしても、見えている数値を表示させる方法を知りたいです。 詳しい方、よろしくお願いいたします。

  • エクセルマクロでコピーの質問です。

    エクセルマクロでコピーの質問です。 こんにちわ^^; よくわからないエラーが起こっているため困っています。 1.xlsという別のエクセルを開いて指定のセルをコピーし、貼り付けるということで下記のマクロを作ってみました。 ちなみにマクロを書いたファイルはsum.xlsで、1.xlsのコピーしたいセルには数値のみ入っています(書式は会計)。 Sub before() Workbooks.Open Filename:="c:¥aaa¥1.xls" Range("a1:a5").Copy ActiveWindow.Close Range("a1").PasteSpecial End Sub しかし、このマクロをThisWorkbookに貼り付けると文字列として保存されてしまいます。 そこで最後の行を Range("a1").PasteSpecial Paste:=xlValues にするとエラー400が出ます。 一応、sheet1(sheet1)に貼り付けて実行してみたところ、コピー自体ができませんでした。 まだ余りエクセルマクロを理解していないため、なぜなのかが良くわからないのでアドバイスをお願いいたします。 ちなみに使っているのはoffice2003のエクセルです。

  • エクセルのマクロで、セルの値を参照してジャンプ

    エクセルのマクロで、セルの値を参照して、 別シートにジャンプして貼り付けたいと思っています。 <Sheet1>  |  A  B  C ------------------------------------ 1|  A1  あ  100 2|  B5  い  50 3|  C7  う  80 4|  D3  え  20 5|  E9  お  40 <Sheet2>  |  A  B  C  D  E ------------------------------------ 1|  あ 2|  100 3|         え 4|         20 5|    い 6|    50 7|       う 8|       80 9|            お 10|            40 といったイメージです。(お分かり頂けますか?) Sheets1!B1:C1を選択し、A1のセルの値を参照して、Sheets2!A1にジャンプして、 行列入れ替えて貼り付ける、といったマクロを組みたいのですが、 セルの値を参照する部分が分かりません。 実際はSheets2の様なシートは複数あり、1つのリストから複数の形式を変えた表を 作りたいと思っています。 Sheets2以降のシートに見出し行を加え、VLOOK関数を組み込んだ表を作っておき、 結果を貼り付けて見出し行を削除する、といったマクロは組めるのですが、 セルを参照してジャンプして貼り付けてくれると便利だと思い質問させて頂きました。 どなたかお知恵を拝借できましたら嬉しいです。 宜しくお願い致しますm(_ _)m

  • エクセルでセルの値を参照してコピー

    エクセルで一枚の表があり、 各行の先頭列はユニークなIDが入力してあります。 例; 100 ◆ ▲ ● : 123 ■ ▽ ◎ : 200 ◇ ▲ ○ というIDがある表が、 A3からD102まであるとします。 A1セルに 123という数値を入力して、 マクロを登録したボタンを押すと、 123が先頭列のデータをコピー (この場合はA25~D25ですね) して、 A2セルに貼り付けるためには、 どのようなマクロを書けばよろしいでしょうか? 説明が足りなければ補足させていただきますので、 どなたかご教示いただければ幸甚です。 よろしくお願いします。

  • お世話になります。エクセルマクロにてセルの塗りつぶしについてご教授願い

    お世話になります。エクセルマクロにてセルの塗りつぶしについてご教授願いします やりたい事は分刻みでのタイムチャ-トを作りたいのですが (1)セルA1からA50に数値が入っている (2)その数値を参照に別シ-トにその数値分、横軸に色をつけたい A1に10が入っていれば10セル分色をつける A2に5が入っていれば A1で塗りつぶした10セルの後に5セル分続けて塗りつぶす という具合です マクロの記録に少し手を加えるくらいの知識しか有りませんが 宜しくお願い致します

  • マクロでエクセルに張り付けるとA1に全部入ります

    Win XP、Excel2000のマクロでコピーして他エクセルに張り付けようとするとA1に全部データが入り、 コピー元と同じセルに入りません。 同じマクロを使ってる人で一人だけですが、張り付けの初期値を設定する方法でもあるのですか?

  • エクセルのマクロ

    エクセルのマクロでわからないことがあり質問なんですが A1セルの数値がリアルタイムに更新されていて このA1セルの数値が更新されるたびに B1とB2にA1セルの最新の値を交互にコピーしていくマクロを 作りたいんですがうまくいきません。 例としては A1に1と表示→B1に1と表示 A1に7と表示→B2に7と表示 A1に18と表示→B1に18と表示 これをA1セルが更新され続ける限り繰り返しすマクロです。 どなたか教えていただけるとありがたいです。

  • (エクセル)複数のセルの数値を、一つのセル羅列したい

    いつもお世話になります。 エクセル初心者(マクロも関数も;;)です。 表題の通り、複数のセルにある数値を一つのセルにまとめる方法を探しています。 例えば、 --------------------------     A   B   C   D 1   123  45   67  1234567 2   00   11   22  001122 -------------------------- のようにDの縦列にA・B・Cの数値を (合計ではなく)羅列させたいのです。 すごく初歩的な質問のようなことだと思いますが これがわかりません。。。 どうか簡単な方法を教えて下さい。 あと数値じゃなくて文字列でも同じような事ができるでしょうか? 環境:Excel2003

  • EXCELでセルの移動マクロを作りたいのですが…

    EXCELについての質問です。マクロを使ってセルの移動をさせたいと考えています。 まず使うデータ範囲はA1:E11です。A1:E10にはデータが入っています。 ちなみに、A列には名前、B~E列には数字が入っており、A11:E11は合計が表示される設定しており、合計の場所はここに固定させたいのです。 その移動のさせ方ですが、 A1:E1に空欄があるとします。 そのときに、マクロを再生させるとA2:E10のセルに入っているデータ(値のみ)を上に移動させたいのです。 さらに、A3:E3の内容を消して空欄が出来たとします。 その時に同じ操作によってA4:E10のデータを上に移動させたいのです。 前者のマクロを単純に作ると縦に9つ分のセルを移動させるマクロでは、 A11:E11も上に移動させられてしまいます。なので、移動させるセルの一番下が10行目になるようなマクロを作りたいのです。 何がしたいのかといいますと、いらないデータを消した時に空欄をマクロで詰めてしまいたいのです。 乱文で判りづらいかと思いますが、知識のある方教えていただけないでしょうか。 よろしくお願い致します。

  • マクロを使ってセルをコピー

    マクロ初心者です。 質問内容が分かりづらいかと思いますが、どうぞよろしくお願いします。 あるセル(例えばA1とします)の値を列に876個(A877まで)コピーするというマクロを作りたいのですが、どうしても出来ません。 参考HP等ありましたら、お願いします。

専門家に質問してみよう