- ベストアンサー
文字だけでなく書式も判別できる関数について
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
大変失礼しました。 回答No8のコード及び添付画像を貼り間違えました。 正しくは以下のコード及び添付画像になります。 ■VBAコード Function 書式判定(a As Range, b As Range) As Variant Dim para(2, 8) As Variant Dim tar(2) As Object Set tar(0) = a Set tar(1) = b 書式判定 = True If tar(0).Value <> tar(1).Value Then 書式判定 = False Exit Function End If For i = 1 To Len(tar(0)) For j = 0 To 1 With tar(j).Characters(Start:=i, Length:=1).Font para(j, 0) = .Color '文字色 para(j, 1) = .Size '大きさ para(j, 2) = .Italic '斜体 para(j, 3) = .Bold '太字 para(j, 4) = .Strikethrough '取り消し線 para(j, 5) = .Subscript '下付き para(j, 6) = .Superscript '上付き para(j, 7) = .Underline '下線 End With Next j For j = 0 To UBound(para, 2) If para(0, j) <> para(1, j) Then 書式判定 = False Exit Function End If Next j Next i End Function
その他の回答 (8)
- eden3616
- ベストアンサー率65% (267/405)
追記です。 質問内容ではB列に指示事項を記載してC列に表示とありますが 規範のA列と比較する対象のセルが不明です。 以下のコードでは比較対象の文字列をB列に入力するものとしています。 「書式もふくめて~」とありましたので値が一致しない場合に「err」 ではなく、一致していなければFalseを返すようにしています。 また以下のコードでは書式の判定対象を増やしていますが 文字に対する書式であり、セルに対する書式の判定は行っていません。 (セルの背景色や網掛けパターン、罫線の有無、種類等) ■VBAコード Function 書式判定(a As Range, b As Range) As Variant Dim para(2, 8) As Variant Dim tar(2) As Object Set tar(0) = a Set tar(1) = b 書式判定 = True If tar(0).Value <> tar(1).Value Then 書式判定 = "err" Exit Function End If For i = 1 To Len(tar(0)) For j = 0 To 1 With tar(j).Characters(Start:=i, Length:=1).Font para(j, 0) = .Color '文字色 para(j, 1) = .Size '大きさ para(j, 2) = .Italic '斜体 para(j, 3) = .Bold '太字 para(j, 4) = .Strikethrough '取り消し線 para(j, 5) = .Subscript '下付き para(j, 6) = .Superscript '上付き para(j, 7) = .Underline '下線 End With Next j For j = 0 To UBound(para, 2) If para(0, j) <> para(1, j) Then 書式判定 = False Exit Function End If Next j Next i End Function
- eden3616
- ベストアンサー率65% (267/405)
回答No.5でmshr1962さんもおっしゃっていますが、 ユーザー定義関数をVBAで作成してみました。 http://officetanaka.net/excel/vba/beginner/10.htm 上記を参考に以下のVBAコードを標準モジュール内に貼り付けてください。 C2セルに「=書式判定(A2,B2)」を入れると 大きさまたは色が違えば「False」、値が違えば「err」、それ以外なら「True」が表示されます。 ■以下VBAコード Function 書式判定(a As Range, b As Range) As Variant Dim para(2, 2) As Variant Dim tar(2) As Object Set tar(0) = a Set tar(1) = b 書式判定 = True If tar(0).Value <> tar(1).Value Then 書式判定 = "err" Exit Function End If For i = 1 To Len(tar(0)) For j = 0 To 1 para(j, 0) = tar(j).Characters(Start:=i, Length:=1).Font.ColorIndex para(j, 1) = tar(j).Characters(Start:=i, Length:=1).Font.Size Next j For j = 0 To UBound(para, 2) If para(0, j) <> para(1, j) Then 書式判定 = False Exit For End If Next j Next i End Function
- bunjii
- ベストアンサー率43% (3589/8249)
>やはり文字の色など書式の判別は関数では難しいのですかね・・・ 他の回答者からCELL関数の提言がありましたが、文字の色や文字の大きさ、背景の色等は対象外です。 CELL("format",A1)については値の表示形式であってセルの書式全般ではありません。 CELL関数の検査の種類("format"等)には他にも検査の種類がありますが、あなたの目的には合わないと思います。 詳しくはCELL関数のヘルプで確認してください。 また、表示形式を変更しても自動再計算では反映されず、手動で再計算を行わないと判定結果が変わらない場合もあります。
お礼
ご回答ありがとうございました!関数では実現できないことが分かっただけでもかなり助かりました、ありがとうござました。m(_ _)m
- mshr1962
- ベストアンサー率39% (7417/18945)
>文字の色など書式の判別は関数では難しいのでしょうか VBAを利用したユーザー定義関数なら可能ですが。。。 ・文字色の色番号を取得する関数 http://veaba.keemoosoft.com/2013/02/550/
お礼
やはりVBAが必要なのですね。ご回答ありがとうございましたm(_ _)m
- mshr1962
- ベストアンサー率39% (7417/18945)
=AND(CELL("format",A1)=CELL("format",B1),EXACT(A1,B1)) CELL("format",A1)=CELL("format",B1)で書式のチェック EXACT(A1,B1)でアルファベットの大文字と小文字の比較も含めた一致・不一致 この二つをANDで比較すれば出来ます。
お礼
ご回答ありがとうございます。かなり解決に近づいたと思いましたが、こちらの式でも文字の色や大きさなどを判別して正しい結果を出すことが出来ませんでした・・・やはり文字の色など書式の判別は関数では難しいのでしょうか・・・
- bunjii
- ベストアンサー率43% (3589/8249)
回答No.1と基本的には同じですがC2へ入力する数式は次の通りで良いと思います。 =A2=B2 IF関数は不要です。 上記の数式だけでA2=B2のときTRUEが返り、A2<>B2のときFALEが返ります。
お礼
ご回答ありがとうございます。やはり文字の色など書式の判別は関数では難しいのですかね・・・いずれにせよありがとうございました。m(_ _)m
- Cupper-2
- ベストアンサー率29% (1342/4565)
セルの書式を比較するならCELL関数なんですけど、書式の何を比較するかで引数が変わってきます。
お礼
ありがとうございます、CELL関数なんてあるのですね!文字の色や大きさなどすべての書式を比較したいのですが、この条件を満たす引数の指定の仕方はございますでしょうか?
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 関数によって書式の判断はできないはずです。 C2セルに「TRUE」か「FALSE」を表示させたい!というコトですので、 数式はC2セルにいれます。 C2セルに =IF(A2=B2,TRUE) としてみてください。 ※ B2セルに入力がない場合何も表示させたくないのであれば =IF(B2="","",IF(A2=B2,TRUE)) といった感じにしてみてはどうでしょうか?m(_ _)m
お礼
ご回答ありがとうございます。やはり文字の色など書式の判別は関数では難しいのですかね・・・いずれにせよありがとうございました。m(_ _)m
お礼
ご丁寧にVBAコードまで書いてくださりありがとうございました!大変助かりました!