- ベストアンサー
Excelでセル参照したとき、書式も一緒に持ってくるには?
例えば、A1セルに文字データと、それに付随した字体、文字サイズ、文字やセルの色、その他条件付き書式で設定した書式等があるとします。いま、別のセルで、=A1とすると、そのセルに文字データを取り込むことはできるが、付随した書式は取り込めません、よね?書式も一緒に取り込む数式の書き方ってあるでしょうか。教えてください。くれぐれも、コピーしろなどというお答えはなさらないで下さい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
演算子や関数は、あくまでもセル内の文字や数値の処理をするものであり、属性(文字や枠の書式)に関する処理は行いません。 強いて言えば、カメラコピーというのがあります。 (メニューバーで右クリックし、ユーザ設定/コマンド/ツールの中にカメラがありますので、これをツールバーに追加します) これは、オブジェクトの一種ですが、これはもとの書式が変わるとコピー先も同じように変わります。 ただ、計算や関数の引数などには使えませんが。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
>書式も一緒に取り込む数式の書き方ってあるでしょうか 「数式」とは関数式や演算子を使った式またはそれらが組み合わさったものをイメージしていると思います。 #1に書いておられるように、エクセルでは、関数式等は、「値!」(書式は含まず)だけを返す(ように制限されている、VBAと役割分担をしている)のが、基本原理です。このことを認識しないための、関数式等への過大期待が、OKWEBの質問にも相当出ます。やり方を考える前に不可能と結論付けることが出きる問題です。 また関数式でセルの書式状態や演算に使われているセル番地を返す関数もありません。(CELL関数と言うのがありますが、不完全。) さて、VBAを使ってでは、どうかと言うことについて、私のテストしたことを述べます。 例えば Sub test02() Worksheets("sheet1").Activate Dim cl As Range For Each cl In Selection If cl.HasFormula = True Then p = Split(cl.Precedents.Address, ",") For i = 0 To UBound(p) MsgBox p(i) cl.Font.ColorIndex = Range(p(0)).Font.ColorIndex Next i End If Next End Sub を作ってみましたが、ここにおいて、 (1)If cl.HasFormula = True Thenで数式が入っているセルがわかる。(このセルに数式があるかどうか) (2)数式が入っている時、cl.Precedents.Addressで式に使われている番地が判る。 (3)しかしセル番地についても (A)=sum("a1:a4")のように何々からと言う式のタイプがあり、理論的には千でも2千ものセルも指定できる。 (B)式の入ったセルを参照して、また別セルに式を入れることも多い(多段的参照)。 この場合「どこまで」「どちらを」(の書式)を取るかについて、収拾がつかなくなる。 したがって質問者の尋ねていることは、極く単純な=A1のような、単一セルを参照している場合でないと、ややこしくなってやっちゃおれなくなると思う。このことに気付いて欲しい。 単純な=と1セルを参照するケースなら、上記コードを多少修正すると字体の色だけは伝播します。 書式にもいろいろある(フォントサイズ、イタリック、罫線など)ので、どこまで伝播させるかも、VBAコードに1行ずつ組みこまないといけない。 「コピーしろなどというお答えはなさらないで下さい。」 と言われるが、少々のセルなら、これがトータルで速く出来そうで、結論は「無理なことは言わないで下さい」ということになろうか。
お礼
早々のお答えありがとうございました。結論としてはやはりありませんか。=COPY(A1)のような関数があって、コピー→貼付け的なことをしてくれるものがあれば、と思っての「教えて」だったのですが・・添付のVBA参考にさせて頂きます。ありがとうございました。
お礼
早々のお答えありがとうございました。「カメラ」という機能、初めて知りました。使ってみました。面白いですね。今回の質問の趣旨とは少し違いますが、私にとっては大いなる収穫です。ありがとうございました。