エクセルで日記のようなものをつけていたのですがその内容をブログにアップしようと思っています。
そこで赤字や太字をフォントで囲んでくれるマクロを使用したいのですがどのように手をつけていいかわかりません。
例えば
今日はいい天気ですね。
の天気のみが赤字だとすると
今日はいい<font color="red">天気</font>ですね。
と変換出来たらと思っています。
また、太字も同様で
明日は雨らしいですよ。
の雨のみが太字の場合は
明日は<b>雨</b>らしいですよ。
というようにできたら幸いです。
また、その際にひとつのセルに複数の赤文字がある場合、例えば
今日はいい天気ですが明日は雨らしいですよ。
の天気と雨が赤文字の場合は
今日はいい<font color="red">天気</font>ですが明日は<font color="red">雨</font>らしいですよ。
というようにしたいのですがそれも可能でしょうか?太字も同様です。
わかりにくい説明になったかもしれませんが是非お力添えしていただけたら大変助かります。
どうかよろしくお願いします。
VBAを作成してみました。
ただ、起動方式や変換内容の設定方法とかわからないので、勝手に考えています。
対象域は現在表示(アクティブ)のワークシート全域とし、
変換対象文字列と変換先文字列の設定は、ソース内の頭の方で設定しています。
仮に例のある「雨」と「天気」について定義しています。
これを適宜設定変更すれば良いです。
(おまけで逆変換も可能としてみました。つまり元に戻せる)
※以下をVBエディターの標準モジュールに貼り付けして試してみてください。
Option Explicit
Sub my文字列をタグ形式へ変換()
' 文字列変換
' 変換方向指定可能
' 変換文字列は配列に準備
'
'1.変換対象とするセル範囲を指定する
Dim trgRange As Range
Set trgRange = ActiveSheet.Cells ' 表示中のワークシートの全域とする
'2.変換文字列を準備する
Dim tbTrgStr(10)
Dim tbChgStr(10)
Dim wkTbStrSu
Dim wkI
wkI = 0
'=== 変換テーブル内容の設定 ==============
wkI = wkI + 1: tbTrgStr(wkI) = "天気": tbChgStr(wkI) = "<font color=""red"">天気</font>"
wkI = wkI + 1: tbTrgStr(wkI) = "雨": tbChgStr(wkI) = "<b>雨</b>"
' ~(このような形で、必要なだけ定義する)
' ※但し、配列数10をオーバーするようなら、機能見直し要!
' 配列数を拡張(ReDimを活用すれば尚よし)
'=========================================
wkTbStrSu = wkI ' 配列の有効数をセット
'3.実行可否を確認問い合わせする
Dim wkRes
wkRes = MsgBox("特定文字のタグ修飾変換処理を行います。" & vbCrLf _
& "対象範囲 " & trgRange.Address & vbCrLf _
& "変換文字列セット数:" & wkTbStrSu & vbCrLf _
& "よろしいですか?" & vbCrLf, vbOKCancel)
If wkRes <> vbOK Then
MsgBox "処理中止!"
End
End If
'4.変換方向を確認問い合わせする
Dim wkChgDir
wkRes = MsgBox("変換の方向の確認。" & vbCrLf _
& "通常方向(タグ形式への変換)で良いですか? " & vbCrLf _
& "(逆変換なら「いいえ」で応答)" & vbCrLf _
, vbYesNoCancel)
If wkRes = vbYes Then
wkChgDir = "順方向"
ElseIf wkRes = vbNo Then
wkChgDir = "逆方向"
Else
MsgBox "処理中止!"
End
End If
'5.変換処理を行う
For wkI = 1 To wkTbStrSu
If wkChgDir = "順方向" Then
trgRange.Replace What:=tbTrgStr(wkI), Replacement:=tbChgStr(wkI)
Else
trgRange.Replace What:=tbChgStr(wkI), Replacement:=tbTrgStr(wkI)
End If
Next wkI
'6.終了
MsgBox "終了しました!"
End Sub