どなたかご教授いただければ幸いです。
エクセルファイルAの4行目の値全てを、デスクトップ上 エクセルファイルBの最終行に
値貼りつけしたいのですが、うまく動作しません。
一旦、下記コードのようにエクセルファイル4行目の値を値貼りつけしてから実行するとうまくいきました。
ただ、転記したいファイルAの4行目には関数を入れているため、できれば関数はそのまま残したいのでエラー保護含め改善策をお教えいただければ幸いです。
※補足
ファイルBにはデータを集めていきますので、最終行を取得して保存しております。
Sub 管理_保存()
Set WSH = Create Object("Wscript .Shell")
''Dim Desktop Path As String
Desktop Path = WSH .SpecialFolders("Desktop")
Application .Screen Updating = False ''画面停止
str Msg = "個人管理表に追加しますか?"
int Ret = Msg Box(str Msg, vb Yes No, "Msg Box")
If int Ret = vb No Then Exit Sub
Sheets("ファイルA").Select
Range("A4:T4").Select
Application .Cut Copy Mode = False
Selection .Copy
Selection .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone , SkipBlanks _
:=False, Transpose:=False
Rows("4:4").Select
Selection .Copy
Range("A1").Select
Workbooks .Open Filename:= Desktop Path & "\管理\ファイルB.xlsx"
n = Cells(Rows .Count, "A").End(xlUp).Row + 1
Range("A" & n).Select
ActiveSheet .Paste
Cells .Select
Application .CutCopyMode = False
Selection .Copy
Selection .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone , SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook .Save
ActiveWindow .Close
Application . ScreenUpdating = True ''画面再開
Set WSH = Nothing
End Sub
No.3
- 回答日時:
こんにちは
>できれば関数はそのまま残したいので
元の関数を消さなくても、Value = Value 形式で値だけ転記するか、またはCopyして「値をペースト」すれば、関数はそのままでも目的を達することができるのではないでしょうか?
ざっと見ただけですが、以下気になる点をいくつか。
・変数名やメソッドに不可思議な空白がありますが、そのままで動作しているのでしょうか?
・「ファイルB」のシートを指定していませんが、シートは1つしかないのでしょうか?
・「ファイルB」の最終行はA列で判断しても問題ないのでしょうか?
(値を転記した際に空白があると、次には上書きされてしまう)
など不明点が多いですが、ひとまず、ご提示と同等の内容を簡略なコードで実現できると思われるものをご参考までに。
(最初の、確認メッセージ等は省略しています)
※ 値のみの転記なので、書式等はコピーされません。
Sub sample_12302020()
Dim col, dat, path
col = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Column
dat = Cells(4, 1).Resize(, col).Value
path = CreateObject("Wscript.Shell").specialfolders("Desktop")
With Workbooks.Open(path & "\管理\ファイルB.xlsx")
Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, col).Value = dat
.Close True
End With
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは、
先の回答部分は変更されていないのですね。
OKです。
処理の流れは同じで考えて書き直してしまいますが、悪く思わないでくださいね。
内容は、ご確認ください。
処理の解釈が違っていれば、補足に上げてください。
出来れば、解決されるまで、締め切らないように希望します。
Sub 管理_保存()
Dim 個人管理表 As String
Dim n As Long
個人管理表 = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & _
"\管理\ファイルB.xlsx"
If MsgBox("個人管理表に追加しますか?", vbYesNo, "実行確認") = vbNo Then Exit Sub
Application.ScreenUpdating = False ''画面停止
Sheets("ファイルA").Rows("4:4").Copy
If Dir(個人管理表) <> "" Then
On Error Resume Next
Open 個人管理表 For Append As #1
Close #1
If Err.Number > 0 Then
On Error GoTo 0
Windows("ファイルB.xlsx").Activate
'どこのシートか分からないので取り敢えず一番左のシート(変更して)
Sheets(1).Activate
With ActiveSheet
n = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & n).PasteSpecial Paste:=xlPasteValues
.Range("A1").Select
End With
ActiveWorkbook.Close SaveChanges:=True
Else
Workbooks.Open Filename:=個人管理表
'どこのシートか分からないので取り敢えず一番左のシート(変更して)
Sheets(1).Activate
With ActiveSheet
n = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & n).PasteSpecial Paste:=xlPasteValues
.Range("A1").Select
End With
ActiveWorkbook.Close SaveChanges:=True
End If
Else
MsgBox 個人管理表 & vbCrLf & _
"が存在しません"
End If
Application.CutCopyMode = False
Range("A1").Select
Application.ScreenUpdating = True ''画面再開
End Sub
ご回答ありがとうございます。
事細かにご説明ありがとうございます。
コードまでありがとうございます。
追加で質問ですが、
異なるPCでも同じ動作にしたいのですが(違う人が使用しても)
≫個人管理表 = CreateObject("Wscript.Shell").SpecialFolders("Deskto p") & _
"\管理\ファイルB.xlsx"
上記は動作しますでしょうか?
No.1
- 回答日時:
>一旦、下記コードのようにエクセルファイル4行目の値を値貼りつけしてから実行するとうまくいきました。
回答で無くて申し訳ないのですが・・・。
提示されているものは、うまくいった方のコードですよね?
改善策を教えて欲しいのであれば、うまくいかない方のコードを提示した方が良いと思いますよ。
できれば、どう上手くいかないのかも書いてください。
ご回答ありがとうございます。
おっしゃる通りですね。
うまくいかないほうを消してしまったので、動作する方でもお詳しい方は
分かるかなと考えておりました。
今後は参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 3個のfileのセルデータを1個のfileのセルに貼り付けるVBAコードですが。 1 2023/02/20 09:21
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
exeファイルをデータ転送サービ...
-
binファイルを解凍したいの...
-
Latexで図番号だけを「図1.1」...
-
#include <Windows.h>というヘ...
-
Word VBA MSGBOX 内で降順表示
-
exeファイルの中身を見る方法は...
-
パイソンでpy ファイルと p...
-
bibtexで参考文献作成できない
-
C# OpenFileDialog
-
Matlab/ @の意味
-
exeファイルが作れない(windows10)
-
ファイル構造が破損しているフ...
-
CSSを1ページに1枚作るのって変...
-
VBAでHTMLファイルをPDFにしたい
-
Windows10のScilabのV6.1.1に関...
-
ファイルは何で構成されている...
-
VBAからファイルをセル入力から...
-
他のMDBのマクロを実行する方法
-
Batファイルをバイナリ形式にす...
-
アクセス 壊れた? 「ファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセス 壊れた? 「ファイ...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
binファイルを解凍したいの...
-
.NETアプリを作ったときの .man...
-
ファイル構造が破損しているフ...
-
2つのファイルのバイナリをコン...
-
CSSを1ページに1枚作るのって変...
-
Word VBA MSGBOX 内で降順表示
-
公文書のxmlファイルの開き方が...
-
jarファイル
-
バッチ処理で追記コピーしたい
-
自分で作成した重要ファイルを...
-
ファイルは何で構成されている...
-
exeファイルをデータ転送サービ...
-
リンクの張り付けかたを教えて...
-
exeファイルの中身を見る方法は...
-
参照するファイルをワイルドカ...
-
CRCが一致する確率
-
C言語---ファイルに出力したデ...
おすすめ情報