• ベストアンサー

エクセルについての質問です。

エクセルについての質問です。 「名前の定義」で範囲指定し、その範囲にコピーペーストをしたいのですが、 やり方がよくわかりませんので、教えてください! ちなみに、範囲指定はOFFSET関数で、日に応じて範囲が変更する仕組みに なっています。マクロを組みたいので、そのためです。

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

  • ベストアンサー
回答No.3

苦手なのでまったく洗練されていないマクロですが(^^; Sub A地点からB地点まで() Dim 終わり As Long Dim n As Long Dim A As Long Dim B As Long      終わり = WorksheetFunction.CountA(Range("C7:C65536"))            A = 7      Range("C7").Select      Selection.End(xlDown).Select      B = Selection.Row      Range("B" & A & ":B" & B) = Selection.Value      ActiveWorkbook.Names.Add Name:="範囲1", _      RefersToR1C1:="=R" & A & ":R" & B & "C2"      For n = 2 To 終わり           A = Selection.Row + 1           Selection.End(xlDown).Select           B = Selection.Row      Range("B" & A & ":B" & B) = Selection.Value      ActiveWorkbook.Names.Add Name:="範囲" & n, _      RefersToR1C1:="=R" & A & ":R" & B & "C2"      Next n End Sub 名前の定義をつけてみたものの何の必要があるのか。。。

mame1218
質問者

お礼

ありがとうございました! 大変参考になり助かりました!

その他の回答 (4)

回答No.5

#3です。やっぱ マクロ苦手 連続データはエラーが出た(T.T) 下記修正。といっても、もっとずっと効率的なマクロが回答されるかと思います。(^^; Sub A地点からB地点まで() Dim 終わり As Long Dim n As Long Dim A As Long Dim B As Long           終わり = WorksheetFunction.CountA(Range("C7:C65536"))                 A = 7           Range("C7").Select           If Selection.Offset(1) = "" Then             Selection.End(xlDown).Select           Else             Selection.Offset(1).Select           End If           B = Selection.Row           Range("B" & A & ":B" & B) = Selection.Value           ActiveWorkbook.Names.Add Name:="範囲1", _           RefersToR1C1:="=R" & A & ":R" & B & "C2"           For n = 2 To 終わり                     A = Selection.Row + 1           If Selection.Offset(1) = "" Then             Selection.End(xlDown).Select           Else             Selection.Offset(1).Select           End If                     B = Selection.Row           Range("B" & A & ":B" & B) = Selection.Value           ActiveWorkbook.Names.Add Name:="範囲" & n, _           RefersToR1C1:="=R" & A & ":R" & B & "C2"           Next n End Sub

mame1218
質問者

お礼

ご丁寧にありがとうございました! 大変参考になりましたので、BAとさせて頂きました!!

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

集計方法が解りませんが、名前を使うならこんな感じです。 Range("範囲1").Copy Range("範囲2")

mame1218
質問者

お礼

ありがとうございました! シンプルで、すぐに実践できました!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 単純に画像だけ見て投稿しているので、大きく外しているかもしれません。 VBAではなく、関数になってしまいますが・・・ ↓の画像でB22セルに =IF(COUNTA($C$7:$C$22)=0,"",INDEX($C$7:$C$22,LARGE(IF($C$7:$C$22<>"",ROW($A$1:$A$16)),COUNTIF($C$22:C22,"<>"&"")))) これは配列数式になってしまいますので、 この画面からコピー&ペーストしただけではエラーになると思います。 B22セルに貼り付け後、F2キーを押す、またはB22セルをダブルクリック、または数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定します。 数式の前後に{ }マークが入り配列数式になります。 このB22セルを上方向にB7セルまでオートフィルでコピーすると 画像のような感じになります。 尚、的外れなら読み流してくださいね。m(__)m

mame1218
質問者

お礼

ご丁寧にありがとうございました! 参考にさせていただきます^^

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

OFFSET関数を使うなら「名前の定義」は必要ないと思う。

mame1218
質問者

お礼

ありがとうございます。 当方、初心者なため、基本的なことを理解しておりませんでした。。 勉強になりました。

関連するQ&A