1-20.セルの操作:コメントを編集状態にするには?

SendKeysステートメント

SendKeys “+{F2}”

マクロでコメントを挿入した後、その場でコメントの内容をキーボードから入力できるようにしたいケースがあります。ところが、マクロには、「コメントを編集状態にする」という命令はありません。せっかくマクロでコメントを挿入しても、その内容を入力するには、いちいち「コメントの編集」メニューを選ばなければならないのでしょうか。

 そんなことはありません。Excelでは、Shiftキーを押しながらF2キーを押すと、コメントを挿入して編集状態にできます。マクロで実行するときも、考え方は同じです。セルを選択した上で、SendKeysという、キーを打つのと同じ効果を持つステートメントを実行すればよいのです。

 Shift+F2キーは「+{F2}」と指定します。なお、すでにコメントが挿入されているセルでこのマクロを実行すると、既存のコメントを編集状態にできます。


アクティブセルにコメントを挿入し、編集状態にする

Sub Sample1()

SendKeys “+{F2}”

End Sub

 

実行結果

 

2022年9月9日

1-19.セルの操作:セルにコメントを挿入するには?

AddCommentメソッド

セル.AddComment.Text 文字列

セルにコメントを挿入するには、セル(Rangeオブジェクト)のAddCommentメソッドを使います。ただし、すでにコメントが挿入されているセルにAddCommentメソッドを実行するとエラーになります。そこで、セルにコメントが挿入されているかどうかを事前に判定するとよいでしょう。

 コメントの有無を調べるにはTypeName関数を使います。セルのCommentオブジェクトが「Comment」という文字列を返すかどうかを調べればOKです。


コメントの有無を判定した上で、なければコメントを挿入する

Sub Sample()

If TypeName(ActiveCell.Comment) <> “Comment” Then

ActiveCell.AddComment.Text “コメントを入力しました”

End If

End Sub

 

実行結果

 

2022年9月9日

1-18.セルの操作:セルを検索するには?

Findメソッド

検索範囲.Find

セルを検索するにはFindメソッドを使います。引数Whatに検索語を指定します。

 注意したいのは、「見つからなかった」ときです。Findは、検索値が見つからなかったときにNothingという特別な値を返します。返り値がNothingかどうかを判定するときは、=」演算子ではなく「Is」演算子を使います。

 右のサンプルは、FoundCellというオブジェクト型の変数を用意し、検索結果を代入します。オブジェクト型の変数にオブジェクトを格納するときは、Setステートメントを使います。次に、FoundCellに代入した結果がNothingかどうかをIf文で判定し、見つかった場合だけ、セルのアドレスを表示します。


B列で「★」を検索して該当セルを表示する

Sub Sample()

Dim FoundCell As Range

Set FoundCell = Range(“B:B”).Find(What:=”★”)

If FoundCell Is Nothing Then

MsgBox “見つかりませんでした。”

Else

Msgbox FoundCell.Address & ”セルにありました。”

End If

End Sub

 

実行結果

 

2022年9月9日

1-17.セルの操作:空白セルだけを操作するには?

SpecialCellsメソッド

セル.SpecialCells(xlCellTypeBlanks)

任意のセル範囲で空白セルだけ操作したいとき、手動では、F5キーを押して「ジャンプ」ダイアログボックスを開き、「セル選択」ボタンを押します。すると「選択オプション」画面が表示されるので、「空白セル」を選択してOKを押します。これで選択範囲中の空白セルのみを選択できます。

 この選択オプションの機能に相当するのが、SpecialCellsメソッドです。引数にxlCellTypeBlanksを指定すると、空白セルを表せます。

SpecialCellsの引数となる主な定数

空白セル xlCellTypeBlanks
コメント xlCellTypeComments
定数 xlCellTypeConstants
数式 xlCellTypeFormulas
最後のセル xlCellTypeLastCell
条件付き書式 xlCellTypeSameFormatConditions

 


B2 ~ B10セルの範囲内にある空白セルに「★★★」と入力する

Sub Sample()

Range(“B2:B10”).SpecialCells(xlCellTypeBlanks) = “★★★”

End Sub

 

実行結果

2022年9月9日

1-16.セルの操作:別シートのセルを選択するには?

シート.Select → セル.Select

