Excel超すげぇ
一時期ExcelVBAをよく触っておりました。Macユーザーではありますが、Numbersには絶対に真似できないExcelの偉大さというものを知ったのはこのときです。勉強してたときのファイルをたまたま見つけて結構いろいろ使えそうなものがあったのでメモしておきます。
データが存在する最終行を取得
A1
セルから下に探します。空のセルがあるとそこでヒットします。
Sub データが存在する最終行を取得()
Dim maxrow as Long
maxrow = Range("A1").End(xldown).Row
End Sub
シートの一部分を配列化
左上がB2
セル、右下はデータが存在する最終行と最終列を探して配列化します。長方形範囲の中に空欄がある場合は考慮していません。ExcelVBAの配列ではインデックスが1から始まります。
Sub シートの一部分を配列化()
'配列化する部分の最終行、最終列
Dim endrow As Long, endcolumn As Long
endrow = range("b2").End(xldown).Row
endcolumn = range("b2").End(xlToRight).Column
'配列化する範囲を指定
Dim myrange As range
Set myrange = Sheet1.range("B2", Cells(endrow, endcolumn))
'Variant型にrangeを代入するとそのまま配列になります
Dim result As Variant
result = myrange
End Sub
Rangeオブジェクトの書き方
セル範囲や単一のセルを表すRange
オブジェクトですが、場面によって書き方を使い分けると便利です。
Sub Rangeオブジェクトの書き方()
'単一のセルの場合
Range("A1")
Range(Cells(1, 1), Cells(1, 1))
'長方形範囲の場合
Range("A1:B10")
Range(Cells(1, 1), Cells(10, 2))
End Sub
ルールに従って並び替え
A3
セルからF100
の長方形範囲をSort
メソッドで並び替えます。Rangeオブジェクトの表記をいろいろ変えてみます。操作対象を指定できるWith
ステートメントも同時に使います。
Sub ルールに従って並び替え()
'With〜End Withの間では操作対象を明示しなくてもいいので記述が簡潔になります
With Sheet1
Range("A3:F100").Sort _
'並び替えのルールはkeyを並び替えたい列の最上段のRangeオブジェクト、昇順から降順かを表すorderで与えていきます。最大で3つまでのようです。
'xlAscending(昇順)が既定値です
key1:=Range("B3"), order1:=xlAscending, _
key2:=Range("C3"), order2:=xlAscending, _
key3:=Range(Cells(3, 4), Cells(3, 4)), order3:=xlDescending, _
'最上段の行をタイトル行とみなすかどうかを指定します
'xlNoが既定値です
Header:=xlNo
End With
End Sub
ひまがあったらまた追記します。