次の方法で共有

table.xlsのデータをコピーして構築.xlsxへ追加したい。

Anonymous
2023-07-24T07:08:06+00:00

下記のコードは、table.xlsのPPSシートに記入しているデータを共有フォルダーにある

構築.xlsxの貼付シートの最終行に貼り付けるVBAになります。

※データの範囲は、A2からN列の最終行までになります。

ここで、問題なのが、構築.xlsxのファイルを開いていないとデータが張り付かない状況で、

構築.xlsxを開いた状態では、貼り付けられる仕様になってしまっております。

構築.xlsxのファイルを閉じていてもデータが貼り付けられるようなコードに修正したい

と考えております。ご指導頂けないでしょうか

色々な掲示板や知っていそうな方に相談しましたが、一項に解決に至らないため、こちらへ

投稿させて頂きました。

お忙しいとは思いますが引き続きよろ

Dim 最終行 As Long

Dim src As Range

最終行 = Cells(Rows.Count, 1).End(xlUp).Row

Set src = Range(Cells(2, 1), Cells(最終行, 14))

With Workbooks.Open("\共有\構築.xlsx").Sheets("貼付")

src.Copy 

.Cells(.Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues, xlNone, False, False 

.Parent.Close True 

End With

Microsoft 365 と Office | Excel | ビジネス向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

14 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2023-07-25T08:50:00+00:00

    > sk.exeさんの長いコードは、何を意味するものでしょうか

    お望みの「table.xlsのPPSシートに記入しているデータを共有フォルダーにある
    構築.xlsxの貼付シートの最終行に貼り付ける」コードのサンプルです。

    > 最初にも記載させて頂いたようにVBAの初心者になります。> 各コードの意味も理解不十分であるため 噛み砕いて頂けると幸いです。

    まず「 Takahashi Tadayoshi (takatada72) さんが Excel にしてほしいこと」を
    より具体的に(抽象的ではなく、かつ情報に過不足のない形で)明示されることを
    お奨めします。

    それが出来なければ、相手が人間だろうが ChatGPT だろうが、
    あなたが本当に望む適切な回答を得ることは難しいでしょう。

    例えば件の moug のスレッドにおいては

    > 毎回、コピーする範囲を選択するので、そちらを簡略化できないか

    というのがそもそものご質問の主旨であると認識していますが、

    > 下記のコードでは、構築.xlsxのファイルを開いておかないと、> エラーになるため、手動で開いて置くのですが、手動で開かなくても> データの貼付けができるようになると嬉しいです。

    もし「**コピーする範囲を含むブック」や「出力先となる範囲を含むブック」がその時点で開いていても、開いていなくても、**データが貼り付けされるようにしたい
    という要求が含まれているならば、ここでの「コピーする範囲」が
    具体的に

    どのフォルダに保存されている

    ・どんな名前のブックの

    ・どんな名前のワークシートの

    ・どこからどこまでの範囲

    であるのかが判らなければ、そのブックを開いたり、参照させたりしようがなく、
    当然 Excel に対して適切な命令を与えられるわけがありません。

    また、同スレッドにおいて私は、そのコピー元となるブックについて

    > それがどのブックのどのワークシートに含まれるセル範囲なのか、> 具体的に明記されることをお奨めします。 > Table.xlsx はどこに保存されているのでしょうか。

    とその旨を明記するように提案しましたが、それに対しては
    具体的な説明がなく、結局「コピーする範囲」についての認識の
    すり合わせが充分に為されないまま、他の回答者との対話が
    平行線となって takatada72 さんご自身の判断により
    上記のスレッドは閉じられました。

    ただその一見不毛に見えるやりとりの中で、
    23/07/20 10:18:13 の WinArrow さんの回答に対し、
    23/07/20 10:57:42 に takatada72 さんは
    次のように回答されています。

    > コードのトップにWinArrowさんのコードを貼り付けて実行しました。> 結果、下記のような表示がイミディエイトウインドウに表示されました。> 「構築.xlsx」の表示は、されませんでした。「構築.xlsx」は、閉じて、マクロを> 実行しております。> C:\Users\●●●●●●●\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB> C:\Users\●●●●●●●\Desktop\Table.xlsx

    イミディエイトウインドウに出力された以上の結果から、
    ここでの「コピーする範囲」とは、デスクトップ上に保存されている
    「Table.xlsx」という名前のブックの、「PPS」という名前の
    ワークシートの A2 セルから N 列の最終行までのセル範囲である
    と推定されます。

    以上の点を踏まえて、私の例示したコードではその実行環境における
    デスクトップのフォルダパスを取得し、更にコピー元ブックのファイル名( Table.xlsx )を
    文字列結合した結果を「コピー元ブックのフルパス」として扱い、コピー元ブックが
    既に Excel 上で開かれていればそのブックを参照し、まだ開かれていなければ
    そのブックを Excel で開いて参照する、という形を取っています。

    出力先であるブック( 構築.xlsx )についても同じ方法で参照を取得していますが、
    そのブックが保存されているネットワーク上のコンピュータの共有フォルダの
    本来のパスが不明であるため、その部分に関しては仮のパスを記述しています。

    > '出力先ブックのパスの指定> '(コンピュータ名、共有フォルダ名等は適宜修正すること)> strDestinationBookPath = "\ComputerName\SharedFolderName\構築.xlsx"

    MSDN フォーラムの方でも指摘されていますが、少なくとも
    "\共有\構築.xlsx" というのは UNC パスとして成り立っていません。
    正確なパスを記述できなければ、結局同じやりとりの繰り返しになるだけでしょう。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Hebikuzure aka Murachi Akira 325.9K 評価のポイント MVP ボランティア モデレーター
    2023-07-24T08:46:07+00:00

    VBA 開発についてはこのフォーラムの取り扱い範囲外になります。

    ここでコメントが付かなければ以下で質問してください。

    Msdn フォーラム - Visual Basic for Application(VBA) (microsoft.com)

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. 削除済み

    この回答は当社の行動規範に違反したため削除されました。 アクションを実行する前にこの回答を手動で報告したか、自動検出機能により特定しました。 詳細については、当社の行動規範を参照してください。


    コメントはオフになっています。 詳細情報

  4. Anonymous
    2023-07-24T07:54:56+00:00

    Hebikuzureさん

    早速、ありがとうございました。
    太字のコードを追加してみましたが、構築.xlsxのファイルが開くだけで、

    データは、貼り付けられませんでした。

    コードの間違いでしょうか

    お忙しいとは思いますが宜しくお願い致します。

    '構築.xlsxのファイルが開いているかを確認、開いていなければ、開くようにする

    Dim wb As Workbook

    Dim filePath As String


    filePath = "\共有\構築.xlsx"


    'ファイルが開いているかどうかを確認する

    On Error Resume Next

    Set wb = Workbooks(filePath)

    On Error GoTo 0


    'ファイルが開いていなければ開く

    If wb Is Nothing Then

    **Set wb = Workbooks.Open(filePath)** 
    

    End If

    Dim 最終行 As Long

    Dim src As Range

    最終行 = Cells(Rows.Count, 1).End(xlUp).Row

    Set src = Range(Cells(2, 1), Cells(最終行, 14))

    With Workbooks.Open("\共有\構築.xlsx").Sheets("貼付")

    src.Copy

    .Cells(.Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues, xlNone, False, False

    .Parent.Close True

    End With

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Hebikuzure aka Murachi Akira 325.9K 評価のポイント MVP ボランティア モデレーター
    2023-07-24T07:18:17+00:00

    ロジックとしては、構築.xlsx が既に開かれているかどうかチェックし、開かれていなければ開く処理を最初に追加すれば良いですね。

    ブックが開かれているかチェックする | Excel作業をVBAで効率化 (vbabeginner.net)

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません