例えば、sheet2のA1セルがsheet1のA1セルを参照していたとします(単にsheet2のA1セルが「=sheet1!A1」となっているだけです)。このときに、sheet2のA1の書式設定を参照元であるsheet1のA1セルの書式に常に一致させたいのですが、何か良い方法はないでしょうか?
具体的にいうと、sheet1のA1セルの表示形式が円単位になったり、千円単位になったり、%表示になったりと変化するのですが、その度にsheet2のA1セルの書式も手作業で変えるのが面倒です。表示単位はその都度カスタマイズすることもあるのでマクロで登録することにも無理があります。
それか、VBAで参照もとの書式の情報を返して、それを参照先セルに反映させることができますでしょうか?
できれば、何もせずフルオートで対応できるとありがたいのですが。
No.7ベストアンサー
- 回答日時:
No4、No6です。
> いつもは標準モジュールに記述しているのですが、sheetに記述するとどう違うのでしょうか?
この回答が抜けてましたね。
Sheetのモジュールに記載したのは、そのSheetに対するイベント(シートが選択された、セルが選択された、入力された、ダブルクリックされた等)を判断するためです。
今回はPrivate Sub Worksheet_Activateですから、Sheet2がアクティブになったというイベントです。
そのイベントが起きて初めて記述したマクロが自動的に作動するのです。これをNo5さんがお書きになったように「イベント・ドリブン型のマクロ」といいます。
イベント・ドリブン型のマクロ・・・。覚えておきます。
自分で書けるようになるまでにはもう少し時間が必要ですが、いつか挑戦してみます。とりあえず今回はコピーペーストで対応します。
私の周りにもここまでVBAができる人がいればよいのですが・・・
大変助かりました。
No.8
- 回答日時:
こんにちは。
Wendy02です。罫線やパターンを除く書式コピー
>現在、参照もとの罫線やセルの背景色まで取り込まれてしまいました。
'シートモジュール
Private Sub Worksheet_Activate()
'シートをアクティブにすると書式が設定させる
Dim rng1 As Range
Dim rng2 As Range
Dim ar As Range
Application.ScreenUpdating = False
On Error Resume Next
With Worksheets("Sheet1").UsedRange
On Error Resume Next
Set rng1 = .SpecialCells(xlCellTypeFormulas, 3) '定数-文字,数字
Set rng2 = .SpecialCells(xlCellTypeConstants, 3) '数式-文字,数字
If rng1 Is Nothing And rng2 Is Nothing Then Exit Sub '設定させるものがない
If rng1 Is Nothing Then '定数がない場合
Set rng = rng2
ElseIf rng2 Is Nothing Then '数式がない
Set rng = rng1
Else '両方ともある
Set rng = Union(rng1, rng2)
End If
Set rng1 = Nothing: Set rng2 = Nothing
End With
On Error GoTo 0
For Each ar In rng
ActiveSheet.Range(ar.Address).NumberFormatLocal = ar.NumberFormatLocal
Next
Application.ScreenUpdating = True
Set rng = Nothing
End Sub
>「Private」とプロシージャの先頭に記述して標準モジュールとしてではなくsheetコードとして入力することでフルオート実行なっているのでしょうか?
すでに、merlionXXさんから、ご説明されていますが、標準モジュールは、個別のオブジェクト(シートやブック)を持たない、つまり、[反応を受けるための器]がないので、フルオートには出来ません。個別のオブジェクトを持つと、自動的なマクロ(イベント・ドリブン型)にすることが出来ます。しかし、あくまでも、他から設定されないようにするために、Private というキーワードが必要になります。このキーワードをつけることで、[反応を受けるための器]は、そのシートのみで設定されることになります。
厳密に言うと、もう少し複雑になります。
あれから、記述内容も検討してみたのですが、段々わかってきました。標準モジュールとシートへの記述の違いもだいたいわかりました。ありがとうございます。
(わざわざ、記述中に「'」をつかって注釈までつけて頂きありがとうございます)
No.6
- 回答日時:
No4です。
では、値と表示形式のみ持ってきますね。
Private Sub Worksheet_Activate()
With Sheets("Sheet2").Range("A1")
.Value = Sheets("Sheet1").Range("A1").Value
.NumberFormatLocal = Sheets("Sheet1").Range("A1").NumberFormatLocal
End With
End Sub
ではいかが?
ありがとうございます。即解決です。
この辺まで自由自在にVBAの記述ができるとすごいですね!私の場合、マクロ的な記述は卒業しましたが、ここまで自由自在にはかけません。さすがです!
No.5
- 回答日時:
こんにちは。
イベント・ドリブン型のマクロです。シート2に設定するなら、シート2のシートをアクティブにすると、シート1側の書式が1瞬でコピーされます。
シート2 のシートタブを右クリックして、「コードの表示」で、出てきた白い画面に以下を貼り付けて、Alt + Q でVisual Basic Editor 画面を締めます。後は、シート1を開き、もう一度、シート2を開けば、設定されます。
Private Sub Worksheet_Activate()
'シートをアクティブにすると書式が設定させる
Dim r As Range
Application.ScreenUpdating = False
Set r = ActiveCell
Worksheets("Sheet1").UsedRange.Copy
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats
r.Select: Set r = Nothing
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
これで出来ているかと思います。
この回答への補足
教えていただいた記述ですと、書式情報の全てを取り込んでしまいますが、もし表示形式に関するもののみ(円や%など)の取り込みが可能でしたらアドバイスいただけないでしょうか?
現在、参照もとの罫線やセルの背景色まで取り込まれてしまいました。
こちらもすごい!です。
一発解決です!
「Private」とプロシージャの先頭に記述して標準モジュールとしてではなくsheetコードとして入力することでフルオート実行なっているのでしょうか?
No.4
- 回答日時:
VBAです。
試してみてください。何もせずフルオートで対応できますよ。
sheet2のタブを右クリックし、コードの表示。
以下をコピペ。
Private Sub Worksheet_Activate()
With Application
.EnableEvents = False
Worksheets("Sheet1").Range("A1").Copy _
Destination:=Worksheets("Sheet2").Range("A1")
.EnableEvents = True
End With
End Sub
この回答への補足
教えていただいた記述ですと、書式情報の全てを取り込んでしまいますが、もし表示形式に関するもののみ(円や%など)の取り込みが可能でしたらアドバイスいただけないでしょうか?
現在、参照もとの罫線やセルの背景色まで取り込まれてしまいました。
すごいですね!一発解決です。
ありがとうございます。
VBAは使用しているのですが、まだまだ使いこなせていません。いつもは標準モジュールに記述しているのですが、sheetに記述するとどう違うのでしょうか?
標準モジュールに記述するとどのシートでも実行できるというのはわかったのですが、本当の使い分けが良くわかっていません。
今回のようにsheetに記述すると、常にフルオート実行ということなのでしょうか?
No.3
- 回答日時:
#2さんの回答にプラスアルファ。
Sheet2のA1セルの値を他で使いたい、ということであれば、
普通に「=sheet1!A1」としておいて、そのセルの上にさらに#2さんの方法で
図のリンク貼り付けをする、という方法があります。
下のセルが透けて見える場合は、図の書式設定で
「色と線」の「色」を自動にしてみてください。
(でも、結局Sheet2のA1セルの値ってことは、Sheet1のA1セルの値なので、
数式につかうなら、そちらを使えばいい話ですけど。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) VBAにてエクセルをpdf化する方法 1 2023/03/10 16:20
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
【お題】逆襲の桃太郎
【大喜利】桃太郎が1回鬼退治に失敗したところから始まる新作昔話「リベンジオブ桃太郎」にはこんなシーンがある
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
エクセル関数:文字だけでなく、書式も含めてリンクしたいのです。
その他(Microsoft Office)
-
Excel 関数を使ってデータと一緒にその書式もコピーしたいのですが・・・
Excel(エクセル)
-
-
4
Excelでセルの書式も引用する方法について質問
Excel(エクセル)
-
5
条件付き書式のコピーについて(参照先も自動で変更したい)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで数値→文字列変換で指数...
-
Excelの関数について、特定の文...
-
テキストボックス内の文字のふ...
-
日付が1年以内になると他のセル...
-
excelの16進数表示方法
-
数字がセルの左側に寄っていて...
-
【Excel】貼り付けた画像がいつ...
-
エクセルでふりがなごとリンク...
-
エクセル 入力中に表示されな...
-
Excelについて▶あるセルに文字...
-
条件付き書式で範囲外だったら...
-
エクセルで縦書きのかっこ
-
エクセルで書式設定だけを固定...
-
Excel で金額の,で中央揃えす...
-
Excel 記入欄に網掛けして、文...
-
列全体に同様の条件付き書式を...
-
エクセル「一度設定した列幅を...
-
エクセル カタカナの文字を検...
-
エクセルで同じ値が連続してい...
-
エクセルで入力数字に自動的に,...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで数値→文字列変換で指数...
-
テキストボックス内の文字のふ...
-
Excelの関数について、特定の文...
-
日付が1年以内になると他のセル...
-
エクセルで同じ値が連続してい...
-
エクセル 入力中に表示されな...
-
数字がセルの左側に寄っていて...
-
エクセル カタカナの文字を検...
-
【Excel】貼り付けた画像がいつ...
-
excelの16進数表示方法
-
エクセルで条件付き書式を使わ...
-
Excelについて▶あるセルに文字...
-
エクセルで平均時間の表示の仕方
-
条件付き書式で範囲外だったら...
-
エクセル「一度設定した列幅を...
-
excel 表計算 加算するセルが空...
-
エクセルで入力数字に自動的に,...
-
エクセル:セルのバックの色だ...
-
エクセルで縦書きのかっこ
-
エクセル 入力規則 貼付して...
おすすめ情報