別のセルのふりがな・左隣のセルのふりがなを取得するさまざまなVBA(Visual Basic for Applications)のコードをご紹介しました。
実務では、何らかのシステムから出力されたCSVファイルにふりがなのデータがないので、何とかしてふりがなを入れたいという、という要望が上がったりします。
そんなときに使えそうなマクロをご紹介しておきます。
左隣の列のフリガナを取得するサンプルマクロ
アクティブな列に、左隣の列に入力されているデータのふりがなを取得するマクロです。
Dim col As Long ''アクティブセルの列番号
Dim row_a As Long ''アクティブセルの行番号
Dim row_z As Long ''左の列の最終行番号
Dim i As Long
Dim msg As String
With ActiveCell
col = .Column
If col = 1 Then Exit Sub
row_a = .Row
row_z = .Offset(0, -1).End(xlDown).Row
End With
msg = "アクティブセルから下のセルに、左隣のセルに入力されているデータのフリガナを入力しますか?"
If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
For i = row_a To row_z
With Cells(i, col)
If .Value = "" Then
.Value _
= Application.GetPhonetic(Cells(i, col - 1).Value)
End If
End With
Next i
実行すると
「アクティブセルから下のセルに、左隣のセルに入力されているデータのフリガナを入力しますか?」
というメッセージが表示され、[はい]ボタンをクリックすると、アクティブなセルから下のセルに、左隣のセルに入力されているデータのふりがなが一気に入力されます。
サンプルマクロの解説
アクティブなセルの列番号を取得して、
With ActiveCell
col = .Column
もしA列(1列目)がアクティブだった場合には左の列がないのでマクロを終了します。
If col = 1 Then Exit Sub
変数・row_aにアクティブセルの行番号を格納し、
row_a = .Row
変数・row_zに、左隣の列の、データの入力されている最終行番号を格納します。
row_z = .Offset(0, -1).End(xlDown).Row
ActiveCellの左隣のセルを、Offsetプロパティの第1引数に「0」第2引数に「-1」を指定することで取得して
「ActiveCell.Offset(0, -1)」
その下方向の終端セルを、Endプロパティの引数に定数・xlDownを指定することで取得して
「ActiveCell.Offset(0, -1).End(xlDown)」
取得できたRangeオブジェクトのRowプロパティで行番号を取得しています。
「ActiveCell.Offset(0, -1).End(xlDown).Row」
このマクロを必要とするシーンを想像すると、途中に空白のセルが存在していることは少なそうなので、最終行を取得するのに「End(xlDown)」としました。
アクティブなセルの行から、左隣の列のデータの入力されている最終行までループを回して、
For i = row_a To row_z
データが入力されていなかった場合に、
With Cells(i, col)
If .Value = "" Then
左隣のセルのフリガナを取得しています。
.Value _
= Application.GetPhonetic(Cells(i, col - 1).Value)
もちろん、このマクロで取得できたフリガナは、あくまでも推測し得る範囲のものですから、本当のフリガナと違っている可能性もあるいうことは、十分ご承知おきください。
Home » Excel VBA Rangeオブジェクト » Offsetプロパティ » 左隣の列のフリガナを取得するエクセルマクロ