LoginSignup
6
6

More than 5 years have passed since last update.

ExcelVBAでこういう感じのことをよくやってたなと懐かしむ

Last updated at Posted at 2016-06-29

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

ひまがあったらまた追記します。

6
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6