Excel VBA 質問スレッド №1569 (未解決)
別のブックへの数字の転記について
投稿者 : アレキサンダー 投稿日時 : 2023/09/18(Mon) 01:33:14 OS : Windows 10 EXCEL : Excel 2019
はじめまして。
会社で事務効率化を図っているのですが、行き詰まり、
こちらで質問させていただきます。
ざっくりとした質問になり恐縮なのですが、よろしくお願いいたします。
作りたいマクロは
ボタンを押すと当該ブックの数値が、別のブックの特定の場所に転記されるマクロです。
別ブックというのが、いわゆる日誌なのですが、
1枚のシートに月中の日誌が日ごとに縦に並んでいるものです。
なので、4日にボタンを押したら、4日の日誌の特定の項目に数字を飛ばしたいのです。
私としては、①日誌を開く ②今日の日誌の左上のセルをアクティブにする ③マクロブックに戻る ④ボタンを押す ⑤アクティブにしたセルを起点に入力個所を特定していき転記する
というのを考えているのですが、それは可能でしょうか。
どういったコードを使用すればよいか、ご教示願いたいです。
どうぞよろしくお願いします。
はじめまして。
会社で事務効率化を図っているのですが、行き詰まり、
こちらで質問させていただきます。
ざっくりとした質問になり恐縮なのですが、よろしくお願いいたします。
作りたいマクロは
ボタンを押すと当該ブックの数値が、別のブックの特定の場所に転記されるマクロです。
別ブックというのが、いわゆる日誌なのですが、
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
ざっくりとした回答になり恐縮なのですが、
参考になれば。
<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でプログラムを組む時は、いちいちシートやセルをアクティブにせず、場所を特定して値を転記できます。
この事を念頭に置いて手順を考えると良いでしょう。
こんにちは。
>作りたいマクロは
>ボタンを押すと当該ブックの数値が、別のブックの特定の場所に転記されるマクロです。
>別ブックというのが、いわゆる日誌なのですが、
>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 )