Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
アクティブセル
投稿日時: 19/03/01 13:47:49
投稿者: ayaya66
メールを送信

初心者です。初歩的なことですみません。
アクティブシートのアクティブセルを他のシートにコピーさせるというプログラムを書こうとしていますが、うまくいきません。
 
Sub 注文書()
 
    Dim 業者名 As String
    業者名 = ActiveCell.FormulaR1C1
    Range("業者名").Copy
    Sheets("注文書").Select
    ActiveSheet.Paste Range("B3:E3")
 
End Sub
 
なにが悪いのかご教授お願いします。。

回答
投稿日時: 19/03/01 14:31:50
投稿者: Suzu

いろいろやってみる事も必要なのですが、
まずは、行いたいことを、マクロの自動記録で記録してみてはいかがですか?

投稿日時: 19/03/01 14:58:11
投稿者: ayaya66
メールを送信

suzu様
  
ありがとうございます。
記録マクロを活用しながら地道にがんばります。
今のところ以下までたどり着きました。
Sub 注文書()
  
    ActiveCell.Copy
    Sheets("注文書").Select
    ActiveSheet.Paste Range("B3:E3")
      
    Sheets("原価管理表").Select
    Application.CutCopyMode = False
      
    ActiveCell.Offset(0, -2).Copy
    Sheets("注文書").Select
    ActiveSheet.Paste Range("H5:J5")
          
    Sheets("原価管理表").Select
    Application.CutCopyMode = False
      
    ActiveCell.Offset(0, -1).Copy
    Sheets("注文書").Select
    ActiveSheet.Paste Range("H7:J7")
      
    Sheets("原価管理表").Select
    Application.CutCopyMode = False
      
    ActiveCell.Offset(0, 2).Copy
    Sheets("注文書").Select
    ActiveSheet.Paste Range("D7:E7")
      
    Sheets("原価管理表").Select
    Application.CutCopyMode = False
      
End Sub
  
同じような作業の繰り返しなので、もっとシンプルなプログラムにできればと思っております。
まだ始めたばかりなのでいろいろ挑戦してみます!

回答
投稿日時: 19/03/01 14:59:53
投稿者: Suzu

「業者名」という 文字列型の変数を宣言
Dim 業者名 As String
 
変数「業者名」 に、アクティブセルの R1C1形式の数式をコピー
業者名 = ActiveCell.FormulaR1C1
 
【業者名】の名前の付いた セル範囲 をコピー
Range("業者名").Copy
 
ここの「業者名」は変数ではなく、固定した値。
 
名前の付いたセル範囲は、「数式」-「名前の管理」 で 表示されるリストの『名前』に一致。
 
今回の場合、リストに、【業者名】という名前がなければ
実行時エラー '1004''Range'メソッドは失敗しました エラーとなります。

回答
投稿日時: 19/03/01 15:14:49
投稿者: Suzu

ayaya66 さんの引用:

    ActiveCell.Copy
    Sheets("注文書").Select
    ActiveSheet.Paste Range("B3:E3")
      
    Sheets("原価管理表").Select
    Application.CutCopyMode = False
      
    ActiveCell.Offset(0, -2).Copy
    Sheets("注文書").Select
    ActiveSheet.Paste Range("H5:J5")

 
上記の部分は
 
ActiveCell.Copy Destination:=Worksheets("注文書").Range("B3:E3")

Sheets("原価管理表").Select
ActiveCell.Offset(0, -2).Copy Destination:=Worksheets("注文書").Range("H5:J5")

とできます。
 
 
ActiveCell を使いたいが為に、Sheets("原価管理表").Select を行わなければなりませんが
Sheets("原価管理表") 上の 基準(アクティブ)としておかなければならないセルが ("B3")と
決まっているのであれば、
 
With Worksheets("原価管理表").Range("B3")
  .Copy Destination:=Worksheets("注文書").Range("B3:E3")
  .Offset(0, -2).Copy Destination:=Worksheets("注文書").Range("H5:J5")
End With 

 
の様にできますね。

回答
投稿日時: 19/03/01 15:36:04
投稿者: sk

引用:
アクティブシートのアクティブセルを他のシートにコピーさせる

とりあえず、そのセルの何を(値/数式/書式)コピーしたいのかを
明示されることをお奨めします。
 
引用:
Sheets("注文書").Select

引用:
ActiveSheet.Paste Range("B3:E3")

引用:
ActiveSheet.Paste Range("H5:J5")

引用:
ActiveSheet.Paste Range("H7:J7")

引用:
ActiveSheet.Paste Range("D7:E7")

ひょっとして、これら全て結合セルなのでは。
([原価管理表]の任意の行の各列を参照しながら
[注文書]の「ヘッダー部分」に当たる各セルの値を
設定しようとしている感じがする)
 
また、そのマクロの最終目的とアクティブセルは
恐らく直接の関係がないようにも見えます。

投稿日時: 19/03/01 15:50:46
投稿者: ayaya66
メールを送信

suzu様
 
おお!凄い!
といっても正直まだ理解できていませんが、、
変数を設定してみるところまでは気づいて挑戦したのですが、うまくできなかったので、前述のようなプログラムになってしまいました。
suzu様のプログラムを参照しながら試していこうと思います。
本当にありがとうございます。
 
ちなみに私がやりたいことですが、
原価管理表シートの業者名が書かれているセルを選択してマクロを実行すれば、
注文書シートのフォーマットに必要な情報がコピーされ、
最終的にはその業者名の名前でPDF保存までをやりたいと考えています。
 
suzu様のご指摘の通り、Range("D7:E7")などは結合セルになっております。

回答
投稿日時: 19/03/01 16:10:22
投稿者: Suzu

ご指摘は、私ではなく sk さんです。
 
マクロを使うのと、差し込み印刷 どちらが良いのかは好みもありますからね。。

投稿日時: 19/03/01 16:32:52
投稿者: ayaya66
メールを送信

suzu様
sk様
 
大変失礼しました。
たしかに印刷まで自動で行わなくてもいいかもと感じてきています。
しかし大変助かりました!
もっとスキルUPできるように頑張ります!