Excel VBA 質問スレッド №817 (解決済)

ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について

投稿者 : りんご     投稿日時 : 2022/06/21(Tue) 20:19:04     OS : 未指定     EXCEL : 未指定
こんにちは。vba初心者のものです。
言葉足らずで申し訳ございませんが、ご教示いただけると幸いです

やりたい事
・ある値を別端末のExcelファイルの対応するシートの指定範囲内の最終行にコピー貼り付けする
(例 店の商品の1日の売り上げ件数を各品目ごとに合計を自動計算するようにしたファイルから、
   合計の値だけをコピー →別ファイルの日報統計表に日毎にその値を貼り付ける)

  日報統計表は 列が月、行に日付が記載された表
  各列、各行の最終セルには各々の合計が出るように関数が入力されているため、それを含まないよう
 に範囲を指定し、その中での最終行にコピー貼り付け
・月毎に列が違うため、月の最終行になったら自動で、次の月の列の頭に貼り付けできるようにする

(応用)
・あるの品目では、男女別の合計を、同じシート、同行、隣合う列の最終行にそれぞれコピー貼り付け 
 (例  シート: 品目名、大きい列(A列+B列の2列) :1月 、A列:男 B列:女、 行:16日)

・ある品目では、コピー元の2つの合計の値を、対応するシートの指定範囲内の最終行にコピー貼り付け
  
以上の内容を実行するマクロを教えていただけると大変助かります。
よろしくお願いいたします。

スポンサーリンク
[返信 1] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : てらてら     投稿日時 : 2022/06/21(Tue) 21:30:32
こんにちは。

一応、最終行の取得と、別ブックからの転記の簡単な例を挙げておきます。
もう少し具体的に書いてもらえれば、それなりのコードを書いてもらえるかもしれません。
(私も含めて、、、)

コピー先、コピー元のブック名とかシート名。
転記したいセルの項目名とか、、

とりあえず、以下のコードを参考にしてください。

Sub macro()

    Dim LastRow As Long
    Dim wb As Workbook
    
    '開いている別のブックを変数に入れる
    Set wb = Workbooks("別ブック.xlsx")
    MsgBox wb.Worksheets("予定").Cells(2, "B")
        '--->開いていないブックを開くには別にコードを書く。

    '最終行  (現在のシートのA列の最終行を取得)
    LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
    
    
    '転記
    '今開いているシートに転記するなら
    Cells(LastRow, "A") = wb.Worksheets("予定").Cells(2, "B")
    
    'シートを指定するなら
    '今開いているブックのSeet1シートへコピー。 別ブックの値を、、
    Worksheets("Sheet1").Cells(LastRow, "A") = wb.Worksheets("予定").Cells(2, "B")
    

End Sub

[返信 2] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : りんご     投稿日時 : 2022/06/22(Wed) 12:06:32
曖昧な質問で申し訳ございません。
ご丁寧にお返事いただきありがとうございます。
ご指摘にございましたように現在のマクロを参考までに記載いたします。
コピー元のシート名:(売上日報(入力))の値:(G2)をコピーし、別端末の(日報統計)というフォルダのシート名:(食料品)の範囲(B3:M33)を指定して、その範囲内の最終行に貼り付けできるようにしたいです。範囲指定が上手く反映されていないようですので、その原因をご教示いただけると幸いです。
Sub 日報統計

Workbooks.Open"¥¥端末IP¥日報統計"
HIRAKU=ActiveWorkbook.Name
thisworkbook.Active
Sheets("売上日報(入力)").Select
Range("G2").Select
Selection.Copy

Windows(HIRAKU).Active
Sheets("食料品").Select
Dim c As Range
Set c = Range(B3:M33)
Dim r As Range
Set r = Rows(c.Row + c.Rows.Count -1)

Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats,Operation:= _
xlNone,SkipBlank:=False,Transpose:=False

また、日毎の入力で現在、月毎に列が変わっていくので、月が変わったら次の列の頭に貼り付けできるようなマクロがございましたら、併せてご教示いただけると幸いです。

