• ベストアンサー

このコード(For Each…)ですが、うまく実行できません!

EXEL 2002 です。 下記コードなのですが、 うまくできません、 「For Each…」の下2行がエラーとなります。 何卒、ご教示よろしくお願い致します。 -------------------- Sub 下方表の各列を上方へ貼付る() '下方の表の各列を、上方に貼り付ける Dim r As Range With Worksheets(Worksheets.Count - 1) For Each r In .Range("G40:Z40") .Range(r.Offset(0, 0), .Range(r.Offset(0, 0)).End(xlDown)).Copy _ .Range (r.Offset(-38, 1)) Next r End With End Sub

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

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

[.Offset(0, 0)]は無駄。 [.Range(r.Offset(0, 0))]も同様。 Range(Range("A1")).Select と書いて実行して見てください。 Sub 下方表の各列を上方へ貼付る2() '下方の表の各列を、上方に貼り付ける Dim r As Range With Worksheets(Worksheets.Count - 1) For Each r In .Range("G40:Z40") .Range(r, r.End(xlDown)).Copy r.Offset(-38, 1) Next r End With End Sub

oshietecho-dai
質問者

お礼

ご回答、誠に有難うございました。 解決できました。

その他の回答 (4)

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.5

各シートの該当列の最終行(40行より下)を、右列の2行目にコピーみたいですが... パターン的にそのセルには計算式がありませんか?数値化していいなら r.Offset(-38,1) = .Range(r,r.End(XlDown)).Value じゃ駄目なんでしょうか?

oshietecho-dai
質問者

お礼

ご回答、誠に有難うございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

コードだけあげて、回答者に推測させるのでなく、何がしたいのか文章でも質問に書くべきです。 普通の人がやらないコードであるので、読者は何がやりたいのか掴むのに混乱する。 ーーー r.Offset(0, 0)   r.Offset(0, 0) こんなの何の意味があるの。rでよいのでは? ーー copyはセル範囲を対象にするが、End(xlDown)では範囲を指定したことになる? Range(r.Offset(0, 0), .Range(r.Offset(0, 0)).End(xlDown)). に代えて Sub test01() Range("B5:B5").End(xlDown).Select End Sub をやってみたが意味ないようだよ。 -- Range (r.Offset(-38, 1)) コピー先としては、38行上まで1列のコピーを繰り返しているようだが、 G列ーZ列20列x行数を一度に対象として、コピー張り付けが出来るのでは。行数は堂考えたらよいの? 自分の思いついたコードのエラー原因も知りたいでしょうが、 識者にもっとすっきるしたコードを教えてもらうほうが良いと思う。 そのためには質問にシート、行、列を示して どういう範囲をコピーするのか 張り付け先は を明示すべきだ。 ーー For Each r In .Range("G40:Z40") では同じ行の各セルを問題にしていると思うが 範囲の行の問題(指定)はどうなっているのですか? ーー

oshietecho-dai
質問者

お礼

詳細なご回答、誠に有難うございました。

  • HowOver
  • ベストアンサー率30% (17/56)
回答No.2

ここ Next r は単に Next では?

oshietecho-dai
質問者

お礼

ご回答、誠に有難うございました。

回答No.1

初めまして。 マクロの自動記録を使用すれば,宜しいのではないでしょうか?

oshietecho-dai
質問者

お礼

ご回答、誠に有難うございました。

関連するQ&A

専門家に質問してみよう