YouTubeに投稿した動画内で使用しているコードを貼っておきます。
ご参考までに。
エラー処理など、きちんと作りこんでいないので
コードをコピペして使用するのはオススメしません (m´・ω・`)m ゴメン…
また、実行時の条件によってXMLの形式が破損し、Excelデータを紛失する可能性がありますので、コードの内容を理解したうえでご使用ください。
※コードは自己責任でご使用ください。
【動作条件】
- Module内にコードが記述されていること
- キーワードを指定したテーブル名は "キーワードリスト" になっていること
- キーワードが被っていないこと
- 選択している範囲は文字を入力しているセルだけになっていること
- 選択しているセルのCharactersオブジェクトにColor, Bold以外の設定がされていないこと
- その他、なんプロが気付いていない動作条件を満たしていないこと(´・ω・`)
- Public Sub mainWithXml()
-
- Dim objTarget As Range
- Set objTarget = Selection
-
- '先にセル内の書式をリセットしておく'
- With objTarget.Font
- .Color = 0
- .Bold = False
- End With
-
- Dim objCell As Range
- Dim objRngGrp As Range
-
- '100セルずつ処理'
- For Each objCell In objTarget.Cells
-
- If objRngGrp Is Nothing Then '1つ目のセル'
- Set objRngGrp = objCell
-
- ElseIf objRngGrp.Cells.Count <= 99 Then '2~99個目のセル'
- Set objRngGrp = Application.Union(objRngGrp, objCell)
-
- Else '100個目のセル'
-
- Set objRngGrp = Application.Union(objRngGrp, objCell)
-
- Call setColorWithXml(objRngGrp, Application.Range("キーワードリスト"))
-
- Set objRngGrp = Nothing
-
- End If
-
- Next
-
- '100個に満たなかった最後のセル'
- If Not objRngGrp Is Nothing Then
-
- Call setColorWithXml(objRngGrp, Application.Range("キーワードリスト"))
-
- End If
-
- End Sub
-
-
- 'XMLレベルでセル内の文字色(&Bold)を設定するプロシージャ'
- '検索文字列が重複している場合は正常動作しません'
- Private Sub setColorWithXml(ByVal objRngGrp As Range, ByVal objRngFindString As Range)
-
- Const FONT_ST = "<Font html:Color=""#[COLOR]"">"
- Const FONT_ED = "</Font>"
- Const B_ST = "<B>"
- Const B_ED = "</B>"
-
- Dim objRng As Range
- Dim strXml As String
-
- 'XMLデータ取得'
- strXml = objRngGrp.Value(XlRangeValueDataType.xlRangeValueXMLSpreadsheet)
-
- '先にData要素を置換(リテラル決め打ち)'
- strXml = Replace(strXml, "<Data ss:Type=""String"">", _
- "<ss:Data ss:Type=""String"" xmlns=""http://www.w3.org/TR/REC-html40"">")
- strXml = Replace(strXml, "</Data>", "</ss:Data>")
-
- '検索文字分ループ'
- For Each objRng In objRngFindString.Cells
-
- Dim strRep As String
- Dim lngColor As Long
-
- 'HTMLカラーに変換'
- With objRng.Font
- lngColor = (.Color And &HFF) * (2 ^ 16)
- lngColor = lngColor + (.Color And &HFF00&)
- lngColor = lngColor + ((.Color And &HFF0000) / (2 ^ 16))
- End With
-
- 'タグ生成'
- strRep = Replace(FONT_ST, "[COLOR]", Right(String(6, "0") & Hex(lngColor), 6))
- If objRng.Font.Bold Then strRep = strRep & B_ST
- strRep = strRep & objRng.Value
- If objRng.Font.Bold Then strRep = strRep & B_ED
- strRep = strRep & FONT_ED
-
- '置換処理'
- strXml = Replace(strXml, objRng.Value, strRep)
-
- Next
-
- 'XMLデータを書き戻す'
- objRngGrp.Value(XlRangeValueDataType.xlRangeValueXMLSpreadsheet) = strXml
-
- End Sub
0 件のコメント:
コメントを投稿