[返信 3] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : てらてら     投稿日時 : 2022/06/22(Wed) 15:05:05
>コピー元のシート名:(売上日報(入力))の値:(G2)をコピーし、別端末の(日報統計)というフォルダのシート名:(食料品)の範囲(B3:M33)を指定して、その範囲内の最終行に貼り付けできるようにしたいです。範囲指定が上手く反映されていないようですので、その原因をご教示いただけると幸いです。

コピー元がセル1つで、コピー先のセルが複数というのはわかりずらいですね。
結局、「売上日報(入力)」G2の値は、「食料品」のどこにコピーしたいのですか?

[返信 4] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : さんこう     投稿日時 : 2022/06/22(Wed) 15:11:00
>月が変わったら次の列の頭に貼り付け

「月が変わった」を、どのように判断するのでしょうか?

「売上日報(入力)」シートには、年月日の情報が記載されていないのですか?
月日がわかるのなら、「最終行」に関係なく貼付先は決まると思いますが。
(1月1日をB3セル、12月31日がM33セルでしょうか。)

[返信 5] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : りんご     投稿日時 : 2022/06/22(Wed) 18:37:18
■[返信 3] てらてら様
> コピー元がセル1つで、コピー先のセルが複数というのはわかりずらいですね。
> 結局、「売上日報(入力)」G2の値は、「食料品」のどこにコピーしたいのですか?

ご質問いただきありがとうございます。
「売上日報(入力)」のG2に常に、その日の食料の売上合計が自動で反映されます。
しかし、「日報統計」→「食料品」は日報として入力するので日々セルが変動します。
なので、前日入力した次のセル、最終行の次のセルに貼り付けできるようにと考えています。


■[返信4]さんこう様
>月が変わったとは →下記の表を用いると、3月1日ならD3, 5月1日ならF3に貼り付けたい
  (各月31日まで入力されていなくても、存在する月末の日付まで入力したら次の月の頭に飛ぶ)

また「売上日報(入力)」には日付は記載されませんが、貼り付け先の「日報統計」→「食料品」には下記の表のように、月、日付が記載されています。
その日その日でセルが変わるので、[B3(1月1日)からM33(12月31日)]までの範囲の最終行から判断した方が良いと思い込んでいましたが、さんこう様がおっしゃるように、その日その日に応じたセルを自動で指定して貼り付けることが可能なのでしょうか?もし可能とあるならば、ご教示いただけると幸いです。

[食料品シート]  ■…入力済みセル
__________A B C D E F G H・・・M(列)
1 食料品統計
2_________1月 2月 3月 4月 5月 6月 7月・・・12月
3 ___1日 ■ ■ ■ ■ ■ ■
4 ___2日 ■ ■ ■ ■ ■ ■
5 ___3日 ■ ■ ■ ■ ■ ■
6 ___4日 ■ ■ ■ ■ ■ ■
7 ___5日 ■ ■ ■ ■ ■ ■
: :
23 21日 ■ ■ ■ ■ ■ ■←6月21日分(最終行)
24 22日 ■ ■ ■ ■ ■ □←ここに貼り付け
: :
30 28日 ■ ■ ■ ■ ■
31 29日 ■ ■ ■ ■
32 30日 ■ ■ ■ ■
33 31日 ■ ■ ■
34 計) SUM(B3:B33)・・・以下各列の合計式

[返信 6] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : りんご     投稿日時 : 2022/06/22(Wed) 18:51:48
返信5について、表がずれていたので上げ直します。
申し訳ございませんでした。
■[返信 3] てらてら様
> コピー元がセル1つで、コピー先のセルが複数というのはわかりずらいですね。
> 結局、「売上日報(入力)」G2の値は、「食料品」のどこにコピーしたいのですか?

ご質問いただきありがとうございます。
「売上日報(入力)」のG2に常に、その日の食料の売上合計が自動で反映されます。
しかし、「日報統計」→「食料品」は日報として入力するので日々セルが変動します。
なので、前日入力した次のセル、最終行の次のセルに貼り付けできるようにと考えています。


■[返信4]さんこう様
>月が変わったとは →下記の表を用いると、3月1日ならD3, 5月1日ならF3に貼り付けたい
  (各月31日まで入力されていなくても、存在する月末の日付まで入力したら次の月の頭に飛ぶ)

