作成日:2021-03-02, 更新日:2021-03-02
基本的な流れ
- VBAを起動して、ユーザー関数を作成
- 任意のセルにユーザー関数をセット
- 保存
VBAを起動して、ユーザー関数を作成
- Excelのバージョンによっては出し方が異なる(ショートカットは同じかも?)
- Excelから「ツール:マクロ」→「Visual Basic Editor(V)」(※ショートカット:ALT+F11)
- Excelから「開発」→「Visual Basic」(※ショートカット:ALT+F11)
※メニューに開発が無いとき:「ファイル→オプション」で「リボンのユーザー設定」を開き、「開発」にチェック
- 左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」
・ワークシート:そのシートに対して操作をするとき
・標準モジュール:すべてのシートに対して操作をするとき
任意のセルにユーザー関数をセット
例えば、「ユーザー関数:CellColor」を作成したら任意のセルに「=CellColor()」のようにセット
ユーザー関数は戻り値が自動で変わらないので・・・再計算を行う(ショートカット:ALT+Ctlr+F9)
▼再計算不要
- ユーザー関数作成
- セルにセット
▼再計算必要
- ユーザー関数作成
- セルにセット
- ユーザー関数を修正
- 再計算(ショートカット:ALT+Ctlr+F9)
保存
保存時にフィルの種類を「Excel マクロ有効ブック(.xslm)」にする
サンプル:背景色を返す
▼透明背景色は「0」、他は背景色(ColorIndex)を返す
Function CellColor(ByVal rng As Range) With rng.Cells(1, 1).Interior If .ColorIndex = xlNone Then CellColor = 0 Else CellColor = .ColorIndex End If End With End Function
▼任意のセルで
=CellColor(A1)
サンプル:文字色を返す
文字色を返す
Function FontColor(ByVal rng As Range) As String FontColor = rng.Cells(1, 1).Font.ColorIndex End Function
▼任意のセルで
=FontColor(A1)
黒文字以外は文字色(ColorIndex)を返す
これが一番欲しかった処理・・・文字色から処理を変更したかった
※文字色の「黒」は「ColorIndex=1」だけど、「自動」は異なる・・・マイナス値
Function FontColor(ByVal rng As Range) With rng.Cells(1, 1).Font If .ColorIndex <= 1 Then FontColor = "" Else FontColor = .ColorIndex End If End With End Function
※ひとまず「1、0、マイナス値」とそれ以外で分岐させる(マイナス値が「自動」以外にあるのかどうかは不明・・・)
▼任意のセルで(黒文字以外のときに内容を出力)
=IF(FontColor(A1)="","",A1)