Excel VBA 質問スレッド №1569 (未解決)

別のブックへの数字の転記について

投稿者 : アレキサンダー     投稿日時 : 2023/09/18(Mon) 01:33:14     OS : Windows 10     EXCEL : Excel 2019
はじめまして。
会社で事務効率化を図っているのですが、行き詰まり、
こちらで質問させていただきます。
ざっくりとした質問になり恐縮なのですが、よろしくお願いいたします。

作りたいマクロは
ボタンを押すと当該ブックの数値が、別のブックの特定の場所に転記されるマクロです。
別ブックというのが、いわゆる日誌なのですが、
1枚のシートに月中の日誌が日ごとに縦に並んでいるものです。
なので、4日にボタンを押したら、4日の日誌の特定の項目に数字を飛ばしたいのです。

私としては、①日誌を開く ②今日の日誌の左上のセルをアクティブにする ③マクロブックに戻る ④ボタンを押す ⑤アクティブにしたセルを起点に入力個所を特定していき転記する

というのを考えているのですが、それは可能でしょうか。
どういったコードを使用すればよいか、ご教示願いたいです。

どうぞよろしくお願いします。

スポンサーリンク
[返信 1] Re : 別のブックへの数字の転記について
投稿者 : さんこう     投稿日時 : 2023/09/18(Mon) 05:04:05
ざっくりとした回答になり恐縮なのですが、
参考になれば。

<vba 別ブック 転記>
https://www.google.com/search?q=vba+%E5%88%A5%E3%83%96%E3%83%83%E3%82%AF+%E8%BB%A2%E8%A8%98

[返信 2] Re : 別のブックへの数字の転記について
投稿者 : てらてら     投稿日時 : 2023/09/18(Mon) 08:43:38
こんにちは。

>作りたいマクロは
>ボタンを押すと当該ブックの数値が、別のブックの特定の場所に転記されるマクロです。
>別ブックというのが、いわゆる日誌なのですが、
>1枚のシートに月中の日誌が日ごとに縦に並んでいるものです。
>なので、4日にボタンを押したら、4日の日誌の特定の項目に数字を飛ばしたいのです。
>
>私としては、①日誌を開く ②今日の日誌の左上のセルをアクティブにする ③マクロブックに戻る ④ボタンを押す ⑤アクティブにしたセルを起点に入力個所を特定していき転記する

 まず、他のブックを開くには、そのブックのフルパス+ファイル名が必要になります。
いちいちファイルダイアログを開くのも面倒なので、私ならマクロブックのどこかのセルに、フルパス+ファイル名を記録しておきます。

今日の日付で今日の日にちのセルに飛ばしたいのであれば、
Date関数から日付を抜いて、 Day(Date) とすれば得られるでしょう。
その日付の数値をもとに、日誌ブックのシートの上からのオフセット分を足せば、②の位置は得られます。
位置が計算できるなら無理にアクティブにしなくてもOKです。

①~⑤の手順ですが、私なら以下のようにします。

④ボタンを押して ①日誌を開く 
⑤入力個所を特定していき転記する

ボタンを押したら、記録しておいたパスから日誌ブックを開きます。
(開いたブックはアクティブになります。)
転記先の日誌ブックがアクティブ。
転記元のマクロブックは、 ThisWorkbookなので、
後は互いの必要なセルの場所を指定して転記すればOKです。

Worksheets("Sheet1").Cells(Day(Date) + 4, "D") = ThisWorkbook.Worksheets("Sheet1").Cells(1, "B")

VBAでプログラムを組む時は、いちいちシートやセルをアクティブにせず、場所を特定して値を転記できます。
この事を念頭に置いて手順を考えると良いでしょう。

[返信 3] Re : 別のブックへの数字の転記について
投稿者 : ピロリ     投稿日時 : 2023/09/18(Mon) 18:07:27
> ①日誌を開く ②今日の日誌の左上のセルをアクティブにする ③マクロブックに戻る ④ボタンを押す ⑤アクティブにしたセルを起点に入力個所を特定していき転記する
私もボタンを押したら、①日誌ブックを開いて、②今日の日誌の左上のセルを特定して、③特定したセルを起点に転記する考え方が良いと思います。
仕様が今一不明瞭なので下のコードは前提付きの一例です。 参考まで。
Private Sub CommandButton1_Click()
'こちらは、データブック側のシートモジュールの例です
    Dim ブック名称 As String
    Dim 日誌 As Worksheet
    Dim 行番号 As Long, 列番号 As Long
    Dim 起点セル As Range
    Dim データシート As Worksheet
    
    '①日誌ブックを開く
    ブック名称 = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", , "日誌ブック選択")
    If ブック名称 = "False" Then Exit Sub       '未入力なら処理終了
    Workbooks.Open ブック名称                   '日誌ブックを開く
    Set 日誌 = ActiveWorkbook.Sheets("日誌")    '日誌ブックのシート名は「日誌」の前提で
    
    '②今日の日誌の左上のセルを特定する
    行番号 = (Day(Date) - 1) * 2 + 3    '日誌は 1日あたり 2行構成で、3行目から始まる前提で
                                        '(1日:3~4行目,2日:5~6行目 ・・・ 31日:63~64行目)
    列番号 = 2                                          '日誌の転記先は 2列目からの前提で
    Set 起点セル = 日誌.Cells(行番号, 列番号)           '計算した起点セルの記録
    
    '③特定したセルを起点に転記していく(例です)
    Set データシート = ThisWorkbook.ActiveSheet
    起点セル.Offset(0, 0) = データシート.Cells(5, "B")  '起点のセルへ
    起点セル.Offset(0, 1) = データシート.Cells(6, "B")  '起点の右セルへ
    起点セル.Offset(1, 0) = データシート.Cells(7, "B")  '起点の下セルへ
    起点セル.Offset(1, 1) = データシート.Cells(8, "B")  '起点の右下セルへ
End Sub

あるいは逆に日誌ブック側へマクロを作成して、例えばセルをダブルクリックしたら、①データブックを開いて、②ダブルクリックしたセルを起点に転記するというのも
一手かと思います。 要は「日誌ブックへ書込む」のではなく「データブックから読込む」ってことですが、的外れだったら読み捨てて下さい。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'こちらは、日誌ブック側のシートモジュールの例です
    Dim 起点セル As Range
    Dim ブック名称 As String
    Dim データシート As Worksheet
    
    If ActiveCell.Column <> 2 Then Exit Sub     '日誌の転記先は 2列目からの前提で
    Set 起点セル = ActiveCell                   '起点セル(ActiveCell)の記録
    
    '①データブックを開く
    ブック名称 = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", , "データブック選択")
    If ブック名称 = "False" Then Exit Sub               '未入力なら処理終了
    Workbooks.Open ブック名称                           'データブックを開く
    Set データシート = ActiveWorkbook.Sheets("Sheet1")  'データブックのシート名は「Sheet1」前提で
    
    '②ダブルクリックしたセルを起点に転記していく(例です)
    起点セル.Offset(0, 0) = データシート.Cells(5, "B")  '起点のセルへ
    起点セル.Offset(0, 1) = データシート.Cells(6, "B")  '起点の右セルへ
    起点セル.Offset(1, 0) = データシート.Cells(7, "B")  '起点の下セルへ
    起点セル.Offset(1, 1) = データシート.Cells(8, "B")  '起点の右下セルへ
    Cancel = True                                       'データ入力は無効に
End Sub

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

ステータス  :

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




( 処理日時 : 2023-10-01 23:22:38 )
タイトルとURLをコピーしました