また「売上日報(入力)」には日付は記載されませんが、貼り付け先の「日報統計」→「食料品」には下記の表のように、月、日付が記載されています。
その日その日でセルが変わるので、[B3(1月1日)からM33(12月31日)]までの範囲の最終行から判断した方が良いと思い込んでいましたが、さんこう様がおっしゃるように、その日その日に応じたセルを自動で指定して貼り付けることが可能なのでしょうか?もし可能とあるならば、ご教示いただけると幸いです。

[食料品シート]  ■…入力済みセル
__________A____B___C___D___E___F___G___H・・・M(列)
1 食料品統計
2_________1月_2月_3月_4月_5月_6月_7月・・・12月
3____1日___■__■__■__■__■__■
4____2日___■__■__■__■__■__■
5____3日___■__■__■__■__■__■
6____4日___■__■__■__■__■__■
7____5日____■__■__■__■__■__■
: :
23__21日___■__■__■__■__■__■←6月21日分(最終行)
24__22日___■__■__■__■__■__□←ここに貼り付け
: :
30__28日___■__■__■__■__■
31__29日___■______■__■__■
32__30日___■______■__■__■
33__31日___■______■______■
34___計)___SUM(B3:B33)・・・以下各列の合計式

[返信 7] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : てらてら     投稿日時 : 2022/06/22(Wed) 19:23:57
>その日その日に応じたセルを自動で指定して貼り付けることが可能なのでしょうか?もし可能とあるならば、ご教示いただけると幸いです。

「月」が「列」、「日」が「行」なので、Cellsを使えばOKでしょう。
ただ、入力には、「金額」のほかに「日付」が必要になります。

出力先はわかったのですが、入力の「売上日報(入力)」はどんな感じですか?
一日1シートでしょうか?

[返信 8] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : りんご     投稿日時 : 2022/06/22(Wed) 20:22:44
■[返信 7] てらてらさん(2022-06-22 19:23:57)の記事
> 「月」が「列」、「日」が「行」なので、Cellsを使えばOKでしょう。
> ただ、入力には、「金額」のほかに「日付」が必要になります。

> 出力先はわかったのですが、入力の「売上日報(入力)」はどんな感じですか?
> 一日1シートでしょうか?

迅速なお返事ありがとうございます。
少し複雑になるのですが、「売上日報(入力)」(A端末)は、別の端末(C端末)から出る各種統計の値だけをその日ごとに貼り付けられるようにマクロが組んであり、マクロ実行前は書式だけが記載されたワンシートになります。日付も値として貼り付けられていますが、これが日付として機能するのかが不確かでしたので、前回日付は記載されていないと回答させていただきました。

また、今回ご質問させていただいている[日報統計](B端末)と別の端末(C端末)は管理元が別のシステムで直接繋ぐことができないので、「売上日報(入力)」(A端末)を経由している状況です。
「売上日報(入力)」(A端末)のデータが[日報統計](B端末)に貼り付けできたら、「売上日報(入力)」の値を削除し、同じシートで次の日同じ作業を繰り返す仕様になります。
分かりづらく申し訳ございません。
ただし、A端末で別の作業もしているので、あくまで作業の主はA端末になります。

[返信 9] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : てらてら     投稿日時 : 2022/06/23(Thu) 04:03:41
>日付も値として貼り付けられていますが、これが日付として機能するのかが不確かでしたので、

たぶん日付の値として機能すると思いますが、これをテストしない限り先行きは不透明ですね。
(代替案としては本日の日付から取得するとか、、)

とりあえず、書いてみましたのでそちらの環境で試してみてください。

Sub macro()

    Dim myDate As Date
    Dim myValue As Long
    Dim wb As Workbook
    Dim col As Long, row As Long
    
    myDate = Worksheets("売上日報(入力)").Range("G1")  '日付のあるセルを指定
    myValue = Worksheets("売上日報(入力)").Range("G2")
    
    '日付型から月と日を取り出して、セルの番地に変換
    col = Month(myDate) + 1     'B列が1月とする
    row = Day(myDate) + 2       '3行目が1日とする
    
    Set wb = Workbooks.Open("\\端末IP\日報統計.xlsx")
    wb.Worksheets("食料品").Cells(row, col) = mayValue

End Sub

