1-3 セル操作の各種テクニック
セル操作については特に高度なテクニックはありませんが、各種操作方法を知っていれば、もっとも効率のよ
いセル操作を行うマクロを組むことができます。また、複雑なマクロになればセルの場所指定に変数の使える
Cellsプロパティが有効ですが、Cellsプロパティを使いやすくする便利資料もここで紹介します。



(1)セル位置指定の各種方法
セルを特定する方法は色々ありますが、各種セル指定方法を知っていると
更に効率のよいマクロを作成できます。
ここでは各種セル指定のオブジェクト例を紹介します。

[1]セル位置をA1へ形式で指定
RangeプロパティとA1形式でセル位置を指定の、もっとも一般的なセルの指定方法です。
Sub 書込み1()
    Range("B2").Value = "B2へ記入"
    Range("C2").Value = "C2へ記入"
    Range("B3").Value = "B3へ記入"
    Range("C3").Value = "C3へ記入"
End Sub

【参考131】Valueプロパティの省略記述
「Range("B2").Value = "B2へ記入"」を「Range("B2") = "B2へ記入"」のようにValueプロパティを省略して
記述する方法もあります。
Valueプロパティを記述が正式ですが、使用頻度の高いプロパティは省略可能な「既定プロパティ」になることが
あります。Valueは既定プロパティで省略できます。

また、Rangeを省略した「[B2].Value = "B2へ記入"」のようにセル位置をカギカッコで囲う記述方法でも、
Excel95の昔からExcel2010まで全バージョンで動きます。これはValueプロパティを省略した「[B2] = "B2へ記入"」
でも正常に動きます(通常カッコの(B2) = "B2へ記入"はエラー)。ただし、使用を殆んど見かけないので正式
構文ではないと思われるので、使用不可になるか可能性があり、知識として覚えるだけで使用は避けた方が良い。

「Cells(2, "B").Value = "B2へ記入"」のように、行を数値で列を英文字の記入方法もありますが、
こちらはヘルプの例題では見かけないが、全バージョンで動き使用しても問題ありません。


[2]参照場所をSetステ−トメントで指定
Setステ−トメントでセルの位置(参照するオブジェクト)を変数に代入すれば
その変数を使ってオブジェクトを操作できます。
Sub 書込み2()
Dim セル1 As Object
Dim セル2 As Object
Dim セル3 As Object
Dim セル4 As Object
    Set セル1 = Cells(2, 2)
    Set セル2 = Cells(2, 3)
    Set セル3 = Cells(3, 2)
    Set セル4 = Cells(3, 3)
        セル1.Value = "B2へ記入"
        セル2.Value = "C2へ記入"
        セル3.Value = "B3へ記入"
        セル4.Value = "C3へ記入"
End Sub


[3]セル位置を変数で指定した例
Cellsプロパティの場合引数に整数変数を使用できますが、「書込み3」が具体的使用例です。
Sub 書込み3()
Dim gyou As Integer
Dim retu As Integer
    gyou = 2
    retu = 2
    Cells(gyou, retu).Value = "B2へ記入"
    Cells(gyou, retu + 1).Value = "C2へ記入"
    Cells(gyou + 1, retu).Value = "B3へ記入"
    Cells(gyou + 1, retu + 1).Value = "C3へ記入"
End Sub


[4]Offsetプロパティによるセル指定
これまでに記述したセルの指定方法は「絶対参照」で実際に書き込む
アドレスを具体的に指定しました。セルの指定としてはそのほかに
特定セルを基準にしてそこから相対的に移動する「相対参照」でセルを指定
する方法があります。

・Offsetプロパティは下記のように相対的に移動を指定できます
Offset(0,1) ーーー右へ1セル移動     Offset(1,0) ーーー下へ1セル移動
Offset(0,ー1)ーーー左へ1セル移動     Offset(ー1,0)ーーー上へ1セル移動
 
本例は1セル移動移動ですが、3セル移動の場合は1が3になります。

・下記例はアクティブセルを基点に移動していますが、「書込み4」では最初に選択した"B2"を基点に移動で、
 書込み4aは移動先のセルをそのつどアクティブにしており、実行結果は同じですが、ステータスは異なります。
Sub 書込み4()
    Range("B2").Select
        ActiveCell.Value = "B2へ記入"
        ActiveCell.Offset(0, 1).Value = "C2へ記入"
        ActiveCell.Offset(1, 0).Value = "B3へ記入"
        ActiveCell.Offset(1, 1).Value = "C3へ記入"
