- ベストアンサー
エクセル 複数のシートの値を同じにする
いつもお世話になります。 Sheet1~6があり、それぞれのシートのセルF7~J7の値は常に同じにしておきたいのです。 つまり、 ●Sheet1のセルF7の値を変更した時、Sheet2~6のF7の値を同じにする。 ●Sheet2の 〃 Sheet1・3~6のF7の値を同じにする。 ・・・・ もちろんG7~J7の値を変更した時も同様に、それぞれのシートに値を反映したいのです。 可能でしょうか?
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 #10だと上手くないので少し訂正しました。 あまりスマートじゃないけど、、、 書くのは Thisworkbookモジュールです。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim wsArray, r As Range, flg As Boolean wsArray = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6") flg = False For i = 0 To UBound(wsArray) If Sh.Name = wsArray(i) Then flg = True Next i If Not flg Then Exit Sub For Each r In Target If Application.Intersect(Sh.Range("F7:J7"), r) Is Nothing Then Exit Sub Application.EnableEvents = False For i = 0 To UBound(wsArray) If Sh.Name <> wsArray(i) Then Worksheets(wsArray(i)).Range(r.Address).Value = r.Value End If Next i Application.EnableEvents = True Next r End Sub
その他の回答 (11)
質問者に質問ですが、あなたが希望している動作はどちらですか? (1) セルF7~J7の値を変更した時と同時に他のシート のセルF7~J7の値を変更したい。 (2) セルF7~J7の値を変更した時と同時ではなく作業 が一段落してから他のシートのセルF7~J7の値を 変更したい。 どちらでしょうか? 例えば(1)ですと間違えて入力した場合、全シートの値 が変更されてしまいます。すると、エクセルの知識に 乏しい人が使うとなれば、あわてたりはしませんか? 別にすぐに訂正すれば問題ないかな? そこで、手前味噌になりますが(2)の方がいいのではと 思い再度改良しました。 Sub 同じにする3() Range("f7:j7").Copy For k = 1 To 6 Sheets("Sheet" & k).Range("f7:j7").PasteSpecial Paste:=xlValues Next End Sub ようするにセルF7~J7を全部コピーしてシート1~6のセルF7~J7に順に貼り付けるだけのことです。 これなら簡単にマクロの修正もできます。
お礼
いつもお世話になります。 なるほどですね。F7~J7には入力規則を設定していて、間違えることはないようにしているのですが、(2)の方でも私の行おうとしていることに対応できますし、簡単に作れますね。実際はシートにはそれぞれ名前が振分けられているのでFOR~NEXTは使えないですが、問題解決できそうです。 ありがとうございました。
- papayuka
- ベストアンサー率45% (1388/3066)
#2です。 ThisWorkbook のモジュールに下記で、希望の動きですか? Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim wsArray, r As Range wsArray = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6") For Each r In Target If Application.Intersect(Sh.Range("F7:J7"), r) Is Nothing Then Exit Sub Application.EnableEvents = False For i = 0 To UBound(wsArray) If Sh.Name <> wsArray(i) Then Worksheets(wsArray(i)).Range(r.Address).Value = r.Value End If Next i Application.EnableEvents = True Next r End Sub
これでやめます。#5.7.8です 次のマクロで、編集しているシートのセルF7~J7の値が他のシートに貼り付けされますから。 そして、最後もそのシートが選択されます。 マクロも一つでOK。 たぶん、これで大丈夫でしょう。 Sub 同じにする2() Range("f7:j7").Copy Sheets("Sheet1").Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet2").Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet3").Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet4").Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet5").Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet6").Range("f7:j7").PasteSpecial Paste:=xlValues End Sub Range("f7:j7")のところを Range("f7:j9")などにすれば 次の表の部分も値を同じにしておけます。 F G H I J 7 8 9
お礼
ご回答ありがとうございます。 言われてみれば、その通りですね。当方かなり難しい知識が必要なのではないかと思い、脳がフリーズしていました。 セルの値を変更した瞬間に値を変更したかったのですが、Worksheet_Activateのタイミングでも(ちょっと不満はありますが)良いので、何とかなりそうです。 ありがとうございました。
#5、7です しつこく改良しました #7でも最後にシート6が選択されるので マクロの最後に Sheets("SheetaA").Select としてA には1~6のいずれかにする マクロは6シート分作るとして シート1ではAを1としたマクロ シート2ではAを2としたマクロ . . . . だめかな? Wendy02さん見てませんか?
#5です 改良しました Sub Macro同じにする() Range("f7:j7").Copy Sheets("Sheet1").Select Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet2").Select Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet3").Select Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet4").Select Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet5").Select Range("f7:j7").PasteSpecial Paste:=xlValues Sheets("Sheet6").Select Range("f7:j7").PasteSpecial Paste:=xlValues End Sub こうすると、どのシートのセルF7からJ7を変更しても その変更したシートでこのマクロを実行すればいいです マクロは一つでいいです どうかな?
- imogasi
- ベストアンサー率27% (4737/17069)
ちょっと毛色の変わった今までに載らなかった問題ですね。 簡単にするため、 Range(”A5:A8”)のどれかのセルをSelectすると、Sheet1,Sheet2,Sheet3の全シートがSELECTされる(シートタブが白くなる)ー>したがってシートのセル(もちろんRange(”A5:A8”)のどれか)に値を入れると、3シートとも同じ値になるように考えてみました。 そしてその範囲以外をSELECTすると、シート 選択を1つにする。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set u = Union(Target, Range("a5:a8")) If u.Cells.Count = Range("a5:a8").Cells.Count Then Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Else ActiveSheet.Select End If End Sub これはSheet1のSelection_Changeイベントプロシージュアーです。 残念ながら、この例ではSheet1、Sheet2、Sheet3のそれぞれに、上記Sheet1のSelection_Changeイベントプロシージュアーと同じものをコピーしておかないと、思うようになりません。 イベントはシート単位でしか捕らえられないと思いますので現在のVBAでは原理的に1つでは済ますのは不可能かと思います。UNIONを使ったところは、他にもっと簡単な方法があるかもしれません。 ボロが出なけりゃよいが。
お礼
いつもお世話になります。 上記の通りにやってみましたところ、うまくいきました。 ありがとうございました。
力技で次のマクロはどうですか? Sub 同じf7() Selection.Copy Sheets("Sheet1").Select Range("F7").PasteSpecial Paste:=xlValues Sheets("Sheet2").Select Range("F7").PasteSpecial Paste:=xlValues Sheets("Sheet3").Select Range("F7").PasteSpecial Paste:=xlValues Sheets("Sheet4").Select Range("F7").PasteSpecial Paste:=xlValues Sheets("Sheet5").Select Range("F7").PasteSpecial Paste:=xlValues Sheets("Sheet6").Select Range("F7").PasteSpecial Paste:=xlValues End Sub たとえばF7を同じにするときは どのシートでもいいので、セルF7を選んでから 上のマクロを実行すればいいです もちろんVBAのボタンを作成して各シートに 配置しておくように 以下G7はうえのF7をG7にしたマクロを 以下H7はうえのF7をH7にしたマクロを 以下I7はうえのF7をI7にしたマクロを 以下J7はうえのF7をJ7にしたマクロを ただしこのマクロは最後にシート6を選んでしまうので誰か直してください。 また、マクロのはじめを Selection.Copy ではなくて Range("F7").select Selection.Copy とすれば、いちいちセルF7を選択しなくてもいいです こっちの方がいいかもね それと私は繰り返し処理を知らないので 誰か繰り返し処理のマクロにして下さい
- saitamayama
- ベストアンサー率57% (4/7)
どのシートから入力しても同じにするには、chmepleaseさんの回答の通りだと思います。 別の方法として、入力用のSheet7を用意しSheet1~Sheet6の同じにしたいセルに、=Sheet7!セル番号 を 入力しておき、Sheet7だけに入力すればすべての シートは同じ値になりますけど、質問の意図と 違うかもしれませんね。
補足
ご回答ありがとうございます。 おっしゃる通りなのですが、現在作成しているフォーマットは、1~6のそれぞれのシートで編集する必要があり、さらに、エクセルの知識に乏しい人でも問題なく使えるようにしたいのです。 私もおそらくVBAで作らなければならないと思うのですが、ご存知でしたら宜しくお願い致します。
- Bonjin
- ベストアンサー率43% (418/971)
>可能でしょうか? 可能と言えば可能です。 ただしVBAを使わければならないので、経験がなければ難しいでしょう。
補足
ご回答ありがとうございます。 当方、わずかですがVBAの知識があり(おこがましいですが)宜しければ書き方を教えていただけますでしょうか?
- papayuka
- ベストアンサー率45% (1388/3066)
Shift+クリックで複数シートを一気に選択出来ます。 その状態でCtrl+クリックで個別解除も出来ます。 感覚的には、Sheet2からSheet6の F7 を =Sheet1!F7 のようにして、編集は必ず Sheet1で行えば良いように思いますけど、、、
補足
ご回答ありがとうございます。 > 編集は必ず Sheet1で行えば良いように おっしゃる通りなのですが、現在作成しているフォーマットは、1~6のそれぞれのシートで編集する必要があり、出来れば上記のようなエクセルの知識のない不特定多数の人がそのフォーマットを使っても、問題ないように作りたいのです。 おそらくVBAでの製作になると思うのですが、ご存知でしたら宜しくお願い致します。
- 1
- 2
お礼
ご回答ありがとうございます。 私にとってはあまりにも難しいマクロで、意味不明なのですが、コピー&ペーストで動きました。 ・・・構文の意味も後々理解するように致します。 ありがとうございました。