[返信 10] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : さんこう     投稿日時 : 2022/06/23(Thu) 08:16:05
当日の日付でよければ、こんな感じでしょうか。

Sub 日報統計2()
    Dim d As Date
    Dim G2 As Variant
    G2 = Worksheets("売上日報(入力)").Range("G2")
    d = Date
    
    Workbooks.Open "\\端末IP\日報統計"
    Worksheets("食料品").Range("B3:M33").Cells(Day(d), Month(d)) = G2
End Sub

[返信 11] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : りんご     投稿日時 : 2022/06/23(Thu) 21:14:41
てらてら様、さんこう様

連日ご丁寧にご教示いただきありがとうございます。
おかげ様で無事処理できました!!!!ありがとうございます。

また度々ご質問で申し訳ございませんが、以下2点についてご教示いただけると幸いです。
※2点ともしたいことは上記と同様です。
・コピーする値が一つのセル(G2)ではなく、二つのセルの合計の値(F23+F24)を、同じように貼り付ける場合、どのような変数を用いれば良いのでしょうか?

・男女別の日報をそれぞれ同シートに貼り付けたい場合は、どのように処理すれば良いでしょうか?
 (例 シート名:新商品 ,3月22日の男女別の日報をそれぞれ貼り付け)A列(男)+B列(女)で1月


[新商品シート]  ■…入力済みセル
_________|_A__ B _|_C__D_|_E__F__|__G___H・・・M(列)
1 ________|—-1月—-|—2月—|—-3月—|—4月・・・・12月
2________|_男__女_|_男_女_|_男_女_|_男・・・・・・女
3____1日___■__■__■__■__■__■
4____2日___■__■__■__■__■__■
5____3日___■__■__■__■__■__■
6____4日___■__■__■__■__■__■
7____5日____■__■__■__■__■__■
: :
23__21日___■__■__■__■__■__■
24__22日___■__■__■__■__□1_□2 ← □1(E24)に男の日報、□2(F24)に女の子日報を貼り付ける
: :
30__28日___■__■__■__■__■
31__29日___■__■__________■
32__30日___■__■__________■
33__31日___■__■__________■
34___計)___SUM(B3:B33)・・・以下各列の合計式

[返信 12] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : さんこう     投稿日時 : 2022/06/23(Thu) 23:12:55
雑な回答です。

>どのような変数を用いれば良いのでしょうか?
ご質問の意図がわかりません。

>どのように処理すれば良いでしょうか?

1月(ひと月)に2列必要なので、「月」×2で書き込み先の列を求めます。

[返信 13] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : りんご     投稿日時 : 2022/06/24(Fri) 05:42:05
■[返信 12] さんこう様

以前ご質問させていただいたものがベースになるのですが、
・コピーする値が一つのセルではなく、二つのセルの合計である場合
・貼り付け先の表の列が2列で一月となる場合
上記の場合について、以前ご教示いただいたマクロのどの部分どのように組み替えれば良いのでしょうか?

自分なりに色々と試してみたのですが、どれも上手くいかず手も足も出ない状況で、、
マクロの式?を教えていただけると幸いです。

[返信 14] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : さんこう     投稿日時 : 2022/06/24(Fri) 06:29:21
手元にPCがないので、手抜きな解答です。
細かいところは修正してください。

>コピーする値が一つのセルではなく、二つのセルの合計である場合
G2 = Worksheets("売上日報(入力)").Range("G2") +
Worksheets("売上日報(入力)").Range("G2")

>貼り付け先の表の列が2列で一月となる場合
上記の場合
Worksheets("食料品").Range("B3:M33").Cells(Day(d), Month(d) * 2 - 1) = G2

[返信 15] Re : ある値を別ファイルの各シートの指定範囲内の最終行にコピー貼り付けする方法について
投稿者 : りんご     投稿日時 : 2022/06/25(Sat) 15:39:58
■[返信 14] さんこうさん(2022-06-24 06:29:21)の記事
> 手元にPCがないので、手抜きな解答です。
> 細かいところは修正してください。

ありがとうございます!!!
無事処理できました。
お忙しい中丁寧にご回答いただきありがとうございました。
これを機に勉強したいと思います。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2023-05-29 15:23:03 )
タイトルとURLをコピーしました