問題
データであるテキストの列を含むExcelワークシートがあり、どのテキスト値をどのフォントとフォントサイズでフォーマットする必要があるかについていくつかのルールを念頭に置いています。
具体例
セル A1:「テキスト」
セル A2 .. (Col. A): テキストの文字列 (数語から数文まで) は、適切なフォントとフォント サイズで任意に書式設定されます
セル B1:「テキストの種類」
セル B2 ... (Col. B): 「heading」、「requirement」、「note」などの単一単語の文字列
留意すべきルール:
B列の文字列が「見出し」の場合、A列の文字列をフォントサイズ18にする
B列の文字列が「必須」の場合、A列の文字列をフォントCalibriにする
B列の文字列が「note」の場合、A列の文字列を「イタリック体」にします。
制約
スプレッドシートとしての Excel は、関数型プログラミング (数式) と並列処理 (再計算) がすべてです。はい、私は手続き型 VBA を書くことができますが、私にとってはスプレッドシートの精神に反します (手続き型プログラミングは非常に人気があり、Excel や前任者が長い間それを提供してきましたが)。
質問
特殊目的のVBA手続き型プログラミング以外の方法についてのアイデアはありますか?
解決していないように見えるもの
Excel の条件付き書式は、これらの特定のセル属性の設定を明示的に許可しないため、解決されません。
Excel UDF (ユーザー定義関数) は、他のセルに影響を与えないため解決しません。機能的には期待通り。また、フォーマットされていないテキストを複製する関数を作成したいが、値に基づいたスタイルまたはサイズを使用する場合でも、UDF は「環境」に影響を与えず、データのみを返すことができます。
ここで、VBA コードを Excel ワークシートのセルにテキストとして配置し、そのテキストを VBA として評価することさえできないことがわかりました。これは、セルに配置するフォント スタイルとサイズの VBA ステートメント用の単純な汎用 VBA 手続き型処理エンジンを作成するためです。私のワークシートで。
(この否定的な情報のいずれかが正しくなく、上記のいずれかが機能する場合は、修正してください。)
VBA専用の手続き型プログラミングの例 -- 機能するが回避しようとしているもの
Public Sub IterateThroughRangeSetFontStyleSize()
Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Set wb = Application.ActiveWorkbook
Set ws = wb.Worksheets("myWorkSheet")
Set rng = ws.Range("b2", "b4")
For Each cell In rng.Cells
If LCase(cell.Text) = "bold" Then cell.Offset(0, -1).Font.Bold = True
If LCase(cell.Text) = "italic" Then cell.Offset(0, -1).Font.Italic = True
If LCase(cell.Text) = "large" Then cell.Offset(0, -1).Font.Size = 18
Next cell
End Sub
私には難しすぎると思われるアイデアもありますが、そうではないことを誰かが言うかもしれません
VBA が VBA エディター (VBE) に書き込み、データのワークシート列を読み取り、ルールに基づいて目的のフォント スタイルとサイズを計算し、VBA 手続き型コードを自動生成してデータ列のフォント スタイルとサイズを更新できるように Excel を構成します。
Excel ファイルを XML としてエクスポートまたは保存し、ルールに従ってフォーマットする XSL スタイル シートを作成し、XML を開き (インポート?)、XSL スタイル シートを使用するように Excel に指示します。
必要なもの
既成概念にとらわれず、シンプルに考えましょう!