【VBA】VBAでFizzBuzzをやってみる。配列の速さも検証。
momeq
muchi-no-chi
今回は、VBAでセルの範囲を指定する方法を見ていこうと思います。
セルの範囲を細かく指定できれば、できることが増えるんだにゃ。是非是非覚えたいんだにゃ。
この記事では、
を学びます。
指定したいセルの場所がわかっていれば、Range()で指定できます。
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("A1:C10").Select
End Sub
表全体であれば、カレントリージョンの方が細かな指定なくできるので、楽だと思います。
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("A1").CurrentRegion.Select
End Sub
ユニオンを使えば、離れた位置にあるセルも指定できるんだにゃ。
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
Union(ws.Range("A1"), ws.Range("B2:C4"), ws.Range("A5")).Select
End Sub
取得したセルを少しずらせば、好きな位置を取得することもできます。
Offsetであれば、すでに取得している位置をずらすことができるにゃ。1行目や1列目をずらしたいときに使うにゃ。でも、はみ出す場合があるのが少しネックだにゃ。
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("A1").CurrentRegion.Offset(1, 1).Select
End Sub
Offsetではみ出すのが嫌な場合は、重なり合う部分だけ取得するインターセクト(Intersect)を使うと良いですね。
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.Range("A1").CurrentRegion
Intersect(.Cells, .Offset(1, 1)).Select
End With
End Sub
取得した範囲自体の大きさを帰ることもできますね。
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.Range("A1").CurrentRegion
.Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1).Select
End With
End Sub
好きな位置を範囲取得できれば、色々できますが、使いそうなことを例に挙げておきます。
//コピー
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.Range("A1").CurrentRegion
Intersect(.Cells, .Offset(1, 1)).Copy ws.Range("B12")
End With
End Sub
コピー方法 → 【VBA】コピー&ペーストするには?ペーストを指定すると幅が広がります。
//削除
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.Range("A1").CurrentRegion
Intersect(.Cells, .Offset(1, 1)).ClearContents
End With
End Sub
//配列に代入
Sub sample()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim ary As Variant
With ws.Range("A1").CurrentRegion
ary = Intersect(.Cells, .Offset(1, 1))
End With
ws.Range("A12").Resize(UBound(ary, 1), UBound(ary, 2)) = ary
End Sub
ここでは、コピー、削除、配列へ代入のコードを書いて見たにゃ。その他にもセルを選択できるといろいろなことができると思うから、覚えて欲しいんだにゃ。
独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。
無料体験や相談もあるから、一度試してみてもいいんだにゃ!
\無料体験、無料相談はこちらから/