■ セルの操作をマスターしよう!
数回にわたってワークシート上のセルを操作するExcel VBAについて解説を行います。
今回はセルを操作する様々な方法について解説していきます。
セルを操作する
Excelのワークシートには、様々なデータを格納することができます。Excel VBAから、セルのデータを取得したり、コピーしたり、表示形式を変更することで、さらに便利で効率的なシステムを開発することが可能になります。
■セルの値を取得・設定する
・Valueプロパティ、Formulaプロパティ
Valueプロパティは、セルに値を取得・設定します。Formulaプロパティは、セルに数式を取得・設定します。
[書式]
オブジェクト.Value
オブジェクト.Value = 値
オブジェクト.Formula
オブジェクト.Formula = 数式
オブジェクトにはRangeオブジェクトを指定します。セルに数式が入力されている場合、Valueプロパティは数式の結果の値を、Formulaプロパティは数式そのものを取得します。
例:
Sub Test()
Range("A1").Value = 100
Range("A2").Value = Range("A1").Value + 100
Range("A3").Formula = "=If(Sum(A1:A2)>=300,""A"",""B"")"
Range("A4").Formula = Range("A3").Formula
End Sub
このプロシージャを実行すると、Valueプロパティによってアクティブシートの「A1」セルに「100」の数値を設定します。次に「A2」セルに「A1」セルの値に「100」を加算した値の「200」を設定します。さらに、Formulaプロパティによって「A3」セルに「=If(Sum(A1:A2)>=300,"A","B")」の数式を設定します。最後に「A4」セルに「A3」セルに入力された数式をそのまま設定するため、「A1〜A4」セルには「100」「200」「A」「A」の値が表示されます。 |
※ セルに表示されている値を、表示形式のとおりに取得したい場合は、Textプロパティを使用します。例えば、
Debug.Print Range("A1").Value
Debug.Print Range("A1").Text
で、「A1」セルに表示されている値が「1,000」の場合、Valueプロパティは「1000」を、Textプロパティは「1,000」を、それぞれ取得します。
※ Formulaプロパティを使用してセルに数式を設定する場合、数式全体を「"」で囲みます。このとき、数式の中で「"」を使用している場合、「""」と2つのダブルクォーテーションを使用して記述します。なおR1C1形式の数式を設定する場合は、FormulaR1C1プロパティを使用してください。
■セルの値をオートフィルする
・AutoFillメソッド
オートフィルと同じ動作を行います。セルの連続データを入力することができます。
[書式]
オブジェクト.AutoFill セル範囲, 種類
オブジェクトには、オートフィルの基準となるセルを指定します。
セル範囲には、オートフィルを行うセル範囲を指定します。このとき、必ず基準となるセルを含めたセル範囲を指定します。
種類には次の、XlAutoFillTypeクラスの定数を指定します。
定数 |
内容 |
定数 |
内容 |
xlFillDefault (既定) |
標準のオートフィル |
xlFillYears |
年単位 |
xlFillCopy |
コピー |
xlFillMonths |
月単位 |
xlFillSeries |
連続データ |
xlFillWeekdays |
週単位 |
xlFillFormats |
書式のみコピー |
xlFillDays |
日単位 |
xlFillValues |
書式なしコピー |
|
|
省略すると、xlFillDefaultが適用されます。
例:
Range("A1").AutoFill Range("A1:A5"), xlFillCopy
Range("A1:C1").AutoFill Range("A1:C5"), xlFillSeries
上の例では、「A1」セルを「A1〜A5」のセル範囲にコピーしています。下の例では、「A1〜C1」のセル範囲を「A1〜C5」のセル範囲に、連続データとしてオートフィルします。 |
■セルの値をクリアする
・Clearメソッド、ClearContentsメソッド、ClearFormatメソッド、ClearComentsメソッド
Clearメソッドは、セルに格納されているデータと書式をクリアします。ClearContentsメソッドは、データのみクリアします。ClearFormatメソッドは、書式のみクリアします。ClearComentsメソッドは、コメントをクリアします。
[書式]
オブジェクト.Clear
オブジェクト.ClearContents
オブジェクト.ClearFormat
オブジェクト.ClearComents
オブジェクトには、クリアするセル範囲をしてします。
例:
Sub Test()
Range("A1").Clear
Range("A2").ClearContents
Range("A3").ClearFormats
Range("A4").ClearComments
End Sub
このプロシージャを実行すると、アクティブシートの「A1」セルの値と書式を、「A2」セルの値を、「A3」セルの書式を、「A4」セルのコメントを、それぞれクリアします。 |
※ セルにコメントを挿入するにはAddCommentメソッドを使用します。例えば「Range("A1").AddComment "SampleCommnet"」では、「A1」セルに「SampleCommnet」という文字列をコメントとして挿入します。
■セルの値をコピーする
・Copyメソッド、Pasteメソッド、PasteSpecialメソッド
Copyメソッドは、セルをクリップボードまたは貼り付け先のセルにコピーします。Pasteメソッドは、クリップボードのデータを指定したセル範囲に貼り付けます。PasteSpecialメソッドは、内容を指定して貼り付けることが可能です。
[書式]
オブジェクト.Copy セル範囲
オブジェクトにはRangeオブジェクトを指定します。
セル範囲には、貼り付け先のセル範囲を指定します。省略するとクリップボードに保存されます。
※ セルをコピーではなく移動したい場合は、Cutメソッドを使用します。Cutメソッドの書式は、Copyメソッドと同じです。
[書式]
オブジェクト.Paste セル範囲, リンク
オブジェクトには、Worksheetオブジェクトを指定します。
セル範囲には、貼り付け先のセル範囲を指定します。省略すると、現在選択しているセル範囲に貼り付けられます。
リンクには、TrueまたはFalseを指定します。元のデータとリンクする場合はTrueを、しない場合はFalseを指定します。省略するとFalseが指定されます。この引数を指定すると、引数「セル範囲」は指定できません。
[書式]
オブジェクト.PasteSpecial 内容, 演算, 空白セル, 行列入替
オブジェクトには、貼り付け先のセル範囲を指定します。
内容には、次のXlPasteTypeクラスの定数を指定します。
定数 |
内容 |
xlPasteAll (既定) |
すべて |
xlPasteAllExceptBorders |
罫線を除くすべて |
xlPasteValues |
値 |
xlPasteFormulas |
数式 |
xlPasteFormats |
書式 |
xlPasteComments |
コメント |
xlPasteValidation |
入力規則 |
xlPasteColumnWidths |
列幅 |
xlPasteValuesAndNumberFormats |
値と数値の書式 |
xlPasteFormulasAndNumberFormats |
数式と数値の書式 |
※ 引数「内容」に使用できる定数はExcelのバージョンによって異なります。詳しくは、そのバージョンのヘルプを参照してください。
演算には、次のXlPasteSpecialOperationクラスの定数を指定します。
定数 |
内容 |
xlPasteSpecialOperationNone (既定) |
演算をしない |
xlPasteSpecialOperationAdd |
加算 |
xlPasteSpecialOperationSubtract |
減算 |
xlPasteSpecialOperationMultiply |
乗算 |
xlPasteSpecialOperationDivide |
除算 |
空白セルには、TrueまたはFalseを指定します。Trueを指定すると空白のセルを貼り付けの対象から除外します。省略するとFalseが適用されます。
行列入替には、TrueまたはFalseを指定します。Trueを指定すると行と列を入れ替えて貼り付けます。省略するとFalseが適用されます。
例:
Sub Test()
Range("A1").Copy Range("A2")
Range("A2").Copy
ActiveSheet.Paste Range("A3")
Range("A4").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
このプロシージャを実行すると、アクティブシートの「A1」セルを「A2」セルにコピーします。次に「A2」セルをクリップボードに保存し「A3」に貼り付けます。さらに「A4」セルに「A2」セルの値のみをコピーします。最後に「Application.CutCopyMode = False」でコピーモードを解除します。 |
※ コピーモードとは、コピーや切り取りを実行したときコピー元のセル範囲の周りが点滅した状態になることを指します。コピーモードの状態が解除されない間は、そのセル範囲を続けて貼り付けることが可能です。「Application.CutCopyMode = False」を実行すると、コピーモードは解除されます。
■セルを挿入・削除する
・Insertメソッド、Deleteメソッド
Insertメソッドは、指定した場所にセルを挿入します。Deleteメソッドは、指定した範囲のセルを削除します。
[書式]
オブジェクト.Insert 移動
オブジェクト.Delete 移動
オブジェクトには、セルを挿入・削除したいセル範囲を指定します。
移動には、挿入・削除後にセルを移動する方向をXlInsertShiftDirectionクラスの定数を指定します。
挿入する場合 |
削除する場合 |
定数 |
内容 |
定数 |
内容 |
xlShiftToRight |
右に移動 |
xlShiftToLeft |
左に移動 |
xlShiftDown |
下に移動 |
xlShiftUp |
上に移動 |
例:
Sub Test()
Range("A1").Insert xlShiftDown
Range("B1").Delete xlShiftToLeft
End Sub
プロシージャを実行すると、「A1」セルの場所に空白のセルが挿入され「A1」セルより下にあるセルが1行下方向に移動します。次に「B1」セルが削除され「B1」セルより右にあるセルが1列左方向に移動します。 |
■セルを結合する
・Mergeメソッド
指定した範囲のセルを結合します。
[書式]
オブジェクト.Merge 結合
オブジェクトには、結合したいセル範囲を指定します。
結合には、TrueまたはFalseを指定します。Trueを指定すると結合を解除、Falseを指定すると結合します。省略するとFalseが適用されます。
例:
Range("A1:A2").Merge
Range("A1:A2").Merge True
上の例では、「A1〜A2」のセル範囲を結合します。下の例では、「A1〜A2」のセル範囲の結合を解除します。 |
(注意)セルを結合すると、指定した範囲の左上端セルの値が、結合後のセルに表示されます。他のセルに入力されている値は削除されます。このとき確認のダイアログが表示されますが、「Application.DisplayAlerts = False」を記述することで、確認のメッセージを表示させないようにすることができます。
※ この他にセルの結合には、MergeCellsプロパティを使用することもできます。設定値はTrueまたはFalseで、Trueを指定すると、セル範囲を結合します。また戻り値で、指定したセルが結合セルに含まれているかどうかを確認できます。戻り値がTrueのとき、指定したセルは結合セルに含まれています。
■セルにふりがなを設定する
・GetPhoneticメソッド、SetPhoneticメソッド
GetPhoneticメソッドはセルの文字列からふりがなを取り出します、SetPhoneticメソッドはセルの文字列にふりがなを設定します。
例:
Range("B1") = Application.GetPhonetic(Range("A1"))
この例では、アクティブシートの「A1」セルに入力されている文字列からふりがなを取り出し「B1」セルに入力します。 |
例:
Range("A1").SetPhonetic
Range("A1").Phonetics.Visible = True
この例では、アクティブシートの「A1」セルに入力されている文字列にふりがなを設定し表示します。 |
※ SetPhoneticメソッドは、他のアプリケーションから取り込んだデータにふりがなを設定したいときに使用します。Excelで入力されたデータには自動的にふりがなが設定されるため、PhoneticsコレクションのVisibleプロパティをTrueに設定するだけでふりがなを表示することができます。
■セルにハイパーリンクを設定する
・Hyperlinks.Addメソッド、Followメソッド、Deleteメソッド
Hyperlinks.Addメソッドはセルにハイパーリンクを設定します、Followメソッドはハイパーリンクを実行します、Deleteメソッドはハイパーリンクを削除します。
例:
Sub Test()
ActiveSheet.Hyperlinks.Add _
Range("A1"), _
"http://www4.plala.or.jp/gen2/excel/", , , _
"リンク"
ActiveSheet.Range("A1").Hyperlinks(1).Follow
ActiveSheet.Range("A1").Hyperlinks(1).Delete
End Sub
このプロシージャを実行すると、アクティブシートの「A1」セルに「リンク」という文字列でエクセル大事典へのハイパーリンクを設定します。次に、ハイパーリンクを実行しブラウザでエクセル大事典のページを表示します。最後に、「A1」セルに設定したハイパーリンクを削除します。ただし「リンク」の文字列は削除しません。 |
例:
Sub Test()
ActiveSheet.Hyperlinks.Add _
Range("A1"), _
"mailto:sample@xxx.com?subject=送信テスト", , , _
"メール"
ActiveSheet.Range("A1").Hyperlinks(1).Follow
End Sub
このプロシージャを実行すると、アクティブシートの「A1」セルに「メール」という文字列で「sample@xxx.com」のメールアドレスをハイパーリンクとして設定します。次に、ハイパーリンクを実行しメーラーソフトで新規メールが作成されます。このとき、メールの件名には「送信テスト」が設定されます。 |
以上、セルを操作するいろいろな方法について解説しました。
VBAからセル範囲を自由に操作することで、業務用アプリケーションに近い操作を、ワークシート上で実現することが可能です。あなたのシステム開発に、今回の解説を役立ててください。
次は、セルの書式を設定する様々な方法について詳しく解説を行います。
|