次の方法で共有

【エクセル2007】複数のブックの同一セルに同じ値を一括で入れるには

Anonymous
2013-08-20T02:33:55+00:00

お世話になっております。

エクセル2007を使用しています。

複数のブックの同じセル番地に、同じ値を一括で入れる方法はありますか?

例えば、A,B,C…というブックがそれぞれあり、AのブックのA1とB2に値を入れたら、

B,C…のブックのA1とB2にも同じ値が入るようにしたいです。(または、すでにA1,B2に入力してある値のコピーだけでも良いです)

シート名は全て同じで、同じフォルダにはいっています。ファイルは200ほどあります。

どうぞよろしくお願い致します。

Microsoft 365 と Office | Excel | 家庭向け | Windows

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

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

質問作成者が受け入れた回答

Anonymous
2013-08-23T02:36:30+00:00

>With .Worksheets("シート名")にしないと動かなかったのですが

失礼。タイプミスです。 WorkSheetsが正しいです。

修飾するというのはオブジェクトがどこに所属するかを明確にするという意味です。

オブジェクトと言っても難しく考える必要はありません。

ブック、ワークシート、レンジのように実体のあるものはすべてオブジェクトです。

例えば単に

Range("A1")と書いただけではどこに所属するものかExcelには分かりません。

(A1は各ブックの各シートにありますから)

それで、単にRange("A1")となっていた場合、Excelは仕方がないのでActiveSheetのRange("A1")と解釈するルールになっています。

ですからたまたま正しいシートがActiveになっていれば正常に動きます。

命令の中には自動的に違うところをActiveにするものがあります。

今使われている例ではOpenです。Openをやると、いままでThisWorkbookのどこかのシートがActiveだったのが、新たに開いたブックの、保存された時にActiveだったシートに切り替わります。

今回はたまたまそこにデータを格納するつもりだったので正常に動いているわけです。

こういう紛れを避けるため、オブジェクトを修飾して正体を明確にするわけです。

wBK.WorkSheets("Sheet1").Range("A1")

は、wBkつまり新たに開いたブックの、Sheet1のA1と言うことになり、仮にブックがSheet2をActiveSheetとして開かれてもちゃんと動きます。

ただ、すべてのオブジェクトにいちいちこのような記述をするのは大変ですので、

With句で「この範囲のオブジェクトはすべてこれです」と教えてやったり、オブジェクト変数(ここではwMYSheet)

などを使って、書き易くかつ読み易くします。

前にも申し上げましたが、複数のワークシートや複数のワークブックを取り扱う場合これをあいまいにするとトラブルの元になります。

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

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

9 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2013-08-21T06:13:43+00:00

    y sakuda 様

    お世話になっております。

    アドバイスどうもありがとうございました。

    頂いたコードを試してみたところ、メッセージボックスでファイルが表示されるようになっていました。

    ファイルが200ほどありますので、200回クリックはきついです。。

    以下のコードでフォルダ内の全てのブックを開くことには成功したのですが、

    その後の、y sakuda 様のおっしゃっている

    >セルの値を取得して置いて、それを相手方のセルに入れる

    という方法がわかりません。初心者ですので、ネットで調べながらやっていますが、コピーとは違うんですよね?

    現在開いているファイルに次々と処理をして保存して閉じるような構文があれば教えて頂けますか?

    よろしくお願い致します。

    Sub OpenAllBooks()

    Dim FileName As String

    Dim OpenedBook As Workbook

    Dim IsBookOpen As Boolean

    FileName = Dir("*.xls")

    Do While FileName <> ""

    If FileName <> ThisWorkbook.Name Then

    IsBookOpen = False

    For Each OpenedBook In Workbooks

    If OpenedBook.Name = FileName Then

    IsBookOpen = True

    Exit For

    End If

    Next

    If IsBookOpen = False Then

    Workbooks.Open (FileName)

    End If

    End If

    FileName = Dir()

    Loop

    End Sub

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

    0 件のコメント コメントはありません
  2. Anonymous
    2013-08-20T09:34:41+00:00

    >ThisWorkbook.Path & "\*.xlsx

    こういう表現は出来ません。 ようするに*なんてファイルはないという意味で怒られたわけです。

    ようするにFolderのファイル全部あさりたいということだと思います。

    FileSystemObjectなんか持ち込まず、Dirコマンドで純粋なExcelVBAでもできますが、こういう時私は便利なのでFileSystemObjectを使っちゃいます。

    Sub bbb()

    Dim FS As Object, wFile As Object

    Set FS = CreateObject("Scripting.FileSystemObject")

    With FS

      For Each wFile In .GetFolder(ThisWorkbook.Path).Files

        MsgBox wFile.Name

      Next

    End With

    End Sub

    これで、フォルダ内のファイルが順次取得できるわけですが、Openする前に自分自身とxlsx以外のファイルはスキップするようにコーディングしてください。(要するに名前や拡張子をチェックしてはじく)

    また、コピー&ペーストでやろうとされているようですが、値だけの話であれば、セルの値を取得して置いて、それを相手方のセルに入れてやった方が早いし安全です。

    まだ素直には動かないと思いますが、分からなくなったら引き続きこのスレッドに投稿してくだされば付き合います。

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

    0 件のコメント コメントはありません
  3. Anonymous
    2013-08-20T06:02:50+00:00

    y sakuda 様

    はじめまして。ご返信有難うございます。

    VBAは詳しくないので、ネットで調べながらやっているのですが、

    どうしても With Workbooks.Open("ThisWorkbook.Path & "\*.xlsx") のところで構文エラーになり

    マクロを実行すると「With Workbooks.Open("ThisWorkbook.Path & "\*.xlsx")に指定したアドレスが見つかりません」となってしまいます。どこか間違っているところがありますか?

    よろしくお願い致します。

    Sub Test1()

    Dim myCelldate As Range

    Dim myCellrate As Range

    Set myCelldate = Sheets("Sheet1").Range("K3")

    Set myCellrate = Sheets("Sheet1").Range("E24")

    With Workbooks.Open("ThisWorkbook.Path & "\*.xlsx")

    .Worksheets("Sheet1").Range("K3").Copy myCelldate

    .Worksheets("Sheet1").Range("E24").Copy myCellrate

    .Close False

    End With

    End Sub

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

    0 件のコメント コメントはありません
  4. Anonymous
    2013-08-20T04:12:27+00:00

    そういう手段はありません。

    VBAがおできになるのなら、各ブックを順次開いて処理するということは可能ですが、一括してというわけではありません。

    (VBAをご存じである程度作れても、どこかうまく行かないということでしたらサポートしますが、丸ごとそう言いうコードを教えろと言う場合は私は対応しませんのでご承知置きください)

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

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