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

エクセルVBAについて質問があります。お詳しい方、ご教授頂ければ幸いです。
A,B2つのエクセルのファイルがあります。例えばファイルAのセル「A10」から下を、(ファイルBを開かずに)ファイルBのセル「A10」から下のデータに置き換えたいのですが、どのようにすれば良いでしょうか。
また、ファイルAから「ファイルを開く」ダイアローグを表示させてファイルBを指定したいのですが、この場合の方法もよろしければ教えて頂けませんでしょうか。
よろしくお願いいたします。

A 回答 (4件)

後者の回答です。



FileFoOpen = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls")
    • good
    • 1

ファイルAから「ファイルを開く」ダイアローグを表示させてファイルBを指定し、ファイルAのセル「A10」から下をファイルBのセル「A10」から下のデータに置き換えるサンプルです。


ファイルBを開かずとのリクエストですが、開いているところを見せないようにはしています。
Sheet名に言及がなかったのでABともにSheet1としています。

Sub test01()
Dim fn As String
Dim wb As Workbook
fn = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls")
With ThisWorkbook.Sheets("Sheet1")
.Range(Range("A10"), Range("A10").End(xlDown)).ClearContents
End With
If fn = "False" Then
MsgBox "キャンセルしました。"
Exit Sub
End If
Application.ScreenUpdating = False
Set wb = Workbooks.Open(Filename:=fn)
With wb.Sheets("Sheet1")
.Range(Range("A10"), Range("A10").End(xlDown)).Copy
ThisWorkbook.Sheets("Sheet1").Range("A10").PasteSpecial
End With
wb.Close
Set wb = Nothing
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
    • good
    • 0

#2です。

少し修正します。

Sub test02()
Dim fn As String
Dim wb As Workbook
fn = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls")
With ThisWorkbook.Sheets("Sheet1")
.Range(Range("A10"), Range("A10").End(xlDown)).ClearContents
End With
If fn = "False" Then
MsgBox "キャンセルしました。"
Exit Sub
End If
Application.ScreenUpdating = False
Set wb = Workbooks.Open(Filename:=fn)
With wb.Sheets("Sheet1")
.Range(Range("A10"), Range("A10").End(xlDown)).Copy
ThisWorkbook.Sheets("Sheet1").Range("A10").PasteSpecial
Application.CutCopyMode = False
End With
wb.Close (False)
Set wb = Nothing
Application.ScreenUpdating = True
End Sub
    • good
    • 0

#3です。


昨日は眠かったのか、今見直すと不備な点が散見されました。
書き直します。

Sub test03()
Dim fn As String
Dim wb As Workbook
fn = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls")
With ThisWorkbook.Sheets("Sheet1") 'このBOOKのSheet1において
.Range(.Range("A10"), .Range("A10").End(xlDown)).ClearContents 'A10以下の連続したデータを消去
End With
If fn = "False" Then
MsgBox "キャンセルしました。"
Exit Sub
End If
Application.ScreenUpdating = False '画面更新を止める
Application.EnableEvents = False '自動マクロを止める
Set wb = Workbooks.Open(Filename:=fn, UpdateLinks:=1) '警告を出さずリンクを更新して開きwbとする
'(UpdateLinks:=0 にすると、リンクを更新せずに開きます。)
With wb.Sheets("Sheet1") 'wbのSheet1において
.Range(.Range("A10"), .Range("A10").End(xlDown)).Copy 'A10以下の連続したデータをCopy
ThisWorkbook.Sheets("Sheet1").Range("A10").PasteSpecial 'このBOOKのA10以下に貼り付け
Application.CutCopyMode = False 'コピーモード終了
End With
wb.Close (False) '警告を出さず保存しないでwbを終了
Application.EnableEvents = True '自動マクロを有効へ
Set wb = Nothing
Application.ScreenUpdating = True '画面更新
End Sub
    • good
    • 0
この回答へのお礼

大変お礼が遅くなり申し訳ありません。
皆様のおかげで、大変勉強になりました。本当にありがとうございます。

お礼日時:2008/05/01 22:22

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