こんにちは、masaです。
新しくマクロを作ってるときに、「前使ったことあるコードなのにネットでいちいち調べてイライラする」となったので、よく使うコードをここにメモしておいて、検索できるようにしておこうと思います。
全般
全般1.任意の行を削除する。
Range(Cells(2, 1), Cells(5, 1)).EntireRow.Delete
Rows("7:7").Selectを派生させて任意の行を削除させようとするときに"7:7"の部分にiとか文字を入れれなくて困るので、指定の範囲を一括で削除できるようにメモを残します。単純なのに調べて作るのが怠かった。
全般2.最深部(最下部)のデータ位置を取得
’C列にある一番下(最深部・最下部)のデータの位置を取得【行数(a)を取得】
a=Cells(Rows.Count, 3).End(xlUp).Row
忘れたころに使うし、結構使える。メモしておこう。
全般3.指定した行で未入力のセルがあればその行を削除する。
’100行目から1行目に遡る形で処理してる。
For i = 1 To 99
Cells(100 - i, 1).Select
If Cells(100 - i, 1) = "" Then
Rows(100 - i).Delete
End If
汎用性高いし、思い出してコード書き直すの怠いのでメモ。
全般4.セルの内容を配列として記憶する。
’B2から下にある10個分のセルを配列SheetName()として記憶する。
Dim SheetName(10000) As Variant
For i = 1 To 10
SheetName(i) = Cells(i + 1, 2)
Next i
シート関係
シート1.シートの数を取得
’シートの数を取得する。
Worksheets.Count
地味に使えるし、コードが超簡単。
シート2.シート名を取得
’シート名を取得する。
ActiveSheet.Name
シート3.シート名を変更する
’現在選択しているのシート名を変更する。
ActiveSheet.Name = シート名
シート4.一番右側のシートを選択
’シートの数を取得する。
Worksheets(Worksheets.Count).Select
シート5.一番右側にシートを追加する
Sheets.Add After:=Sheets(Sheets.Count)
シート6.左からi番目のシートを選択
’左からi番目のシートを選択する。
Sheets(i).Select
グラフ関係
グラフ1.シート上にあるグラフを選択する。
’選択したシートにあるグラフを選択する
ActiveSheet.ChartObjects.Select
グラフを選択することも自動化できる。そのシートにあるすべてのグラフが選択されるので使用方法に注意。
グラフ2.グラフ上にある線の数を取得
’グラフ上にある線の数を取得
a = ActiveChart.FullSeriesCollection.Count
業務上でグラフを扱うことが多いし、グラフ扱うときってマクロの記録を活用・変形してなんともならないことが多い印象あるから、メモ。
グラフ3.グラフの位置を移動
’グラフの位置を移動する。
ActiveSheet.ChartObjects(1).Left = Range("B3").Left
ActiveSheet.ChartObjects(1).Top = Range("B3").Top
グラフの位置をB3に合わせることができる。
▽起動例
グラフ4.グラフの大きさを変更
’グラフの大きさを変更する。
With ActiveSheet.ChartObjects(1)
.Width = Range("B2:H20").Width '幅
End With
With ActiveSheet.ChartObjects(1)
.Height = Range("B2:H20").Height '高さ
End With
グラフの幅、高さをB2:H20に合わせることができる。
▽起動例
グラフ5.凡例の追加
’【全てのグラフに作用されるので注意】
ActiveSheet.ChartObjects.Select
’上部に表示【右側表示は(msoElementLegendRight)】
ActiveChart.SetElement (msoElementLegendTop)
グラフ6.軸ラベルの設定
'【全てのグラフに作用されるので注意】
ActiveSheet.ChartObjects.Select
With ActiveChart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "横軸"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "縦軸"
End With
End With
赤字部分を変更すると任意の軸ラベル名となる。
▽起動例
グラフ7.フォント変更(明朝)、フォントサイズ変更(11pt)
’フォント変更、フォントサイズ変更
With ActiveSheet.ChartObjects(1).Chart.ChartArea.Format.TextFrame2.TextRange.Font
.NameComplexScript = "MS 明朝"
.NameFarEast = "MS 明朝"
.Name = "MS 明朝"
.Size = 11
End With
赤字部分を変更すると任意のフォント、フォントサイズとなる。
図形関係
図形1.選択した図形を任意の位置に移動する。
’選択した図形を移動する
Selection.ShapeRange.Left = Range("C4").Left
Selection.ShapeRange.Top = Range("C4").Top
赤字部分を変更すると図形が任意の位置に移動する。
図形2.図形を選択したときのみマクロが動作する。
’Thenの後にコードを書く
If VarType(Selection) = vbObject Then
Else
End If
メッセージボックス
メッセージボックス1.Yesを選択したときのみマクロが動作する。
Dim i As Long
i = MsgBox("初期化しますか?", vbYesNo + vbQuestion)
If i = vbYes Then
Range("A7:VW5000").Select
Selection.ClearContents
Range("A7").Select
Else
End If
End Sub
「Then」以降がYesだった場合の処理、「Else」以降がNoだった場合の処理を示す。
余談であるが、ClearContentsは入力されたものをクリアされて、削除はされない。削除されないので個人的にDeleteよりも使いやすい。
おわりに
些細なことでもメモして、同じことを調べるっていう苦痛を味わうことのないようにしたい。