アプリ版:「スタンプのみでお礼する」機能のリリースについて

添付画像をご覧ください。

【やりいたい事】
ブック1の A2:C2 のセルの値を ブック2のA8:C8 へ転記したい

【他情報】
ブック1とブック2は同じフォルダ内(仕事フォルダ)にあります


ブック1の場所とファイル名: C:\Users\2020\Desktop\仕事\Book1.xlsm
ブック1シート名:Sheet1

ブック2の場所とファイル名: C:\Users\2020\Desktop\仕事\Book2.xlsx
ブック2シート名:Sheet1



【参考:詳しい方が教えてくれたコード】
※自分の貼付方が悪いのか動かなかったです


Option Explicit
Public Sub 別ブックへ転記2()
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Set ws1 = Worksheets("Sheet1")
maxrow1 = ws1.Cells(Rows.Count, "A").End(xlUp).Row
If maxrow1 < 4 Then Exit Sub
Set wb2 = Workbooks.Open(ThisWorkbook.path & "\" & "Book2.xlsx")
Set ws2 = wb2.Worksheets("Sheet1")
maxrow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
If maxrow2 < 4 Then maxrow2 = 4
row2 = maxrow2 + 1
For row1 = 4 To maxrow1
ws2.Cells(row2, 1).Resize(1, 3).Value = ws1.Cells(row1, 1).Resize(1, 3).Value
row2 = row2 + 1
Next
wb2.Save
wb2.Close
MsgBox ("完了")
End Sub

「【マクロ】【VBA】同じフォルダ内にある」の質問画像

A 回答 (9件)

>すいません、ブック2もオープンにしたまま、連続して転記をする状態がありました!!!


>しかし、ブック1から常に実行→実行ボタンもつけますので、常にブック1からの実行てなり問題ないことを確認しました

結局、現状のままで良いということでしょうか。

マクロの勉強は最初は、参考書を購入して勉強しました。
マクロで何かの特定のことに関して調べる場合は、下記の
オフィス田中をよく利用しています。
http://officetanaka.net/excel/vba/tips/
    • good
    • 0

No7です。

そもそもの話になりますが、
マクロ実行時の前提は
①ブック1はオープンした状態、ブック2はクローズした状態
になっています。
これを
②ブック1はオープンした状態、ブック2もオープンした状態
にしたいということでしょうか。

③それとも、①、②のどちらの状態であっても正しく動作するようにしたい
ということでしょうか。
    • good
    • 0
この回答へのお礼

すいません、ブック2もオープンにしたまま、連続して転記をする状態がありました!!!しかし、ブック1から常に実行→実行ボタンもつけますので、常にブック1からの実行てなり問題ないことを確認しました

すごく効率的で助かっています
今、コードの理解も進めています

ちなまに、たつまるさんは
マクロの勉強は、どのよううにして
行ったんですか???

自分は、、すごく、マクロに興味が
あり、勉強しています

お礼日時:2023/08/13 17:12

No6です。


No6は無視してください。
ブック2、ブック1をともにオープンし、ブック2をアクティブ状態にして、
当該マクロを実行すると、ブック2の情報をブック2に転記してしまうことが確認できました。

本来、ブック2はクローズしてあることが前提です。
従って、ブック2がオープンされた状態でマクロを実行したとき、
以下のいずれかの動作が考えられます。
①ブック2がオープン中なので、エラーとする。
②構わずに処理を続行し、ブック1の内容をブック2に転記する。

上記で②の方を希望されるということでしょうか。
    • good
    • 0

>ブック1【転記元】ではなく、ブック2【転記先】がアクティブになっていると、ブック2の情報をブック2に転記してしまいます。



そもそもの話ですが、ブック2はクローズされた状態です。
それをオープンしたときに、ブック2がアクティブになります。
最初からブック2がアクティブにはならないはずですが・・・・・

マクロは、ブック1の標準モジュールに登録されている前提です。
ブック1は、マクロのあるファイルなので、必ず
Set ws1 = Worksheets("Sheet1")
でブック1のシート1がws1に設定されることが保証されるはずです。

具体的にどのような操作をしたとき、ブック2の情報をブック2に転記してしまうのでしょうか。
    • good
    • 0

No4です。


If maxrow2 < 4 Then maxrow2 = 4

If maxrow2 < 2 Then maxrow2 = 2
の誤りでした。訂正します。
    • good
    • 0
この回答へのお礼

すいませんありがとうございます。

あと1点

ブック1【転記元】ではなく、ブック2【転記先】がアクティブになっていると、ブック2の情報をブック2に転記してしまいます。


以下コードの転記元を Sheet1だけではなく、ブック1のシート1と
指定すれば出来ると思いますが、コードが書けません。

ご教授お願いします。なお、他の方法でも大丈夫です

ws2.Cells(row2, 1).Resize(1, 3).Value = ws1.Cells(row1, 1).Resize(1, 3).Value

お礼日時:2023/08/11 07:57

No3です。


maxrow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
A列の最終行を取得します。

If maxrow2 < 4 Then maxrow2 = 4
もし、最終行が4未満なら、強制的に最終行を4にします。

row2 = maxrow2 + 1
row2は、書き込み先の行番号なので、
最終行+1をrow2にセットします。


ws2.Cells(row2, 1).Resize(1, 3).Value = ws1.Cells(2, 1).Resize(1, 3).
Value
(転記先row2行の1列目のセル)を3列に伸ばしたセルへ
(転記元2行、1列目のセル)を3列に伸ばしたセルを転記
    • good
    • 0
この回答へのお礼

すいません。最新補足2つ目です。

エクセル2を閉じるのをやめたのです。wb2.Close のコードを
消しました。

お礼日時:2023/08/11 08:02

以下のようにしてください。


転記元は、常にA2~C2です。

Public Sub 別ブックへ転記2()
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Set ws1 = Worksheets("Sheet1")
Set wb2 = Workbooks.Open(ThisWorkbook.path & "\" & "Book2.xlsx")
Set ws2 = wb2.Worksheets("Sheet1")
maxrow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
If maxrow2 < 4 Then maxrow2 = 4
row2 = maxrow2 + 1
ws2.Cells(row2, 1).Resize(1, 3).Value = ws1.Cells(2, 1).Resize(1, 3).Value
wb2.Save
wb2.Close
MsgBox ("完了")
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。動きました。感動しています。
今、コードを理解しているところです。
以下4つのコードについて、簡単に教えていただけないでしょうか。
どんな作業。指示をしているといような感じでですね。
簡単にで大丈夫です。

maxrow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row

If maxrow2 < 4 Then maxrow2 = 4

row2 = maxrow2 + 1

ws2.Cells(row2, 1).Resize(1, 3).Value = ws1.Cells(2, 1).Resize(1, 3).
Value

お礼日時:2023/08/11 06:47

であれば【詳しい方が教えてくれたコード】をそのまま使ってください。


ただし、転記したい行をブック1の4行目にもってきてください。
「【マクロ】【VBA】同じフォルダ内にある」の回答画像2
    • good
    • 1

>【やりいたい事】


>ブック1の A2:C2 のセルの値を ブック2のA8:C8 へ転記したい
これだけでいいのであれば下記のコードで動くと思いますが、
ブック1に2行以上のデータがあっても転記したい、
とかブック2の末尾に転記したい、などの要望には対応していません。

---------------------------------------------------
Option Explicit
Public Sub 別ブックへ転記2()
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set wb2 = Workbooks.Open(ThisWorkbook.Path & "\" & "Book2.xlsx")
Set ws2 = wb2.Worksheets("Sheet1")
ws2.Cells(8, 1).Resize(1, 3).Value = ws1.Cells(2, 1).Resize(1, 3).Value
wb2.Save
wb2.Close
MsgBox ("完了")
End Sub
---------------------------------------------------
    • good
    • 1
この回答へのお礼

回答ありがとうございます
説明が下手だったのですが

ブック1のセル番地は変わらない
のですが

ブック2→転記先の行は
時間によって、8行目、9行目と
行だけ、増えていきます

台帳で、どんどん下に追加して
いきます

アドバイスいただけましたら
宜しくお願い致します!

お礼日時:2023/08/10 13:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!