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

もととなるAというエクセルファイルがあり、そのシートAの指定範囲(AM1:bb12)をコピーして、同じフォルダーにある同じ形式の複数のエクセルファイルの同じシートAの同じ範囲(AM1:bb12)に貼り付けて、そのままそれぞれ同じフォルダにあるファイルを上書き保存していきたいのですが、どのようにしたらよいかご教示くださいませ。どうかよろしくお願いいたします。

A 回答 (5件)

こんにちは


横から失礼します
#3で示されているコードとなさりたい事には、かなり違いがありますね

>もととなるAというエクセルファイル
これは、VBAを実行するブックを指していますか?
ここがはっきりしないとダメです。(重要なところです)
しかし、お急ぎなようなので
もととなるAというエクセルファイル=VBA実行ブックとして 回答を進めます

コードでは別フォルダに新しく(コピー)ブックが出来ますが、、
同じファイルに上書きをすると元データ(ファイル)を書き換えてしまいますが良いのでしょうか?

示されているコードを同じフォルダに上書き保存する場合の改造は
①不具合を直します(すでに出ている回答に重複しますが)
FileName = Dir(FolderName1 & “*xls*”) はファイル名を返すので
Workbooks.Open FileName だけではダメだと思います
Workbooks.Open FolderName1 & FileName ですね。

②同じパスに保存
FolderName2 & FileName ではなく
Workbooks(Workbooks.Count).SaveAs FolderName1 & FileName

そもそも上書きなので .Close SaveChanges:=True かな

③ループで、もととなるAというエクセルファイルを対象から外す必要があります。
もととなるAというエクセルファイルがVBAを実行するブックだった場合
If ThisWorkbook.Name <> FileName Then
ブックを開く
コピー実行
保存して閉じる
End If
FileName = Dir()

④既存ブックへの上書き保存なので
アラートを出さないようにする 一例
Application.DisplayAlerts = False
保存して閉じる
Application.DisplayAlerts = True

今回は上書きなので
.Close SaveChanges:=True でOK?

コピーについての参考
ThisWorkbook 実行ブック 
ActiveWorkbook 開いた直後のブック(他のブックがアクティブになるまで)
Workbooks(Workbooks.Count) 現状の最後に開いたブック

この場合、Workbooks(Workbooks.Count)とActiveWorkbookは同じ
    • good
    • 3

No.3です。



ベテラン回答者様に聞いてみては良かったのにと思いますが。
こんな初級レベルなジジィでなくとも。
⇒ここでAAAグレードの回答を続けている位ですから、どの言語でも解決可能な方なのかなと。

>貼り付ける範囲を変えたいのですがうまくいきません。

曖昧ではなく、
・貼り付けたい範囲を変えたいとはどういう意味なのか?
・上手くいかないとは何が起きているのか?
と言った情報は必要かと。

取り敢えず

Workbooks.Open FileName

ここは格納しているフォルダが不明(Dir関数はファイル名しか取得しない)なので、

Workbooks.Open FolderName1 & FileName

ですね。

---

If FolderName1 = “False” Then
Exit Sub
End If

この部分は全く意味をなさないと思いますよ。
手前で変数にPathを代入していますし、その有無をチェックしている訳じゃないですから。

If Dir(FolderName1, vbDirectory) = “” Then
Exit Sub
End If

こうかな?
でも他で言うならWorkBookオブジェクトで宣言しSetステートメントにて代入された変数を用いるのが、後々わかりやすいかも。
    • good
    • 0

セルに書式設定(塗りつぶしやフォントの変更・罫線など)がなければ、コピペではなく値の代入でしょう。



>同じフォルダーにある同じ形式の複数のエクセルファイルの同じシートA

同じシートAとはシート名の事ですか?
どのブックにも存在している?

>同じフォルダーにある同じ形式の複数のエクセルファイル

参考リンクは既に出ていますので割愛しますが、間違っても自分自身に値を貼り付けないよう気を付けて下さいね。
    • good
    • 0
この回答へのお礼

どうしてもコピー・ペーストしたいのです。その部分に画像的なものがありまして。

同じシートAとはシート名です。どのブックにも存在しています。ブック名はランダムです。


下記でいうと


Sub フォルダの中に含まれるファイルのファイルを順に変更する2()

Dim FolderName1 As String
Dim FolderName2 As String
Dim FileName As String

FolderName1 = “C:\処理前\”
FolderName2 = “C:\処理後\”

If FolderName1 = “False” Then
Exit Sub
End If

FileName = Dir(FolderName1 & “*xls*”)
Do While FileName <> “”
Workbooks.Open FileName
Cells(1, 1) = 1
Workbooks(Workbooks.Count).SaveAs FolderName2 & FileName
Workbooks(Workbooks.Count).Close
FileName = Dir()
Loop

End Sub



フォルダを変える必要なく、貼り付ける範囲を変えたいのですがうまくいきません。

お礼日時:2021/12/02 11:47

おはようございます。



参考になりそうなリンクを貼っておきます。

フォルダの中にある全てのExcelファイルに同じ処理をするマクロ
https://officevba.info/fileikkatsushori/

ThisWorkbook.Path
https://daitaideit.com/vba-get-filepath/#mokuzi3-1


値だけなら、コピーではなく、変数に入れておくのもありかと。
毎回コピーでも良いですが。

Dim myAllDat as Variant
myAllDat = Range("AM1:bb12").Value ’変数に値を一括で入れる

Range("AM1:bb12").Value = myAllDat ’セルに一気に書き出し


取り合えず、No.1の方の記録と、上記である程度可能かと思います。
不明な点がありましたら、コードをUpして、エラーや、どううまくいかない
かなどを書かれると、回答があると思います。
    • good
    • 0

マクロ記録を使って 実際の操作をやって 終わったら 記録終了


それで 記録された 記述を手直ししてやればいいです。
    • good
    • 0

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