プログラミング系のネタをまとめていきます。

Excel基本操作

Rangeを起点に選択

オフセット指定

Dim r As Range
Set r = ActiveSheet.Range(Cells(1, 1), Cells(3, 3))	' 3x3 を選択
r.Offset(1,1).Select ' 3x3の範囲を行、列方向に+1移動した範囲が選択される
Rangeの一部を選択

Dim r As Range
Set r = ActiveSheet.Range(Cells(1, 1), Cells(3, 3))	' 3x3 を選択
r(1,1).Select ' 3x3の左上1セルを選択
r(0,0).Select ' 3x3の左上からさらに1行1列左上のセルを選択

セル範囲を選択


Sub Test()
	' 現在のActiveSheetに対して操作
	Range(Cells(1,1), Cells(3,3)).Select	' 選択する
End Sub

セルの幅と高さを変更


Sub Test()
	' 現在のActiveSheetに対して操作
	Range(Cells(1,1), Cells(3,3)).ColumnWidth = 5	' ポイント指定
	Range(Cells(1,1), Cells(3,3)).RowHeight = 5		' ポイント指定
	' 同じポイント数でも、セルの形状が正方形になるとは限らない。
	' 環境によって縦横比が違う。
End Sub

セルを正方形にする


Sub Test()
	' ColumnWidthをセットした後、そのセルのWidthをRowHeightにセットすると、正方形になる?
	Range(Cells(1, 1), Cells(3, 3)).ColumnWidth = cellSize
	Range(Cells(1, 1), Cells(3, 3)).RowHeight = Cells(1, 1).Width
End Sub

※動作を把握できていないので、後ほど調査する。

シート内の使用中最終セルを取得


'A1セルを基準にして最終列を求める
Set rangeEnd = ActiveSheet.Range("A1").SpecialCells(xlLastCell)

シート上のアクティブセルを取得


ActiveCell.Address

カーソル位置のセルが返ってきます。
"A1" という形式。

シート上の値が入力されている範囲を取得


    ActiveSheet.UsedRange

    With ActiveSheet.UsedRange
        .Item(1)                 ' 範囲内の左上のセル("0"を入れると左上のセルの、さらに一つ左になる)
        .Item(.Count)            ' 範囲内の右下のセル
    End With
参考サイト

No.8 ワークシートの最終行、最終列を取得する
http://www.niji.or.jp/home/toru/notes/8.html

セルの検索


Dim rangeS As Range
Set rangeS = ActiveSheet.Cells.Find("検索したい文字列", 
                                    LookIn:=xlValues, 
                                    LookAt:=xlWhole, 
                                    SearchOrder:=xlByRows, 
                                    MatchCase:=True, 
                                    MatchByte:=True)
参考サイト

その他のセル検索

行、列方向にセルの切れ目を検索

Range("A1").End(xlDown)   ' 下方向にセルの値の有り/無しが切り替わる直前まで検索
Range("A1").End(xlRight)  ' 右方向にセルの値の有り/無しが切り替わる直前まで検索
指定したセルを起点に、データが格納されている範囲を選択

Range("C3").CurrentRegion.Select

ユーザーフォームを作成


とりあえず…

名前定義


Dim r As Range ' 名前定義に登録したいセル範囲
ActiveWorkbook.Names.Add Name:="名前", RefersTo:=r

応用

テキストボックスの入力を数値のみにする


Private Sub TextBox1_Change()
    If Len(TextBox1.Text) = 0 Then
        Exit Sub
    End If
    
    ' 一番右の文字が数値であれば何もしない
    If IsNumeric(Right(TextBox1.Text, 1)) = True Then
        Exit Sub
    End If
    
    ' 数値でなかった場合、その一文字を削る
    TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
End Sub

※問題点:テキストボックス内でカーソルを移動し、数値の中間で数値以外の文字を入力できてしまう。
  • 参考サイト
http://www.moug.net/tech/exvba/0150021.html

フォーム関連

モードレスフォーム

フォームを表示する際に、vbModelessを指定します。

UserForm1.Show vbModeless
  • 参考サイト
http://www.shoeisha.com/book/hp/pc/office/Excel/fi...

罫線を引く


Private Sub DrawBorder(r As Range)
    With r
    	' 実線
        .Borders(xlEdgeTop).LineStyle = xlContinuous		' 選択範囲の上辺
        .Borders(xlEdgeBottom).LineStyle = xlContinuous		' 選択範囲の下辺
        .Borders(xlEdgeRight).LineStyle = xlContinuous		' 選択範囲の右辺
        .Borders(xlEdgeLeft).LineStyle = xlContinuous		' 選択範囲の左辺
        ' 太線
        .Borders(xlEdgeTop).Weight = xlMedium
        .Borders(xlEdgeBottom).Weight = xlMedium
        .Borders(xlEdgeRight).Weight = xlMedium
        .Borders(xlEdgeLeft).Weight = xlMedium
    End With
End Sub
線の位置
xlDiagonalDown
右下がり斜め
xlEdgeTop
上辺
xlDiagonalUp
j右上がり斜め
xlEdgeLeft
左辺
xlInsideHorizontal
内側水平線
xlInsideVertical
内側垂直線
xlEdgeRight
右辺
xlEdgeBottom
下辺
線の種類
xlContinuous実線
xlDash破線
xlDashDot一点鎖線
xlDashDotDot二点鎖線
xlDot点線
xlDouble二重線
xlSlantDashDot斜め一点鎖線
xlLineStyleNone無し
線の太さ
xlHairlineごく細
xlThin細い
xlMedium
xlThick太い

入力規則(プルダウンリスト)


Dim r As Range ' 入力規則を設定したいセル範囲
With r.Validation
    ' 設定済みの入力規則を削除する
    .Delete
    
    ' 設定
    .Add Type:=xlValidateList,      ' リストからの値を設定
         Formula1:="=定義した名前"  ' 名前定義からの指定。セル範囲等の指定も可能。
End With

Menu

メインコンテンツ

プログラミング

機器

Macツール

各種情報

Wiki内検索

おまかせリンク

Androidアプリ

AdSense

技術書


管理人/副管理人のみ編集できます