今回は、 Excel の 文字列 をハイライトしてスキャニングしやすくする VBA ツールを作成してみたのでシェアしますね。
こんにちは、ゆう(@ProgYuki)です。
仕事柄、英文を読むことが多いのですが、Excelのセルの中に英文がバーっと書かれてる資料を読むことがあります。
出来るだけ早く読みたいので、
- スキミング(Skimming): 拾い読みして全体の大意を理解する
- スキャニング(Scanning): 大量の文章から特定の情報を探す
するのですが、特にスキャニングするときに特定の文字列をハイライトする機能があると便利ですよね。
探したい情報に早く辿り着きやすくなります。
ただ、Excelの検索機能だと検索したい文字列が含まれるセルがどこにあるかは教えてくれるのですが、セル内の文章から特定の文字列を全て検索してハイライト等はしてくれません。
なので、
検索したい文字列を指定すると、セル内の文章から文字列を検索し、ハイライトしてくれる
ツールを作ってみました。
これで、特定の情報を探したいときに効率的に探せるので、便利ですね。
同じようなニーズがある方やVBAを学びたい方は、記事内にプログラムコード全文も含めてるので、利用してもらえればと思います。
なお、ツールの利用は自己責任でお願いします。
特にVBAは、一旦処理が走るとエラーがあってもctl + z 等で戻ることができませんので、必ず初めて使うときはバックアップ等を取ってから利用してくださいね。
Excel VBA ツール : セル内の特定の 文字列 をハイライトする(英文スキャニング用)
マクロ ツール の機能、使用用途、使い方
機能
このツールの機能は、
検索したい文字列を指定すると、セル内の文章から文字列を検索し、ハイライトしてくれる
というものです。
使用用途
使用用途は、想定としては
Excelセル内に書かれた英文をスキャニングして効率的に情報を探したい
等です。
使い方
コードをコピーする場所やプログラムの起動方法は後ほど説明しますが、使い方としては、
- 文章が含まれるセルを選択する(複数セル選択可)
- VBAプログラムを起動して
- 検索したい文字列を入力
- 検索文字列が含まれてる場合は、赤太字でハイライトされる
という感じです。
画像つきで示すと、
①文章が含まれるセルを選択する(複数セル選択可)
上記のような文字列が含まれたセルを選択します。
複数セルを一気に選択しても一つづつループで回しながら検索するので大丈夫です。
②VBAプログラムを起動して
起動の仕方はいろいろとあります。
ご自身でも調べてみると良いと思いますが、一番わかりやすい方法としては、メニューバーの
「開発」→「マクロ」
と進むと実行できるマクロの一覧が表示されるので、そこで今回は「highLighter」という名前にしているので、それを選択して「実行」を押せば実行されます。
③検索したい文字列を入力
今回のツールは起動するとポップアップが出てきて、検索したい文字列を指定できるようにしてます。
検索したい文字列を入力してください。
例では、文章の中から「requirement」という文字列を検索しようとしてます。
ちなみに検索文字列は、複数文字列を同時に検索することが可能で、例えば、複数の単語を検索したい場合は、半角スペースで区切って入力してください。
④検索文字列が含まれてる場合は、赤太字でハイライトされる
「OK」をクリックすれば入力した検索文字列が赤太字でハイライトされます。
どうでしょうか?うまく実行できましたかね。
不具合などがあればコメント等でご連絡くださいね。
ちなみに何も実行されない場合は、入力した検索文字列がセル内の文章になかったということになります。
VBA コードの表示
コードの全文は下記の通りです。
Sub accelerate()
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
Sub clearAccelerate()
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Sub highLighter()
Call accelerate
Dim cell As Range
Dim i As Integer
Dim hltexts() As String
Dim texts As String
Dim mytext As String
Dim poji As Integer
texts = InputBox(“検索した文字列を入力してください。” & vbCrLf & _
“複数文字列を検索したい場合は、半角スペースで区切ってください。”)
hltexts() = Split(texts)
If UBound(hltexts) < 0 Then
Exit Sub
Else
For Each cell In Selection
For i = 0 To UBound(hltexts)
mytext = hltexts(i)
poji = InStr(poji + 1, cell.Value, mytext, vbTextCompare)
Do While poji > 0
If poji > 0 Then
With cell.Characters(poji, Len(mytext))
.Font.ColorIndex = 3
.Font.Bold = True
End With
End If
poji = InStr(poji + 1, cell.Value, mytext, vbTextCompare)
Loop
Next i
Next cell
End If
Call clearAccelerate
End Sub
- どこにコードをコピーすれば良いのか
- VBAマクロをしようする上での注意点
については下記の記事で詳しく書いているので、そちらを参考にされてください。
この記事もツール紹介の記事ですが、「VBA プログラムの表示」の項目の後に詳しいコピーの仕方や注意点について書いてます。
ということで本日は以上になります。
私もVBA含めプログラミングを学習中の身なので、
「もっとこうした方が効率的に書けるよ!」
「こんな業務効率化したいんだけど、VBAでできるかな?」
など、ご指摘やアイディアなどをいただけると嬉しいので、コメントやいただけると幸いです!
また、Excel VBAを独学したい方向けに記事を書きましたので、興味がある方はご参考にされてみてください↓
それでは、本日もお読みいただきありがとうございました。
Twitter(@ProgYuki)でも情報発信しているので、ぜひフォロー、いいね、RT等お願いします!
ゆう