思考酒後

自分に入ってきた情報を定着、深化するために文章化

MENU

個人的によく使うコードのメモ【Excelマクロ】


 こんにちは、masaです。

 新しくマクロを作ってるときに、「前使ったことあるコードなのにネットでいちいち調べてイライラする」となったので、よく使うコードをここにメモしておいて、検索できるようにしておこうと思います。

  

 

f:id:masa_mn:20201010145150j:plain

全般

全般1.任意の行を削除する。

’2行から5行までを削除する

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に合わせることができる。

 

▽起動例

f:id:masa_mn:20220228190855j:plain

 

グラフ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に合わせることができる。

 

▽起動例

f:id:masa_mn:20220228190916j:plain

 

グラフ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

 赤字部分を変更すると任意の軸ラベル名となる。

 

▽起動例

f:id:masa_mn:20220228190935j:plain

 

グラフ7.フォント変更(明朝)、フォントサイズ変更(11pt)

’フォント変更、フォントサイズ変更

With ActiveSheet.ChartObjects(1).Chart.ChartArea.Format.TextFrame2.TextRange.Font
 .NameComplexScript = "MS 明朝"
 .NameFarEast = "MS 明朝"
 .Name = "MS 明朝"
 .Size = 11
End With

 赤字部分を変更すると任意のフォント、フォントサイズとなる。

 

グラフ8.参照範囲を更新

’グラフ1を選択

ActiveSheet.ChartObjects("グラフ 1").Activate

 

'XValue=横軸,A1:A10を参照

ActiveChart.SeriesCollection(1).XValues = Range(Cells(1,1),Cells(10,1))

 

'Value=縦軸,B1:B10を参照

ActiveChart.SeriesCollection(1).Values = Range(Cells(1,2),Cells(10,2))

  赤字部分を変更するとセルの縦方向が変化して、青字部分を変更するとセルの横方向が変化する。

 

図形関係

図形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よりも使いやすい。

 

おわりに

 些細なことでもメモして、同じことを調べるっていう苦痛を味わうことのないようにしたい。