別シートのセルは、「Sheets(”Sheet2″).Range(”B3″)」のようにシート名をピリオドでつないで表すことができます。ところが、このセルを選択状態にしようとして「Sheets(”Sheet2″).Range(”B3″).Select」のように記述するとエラーになります。

 別シートのセルを選択する場合は、まずシートを選択してから、次にセルを選択する、という2段階が必要です。


別シートのセルを選択する

Sub Sample()

Sheets(“Sheet2”).Select

Range(“B3”).Select

End Sub

 

実行結果。まずシートを選択してから(左)、セルを選択する(右)

2022年9月9日

1-15.セルの操作:相対的な位置のセルを操作するには?

Offsetプロパティ

セル.Offset(行数, 列数)

あるセルから見て、相対的な位置にあるセルを操作するには、Offsetプロパティを使います。指定した行数だけ下方向に移動し、指定した列数だけ右方向に移動した位置にあるセルを表せます。

 例えば、1つ下にあるセルは「Offse(t 1, 0)」となります。行数や列数にはマイナスの値も指定でき、1つ上にあるセルは「Offset(-1,  0)」となります。


B2セルから見て、2行下、1列右にあるセルに「Jam&Momo」と入力

Sub Sample()

Range(“B2”).Offset(2, 1) = “Jam&Momo”

End Sub

 

実行結果

 

2022年9月9日

1-14.セルの操作:右隣や左隣のセルを操作するには?

Nextプロパティ/Previousプロパティ

セル.Next / セル.Previous

RangeオブジェクトのNextプロパティは、右隣のセルを返します。また、左隣のセルを返すのがPreviousプロパティです。上のセルや下のセルを返すプロパティはありませんので、上や下のセルを操作する場合には、下で紹介するOffsetプロパティなどを使います。


アクティブセルの右隣に2倍、左側に1/2の数値を入力する

Sub Sample()

ActiveCell.Next = ActiveCell.Value * 2

ActiveCell.Previous = ActiveCell.Value / 2

End Sub

 

実行結果

 

2022年9月9日

1-13.セルの操作:セルが空欄かどうか調べるには?

セル.Value = “”

セルが空欄かどうかを調べたいとき、「セルの値が“長さ0”であることを、どのように調べればよいのか?」などと難しく考える必要はありません。最も手っ取り早い方法は、Excelで空欄を表す「””」(ダブルクォーテーション2つ)を使って、セルの値が「””」かどうかを判定する方法です。

 ただし、この方法では、数式に「””」を指定して空欄にしているセルも「空欄」と見なされます。数式も入っていない完全な空欄を判定するには、IsEmpty関数を使う方法があります。


アクティブセルが空欄かどうかを判定する

Sub Sample()

If ActiveCell.Value = “” Then

MsgBox “空欄セルです。”

Else

MsgBox “空欄セルではありません。”

End If

End Sub

 

実行結果

2022年9月9日

1-12.セルの操作:セルが文字列かどうか調べるには?

TypeName関数

TypeName(調べる対象)

 

セルに入力されている値が文字列かどうかを調べるには、セルの値(Valueプロパティ)をTypeName関数で調べます。

 TypeName関数は、バリアント型の変数などを対象に、現在格納されているデータの形式を調べるものです。セルが数値の場合はDouble、日付の場合はDate、文字列の場合はString、エラーの場合はErrorなどを返します。

 そこで、TypeName関数の結果がStringかどうかを調べれば、セルの値が文字列かどうかを判定できます。If文を使って判定すればよいでしょう。


アクティブセルが文字列かどうかを判定する

Sub Sample()

If TypeName(ActiveCell.Value) = “String” Then

MsgBox “文字列です。”

Else

MsgBox “文字列ではありません。”

End If

End Sub

 

実行結果

 

2022年9月9日

1-11.セルの操作:セルが日付かどうか調べるには?

IsDate関数

IsDate(調べる対象)

セルに入っている値が日付かどうかを調べるには、IsDate関数を使います。セルにシリアル値が入っていて、日付の表示形式が設定されているとき、IsDate関数はTrueを返します。

 また、セルに「2014年1月15日」のような文字列が入力されていても、その文字列をExcelが日付と認識できる場合、IsDate関数はTrueを返します。


アクティブセルが日付かどうかを判定する

Sub Sample()

If IsDate(ActiveCell.Value) Then

MsgBox “日付です。”

Else

MsgBox “日付ではありません。”

End If

End Sub

 

実行結果

 

2022年9月9日