以下のVBAでセルのコピーまではいけたのですが、アクティブシートのセルがコピーされます。また、転記先に貼り付けがされません。一致したシートをアクティブにし、そのシートのセル内容を転記先にコピーしたいです。ご教授頂けると幸いです。
よろしくお願いいたします。
Option Explicit
Sub マスターデータ取り込み02() '選択したファイルを取り込み、別のファイルに貼り付ける
Dim RC As Integer
Dim OpenFileName, fileName, Path, SetFile As String
Dim wbMoto, wbSaki As Workbook
Dim sh1name As String
Dim i As Long
Dim flag As Boolean
sh1name = ActiveSheet.Name '現在開いているシート名
Set wbMoto = ActiveWorkbook 'マスターデータ取り込み元をセット
Application.DisplayAlerts = False '応答メッセージの非表示
RC = MsgBox("Excel Bを開きますか?", vbYesNo + vbQuestion, "確認")
If RC = vbYes Then 'もしRCのメッセージにYesと答えたら
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
'ダイアログボックスを表示して、マスターデータファイルを指定します。
If OpenFileName <> "Fales" Then 'もし指定したファイルがFalseではなかったら
SetFile = OpenFileName 'マスターデータファイルの指定=SetFile
Else '指定したファイルがなかったら
MsgBox "キャンセルされました" 'キャンセルされましたというメッセージボックスが表示される
Exit Sub 'マスターデータの取り込みをキャンセル
End If
Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0 'マスターデータファイルを読み取り専用で開く
'ダイアログボックスで指定したExcel Bを開きます。
Set wbSaki = Workbooks.Open(Path & SetFile) '転記元のシート検索
For i = 1 To ActiveWorkbook.Worksheets.Count 'アクティブブックのシートを全てカウント
If Worksheets(i).Name = sh1name Then 'もし転記元のシートの名前と現在開いているブックのシートの名前が一緒だったら
flag = True
wbSaki.Worksheets(i).Range("G2:N32").Copy
wbMoto.Worksheets(sh1name).Range("G2:N32").PasteSpecial xlPasteFormulasAndNumberFormats
End If
Next i
If flag <> True Then 'フラグが"True"ではなかったら
MsgBox sh1name & "シートはありません。", vbInformation 'シートはありませんの情報メッセージアイコンが出る
wbSaki.Close False 'ExcelBのファイルを閉じる
End If
Application.CutCopyMode = False 'コピー切り取りを解除
wbSaki.Close False 'マスターデータ取り込み先のファイルを閉じる
Else
MsgBox "処理を中断します"
End If
Application.DisplayAlerts = True
End Sub
No.5ベストアンサー
- 回答日時:
>aaa,bbbは可能であれば一度の実行で行いたいです。
なさりたい事とあっているかは不明ですが、すべてのシートをすべてのシートと突き合せるので良ければ、下記のような感じで良いと思いますが、除外したい同名シートなどがある場合不具合の発生が懸念されます。
該当部分
'開いたブック内シートすべてに対して処理
Dim sH As Variant
For Each sH In wbMoto.Worksheets
For i = 1 To wbSaki.Worksheets.Count
If Worksheets(i).Name = sH.Name Then 'もし転記元のシートの名前と現在開いているブックのシートの名前が一緒だったら
flag = True 'インフォメーションフラグ
wbSaki.Worksheets(i).Range("G2:N32").Copy '該当シートの範囲をコピー し 実行ブックに数式と数値の書式で貼り付け
wbMoto.Worksheets(sH.Name).Range("G2:N32").PasteSpecial xlPasteFormulasAndNumberFormats
Application.CutCopyMode = False 'コピー切り取りを解除
Exit For '2つ同名シートはあり得ないので無駄な処理をやめループを抜ける
End If
Next i
Next sH
wbSaki.Close SaveChanges:=False 'マスターデータ取り込み先のファイルを保存せずに閉じる
If flag <> True Then 'フラグが"True"ではなかったら(シートが見つからなければ)
上下1行は重複部分
検証はコピーブックでステップ実行などで確認しながら、どうぞ、、
ありがとうございます!!!
できました!!
これは私ではわからなかったです。。
大変参考になりました。
このコードを見て勉強させて頂きます。
ありがとうございます!
No.4
- 回答日時:
>aaa,bbbは可能であれば一度の実行で行いたいです。
後に置いときますね。家に帰ってご飯食べないといけないので、、
先ずは、添削してしまいますが、このコードは '選択したファイルを取り込み、別のファイルに貼り付ける とあるので3つのブック(実行ブックを含む)を操作するプロシージャが基になっているようですね
参考サイトなどを駆使して作っていく場合、やりたい処理のフローチャートなどをしっかり作り(理解できていれば良いですが)進めるのが良いと思います。不要な部分を消すのは、意外と面倒なので。。
出来るだけ、、同じように書き、コメントを入れました。
書き方は、人それぞれなので参考とするべきかはわかりません。
一応、デバッグしてみましたが、あくまでサンプルですのでデバッグしてください。
コメントが付き読みにくいのでVBEに貼り付けて読む方が良いと思います。
Sub test_マスターデータ取り込み() '選択したファイルを取り込み、実行ブックのActiveSheetに貼り付ける
Dim RC As Integer
Dim OpenFileName As String
Dim wbMoto As Workbook, wbSaki As Workbook
Dim sh1name As String
Dim i As Long
Dim flag As Boolean
'VBA実行ブック
sh1name = ActiveSheet.Name '現在開いているシート名
Set wbMoto = ActiveWorkbook 'マスターデータ取り込みブックをセット
'コピー元ファイルの選択
'インフォメーション
RC = MsgBox("Excel マスターデータファイルを開きますか?", vbYesNo + vbQuestion, "確認")
If RC = vbNo Then MsgBox "処理を中断します": Exit Sub 'もしRCのメッセージにNOと答えたら終了
'ファイルピックアップダイアログ
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
If OpenFileName = "False" Then MsgBox "キャンセルされました": Exit Sub 'もし指定したファイルがFalseなら終了
'画面抑制
Application.ScreenUpdating = False
'ダイアログボックスで指定したExcel マスターデータファイルを読み取り専用で開く。
Set wbSaki = Workbooks.Open(fileName:=OpenFileName, ReadOnly:=True, UpdateLinks:=0)
'開いたブック内シートすべてに対して処理
For i = 1 To wbSaki.Worksheets.Count
If Worksheets(i).Name = sh1name Then 'もし転記元のシートの名前と現在開いているブックのシートの名前が一緒だったら
flag = True 'インフォメーションフラグ
wbSaki.Worksheets(i).Range("G2:N32").Copy '該当シートの範囲をコピー し 実行ブックに数式と数値の書式で貼り付け
wbMoto.Worksheets(sh1name).Range("G2:N32").PasteSpecial xlPasteFormulasAndNumberFormats
Application.CutCopyMode = False 'コピー切り取りを解除
wbSaki.Close SaveChanges:=False 'マスターデータ取り込み先のファイルを保存せずに閉じる
Exit For '2つ同名シートはあり得ないので無駄な処理をやめループを抜ける
End If
Next i
If flag <> True Then 'フラグが"True"ではなかったら(シートが見つからなければ)
MsgBox sh1name & "シートはありません。", vbInformation 'シートはありませんの情報メッセージアイコンが出る
wbSaki.Close SaveChanges:=False 'マスターデータ取り込み先のファイルを保存せずに閉じる
End If
'画面抑制解除
Application.ScreenUpdating = True
End Sub
No.3
- 回答日時:
>④ですが、実行ブックにaaaシートがあり、UIブックにもあったら貼り付け、実行ブックbbbがあり、UIブックにもbbbがあったら貼り付けるようにしたいです。
このaaa , bbb は一度の実行で行いたいのでしょうか?
aaaは sh1name = ActiveSheet.Name '現在開いているシート名
で変数に代入されていますが、bbbはどのように取得するのでしょうか?
予めaaa,bbbが分かっているのなら、簡単だけれども、、、
、、、コード添削しても構いませんか?
ありがとうございます。
処理に必要なブックは2つです。
VBAは知識不足ですので、添削は大変勉強になります。お願いいたします。
aaa,bbbは可能であれば一度の実行で行いたいです。
具体的に申し上げますと、UIブックも実行ブックにも名前のシートが記載してあり、UIブックにある名前のシートが実行ブックにもあったら転記という形にしたいです。
よろしくお願いいたします。
No.2
- 回答日時:
#1です
想像の範疇ですが、処理に必要なブックは2つでなく3つなのでしょうか?
Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0
Set wbSaki = Workbooks.Open(Path & SetFile) '転記元のシート検索
同じパスを示しているけれど変数Path の値設定もされていないようですが、
わざわざ変数Pathを書いている事などから想像して別ブックを開きたいのかな?
いずれにしても、フローなどを書いて整理してみるのが良さそうですね。
No.1
- 回答日時:
こんばんは、
コードを検証していませんが、
フローを整理して考えると良いのではと思います。
コメントとコードがあいまい部分があり良く分かりません。
sh1name = ActiveSheet.Name '現在開いているシート名
Set wbMoto = ActiveWorkbook 'マスターデータ取り込み元をセット
これは、両方共にVBAが実行されたブックですね。
①実行されたシート名とブックを変数に登録
②コピー元のブックをUIで指定
③コピー元ブックを開く
④シート名が同じか調べ同じなら範囲をコピー
⑤実行されたシートに同じ範囲に数式と数値の書式で貼り付け
⑥無かった場合の表示
⑦コピー元ブックを閉じる
でしょうか、、これは合っていますか?
>転記先に貼り付けがされません。
転記先とはどのブックですか?
VBA実行ブック? UIで指定したブック? それともさらに違うブック?
こんばんは。
ご回答ありがとうございます!
①~⑦までの手順で間違いありません。
④ですが、実行ブックにaaaシートがあり、UIブックにもあったら貼り付け、実行ブックbbbがあり、UIブックにもbbbがあったら貼り付けるようにしたいです。
転記先はVBA実行ブックです。UIで指定したブックから実行ブックに貼り付けたいです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
ワイルドカード「*」を使うとう...
-
VBAで別ブックのシートを指定し...
-
エクセルVBAが途中で止まります
-
VBA シート名が一致した場合の...
-
VBAで別のブックにシートをコピ...
-
別ブックをダイアログボックス...
-
VBA コードを実行すると画面が...
-
EXCEL VBA 単語置き換え につい...
-
拡張メタファイルにて貼り付け
-
VBSでExcelのオープン確認
-
エクセルマクロで、他ブックか...
-
VBS Bookを閉じるコード
-
VBで既存エクセルシートを新規...
-
転記先VBA 一致しているセルが...
-
pythonでクラスで複数のメソッ...
-
ACCESSVBA からExcelの他ブック...
-
VBA 実行時エラー 2147024893
-
[Excel]ADODBでNull変換されて...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
別ブックをダイアログボックス...
-
VBAで別ブックのシートを指定し...
-
Excelのマクロについて教えてく...
-
VBA 別ブックからコピペしたい...
-
Excelのマクロについて教えてく...
-
vbaでvbaProjectのパスワード解...
-
VBA コードを実行すると画面が...
-
【マクロ】アクティブセルにブ...
-
Excelのマクロについて教えてく...
-
VBAで別のブックにシートをコピ...
-
VBS Bookを閉じるコード
-
Excelのマクロについて教えてく...
-
【ExcelVBA】zip圧縮されたCSV...
-
【ExcelVBA】インデックスが有...
-
ACCESSVBA からExcelの他ブック...
-
vbaで他のブックに転記したい。...
-
【マクロ】違うフォルダにある...
おすすめ情報