End Sub
--------------------------------------------------------
Sub 書込み4a()
    Range("B2").Select
            ActiveCell.Value = "B2へ記入"
    ActiveCell.Offset(0, 1).Activate
            ActiveCell.Value = "C2へ記入"
    ActiveCell.Offset(1, -1).Activate
            ActiveCell.Value = "B3へ記入"
    ActiveCell.Offset(0, 1).Activate
            ActiveCell.Value = "C3へ記入"
End Sub


[5]セルを基点オブジェクトにしてCellsプロパティで指定
あるセルのオブジェクト、(例としてB2セルのオブジェクトは「Range("B2")」)を基点にCellsプロパティで行/列を
指定でその行列へ移動できます。なお、Offsetプロパティの1は1セル移動しますが、こちらは基点が1行又は
1列であり、B列を1列と設定の場合は2を指定でC列になります。
Sub 書込み5()
    Range("B2").Value = "B2へ記入"
        Range("B2").Cells(1, 2).Value = "C2へ記入"
        Range("B2").Cells(2, 1).Value = "B3へ記入"
        Range("B2").Cells(2, 2).Value = "C3へ記入"
End Sub


[6]SendKeysステートメントによるセル指定
キーボードから入力した操作方法を自動記録した書込み方法を説明しましたが、操作内容そのもをSendKeys
ステートメントで自動化することもできます。(キー入力のマクロ化であり、日本語入力状態であh正しく動きません)
Sub 書込み6()
    Range("B2").Select
        ActiveCell.Value = "B2へ記入"
        SendKeys "{right}"
            SendKeys "C2へ記入"
        SendKeys "{down 1}"
        SendKeys "{left 1}"
            SendKeys "B3へ記入"
        SendKeys "{right}"
            SendKeys "C3へ記入"
        SendKeys "{ENTER}"
End Sub


【参考132】3種類のセルへのデータ読取プロパティについて
ここまでセルへのデータ書き込み方法を記述しましたが、セルデータを読み取り(変数へ代入)についても
ここで参考に説明します。。
書き込みと同様にValueプロパティを省略して読み込めますが、セルに表示されている値でなく数式を読みこむ
場合もあり、使用目的によりValueプロパティ、Formulaプロパティ、Textプロパティの3種類のを使い分けます。
Sub 読取実行()
Dim dat1 As String, dat2 As String, dat3 As String
On Error Resume Next
    dat1 = Cells(i + 1, 3).Value    'セルデータがエラー値の場合代入でエラー発生します
    dat2 = Cells(i + 1, 3).Formula  'セルデータが数式の場合、数式を代入できます
    dat3 = Cells(i + 1, 3).Text     '表示されているセルの状態をそのまま代入できます
 
    MsgBox "Valueで読み取り  →" & dat1 & Chr(10) & _
           "Formulaで読み取り→" & dat2 & Chr(10) & _
            "Textで読み取り  →" & dat3
End Sub


【参考133】セルデータ取り込みの事前チェック例
前述で、「エラー値をValueで変数に代入するとエラー発生」と説明しましたが、事前にチェックする方法を、
セルに関数が設定されている場合のチェックと合わせて以下にマクロ例を示します。
Sub 事前確認1()
   If IsError(Cells(7, 3)) Then
       MsgBox "セルがエラー値になっています"
   End If
End Sub
---------------------------------------------------
Sub 事前確認2()
   If Cells(6, 3).HasFormula Then
       MsgBox "セルに関数が設定されています"
   End If
End Sub


【参考134】数字変化によりセル背景色もリアルタイムに変える例
株価をリアルタイムに解析として、計算結果の比率により色表示を変えたいケースがあります。
セルの背景色が3色以内であれば下記マクロで設定できます。
本例は、1.0以上の数字の背景色は「赤色」、0.02〜0.99が「ピンク色」、-0.03以下は「灰色」の背景色
になります。

Sub 背景色指定()
Cells(2, 2).Select
    Selection.FormatConditions.Delete
 
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="1.0"
    Selection.FormatConditions(1).Interior.ColorIndex = 3
 
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="0.02"
    Selection.FormatConditions(2).Interior.ColorIndex = 38
 
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="-0.03"
    Selection.FormatConditions(3).Interior.ColorIndex = 15
 
End Sub



【戻る】    【Top画面】   【HPへ】