ExcelVBA 自分の備忘録

IT関連

列幅を適正化する

ActiveSheet.Columns.AutoFit

 

テキストを中央揃え

Range("A1").HorizontalAlignment = xlCenter  '中央揃え
Range("A1").HorizontalAlignment = xlLeft  '左揃え
Range("A1").HorizontalAlignment = xlRight   '右揃え

 

ワークシートを作る(既存のシートの最終に)

Worksheets.Add after:=Sheets(Sheets.Count)

 

シート名を変更する

ActiveSheet.Name = "好きな名前"

 

 

文字を切り出す

MsgBox Mid("ABCDEF",1,3)   '答えはABC
MsgBox Mid("ABCDEF",3,2)   '答えはCD

 

最終行を取得

LastRow = Range("A65535").End(xlup).Row

上記はA列のケツから上に見に行ってデータがあった行を取得している。B列の方が行が多い表の場合はB65535にしてあげること。

 

文字列として認識する

Range("A1").NumberFormatLocal = "@"

CSVからExcelのシートに移すとき、コードのように先頭が0が入るもの(例えば0123)は0が消されて123と表示される。これは数値として認識されるから。これを防ぐためには、事前に文字列として認識させておく必要がある。よって代入前に上記コードを実行してから、代入するとうまくいく。

 

桁区切りで表示する

Range("A1").NumberFormatLocal = "#,###"

金額などを1,353,245のように、3桁で区切るようにするとき。代入前に設定しておく。

 

%で表示する

Range("A1").NumberFormatLocal = "0.0%"

利益÷売りを利率として別のセルに代入するとき、%で表示したいが、そのままでは、0.12222…で表示される。これも事前に代入しておくこと。尚上記例は小数点1桁。

 

アラート表示を無しにする

Application.DisplayAlerts = False
'必要な処理例えば
'ActiveSheets(2).delete
Application.DisplayAlerts = True

マクロでシートを削除するとき、削除してよろしいですか?の表示はウザいので、表示しないようにする。DisplayAlerts = Falseだ。ただ、処理後は戻しておく必要があるので、末尾のTrueも忘れずに。

 

全シートに対して処理

'全シートに対して処理
For Each e In WorkSheets
   If e.index <> 1 then   'シート枚数が1以外は
      e.Delete      '削除
   End If
Next e

一番左のシートが原紙でそれ以外を削除したいときなど用途はさまざま。

 

アクティブセルに対して処理

'変数定義
Dim c as Range
Dim Target As String
'アクティブセルをセット
Target = ActiveSheet.Range(Selection,ActiveCell).Address
'アクティブセルの範囲を対象とし検索
For Each c In Range(Target)
  '例えば空白を除去
  c.Value = Replace(c.Value," ","")
  c.Value = Replace(c.Value," ","")
Next c

よくやるパターンが人間がドラッグでセルを選んで、ボタンを押すと、アクティブセルだけに対して処理を行うなど。まずTargetにアクティブセルのアドレスを取得して、ForEachでぶん回す。その際の変数cも必要。

 

ヘッダフッタを除去

With ActiveSheet.PageSetup
   .CenterHeader = ""
   .CenterFooter = ""
End With

 

先頭行を固定する

With ActiveWindow
   .FreezePanes = False
   Range("A2").Select
   .FreezePanes = True
End With

2行目で固定する場合は、Range(“A3”)にするとよい。

 

印刷のとき先頭行を固定して2枚目以降も表示する

With ActiveSheet.PageSetup
   .PrintTitleRows = "$1:$1"
End With

 

ウインドウのスクロールを戻す

ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollRow = 1

これで一番左上に表示が戻る。

 

用紙の向きを変更する

ActiveSheet.PageSetup.Orientation = xlLandscape ' 横
ActiveSheet.PageSetup.Orientation = xlPortrait '縦

 

印刷余白を変更する

With ActiveSheet.PageSetup
    .LeftMargin = Application.InchesToPoints(0.31)
    .RightMargin = Application.InchesToPoints(0.31)
    .TopMargin = Application.InchesToPoints(0.55)
    .BottomMargin = Application.InchesToPoints(0.31)
End With

 

アクティブセルの値をファイル名にしてPDF保存

Dim FName As String '保存するファイル名
Dim Nam As String 'ログインユーザー名

'アクティブセルを複数選択している場合は終了
If Selection.Rows.Count <> 1 And Selection.Columns.Count <> 1 then
   MsgBox "セルを複数選択している状態では使用できません。"
   End
End If

'アクティブセルの文字を取得
Fname = ActiveCell.Value

'ログインユーザー名を取得
Nam = Environ("username")

'デスクトップにPDF保存
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\" & Nam & "\Desktop\" & FName & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

 

アクティブシートを複数選択しているか確認する

If ActiveWindow.SelectedSheets.Count <> 1 Then
   MsgBox "複数シートを選択しています"
End If

 

シートが保護されているか確認する

If ActiveSheet.ProtectContents = True Then
   MsgBox = "シートが保護されています"
End If

 

ダブルクォーテーションを文字列として判別させる

VBAでは文字列はダブルクォーテーションでくくる決まりがある。「ありがとう」という文字があるとするが、これは数値にはなり得ないし、別に”ありがとう”などとしなくてもいいのでは?と思うかもしれないが、「ありがとう」という変数かもしれない。ダブルクォーテーションを付けるのはそういう意味だ。しかし、”を文字列として認識させたい場合は、直前にダブルクォーテーションを重ねてエスケープする必要がある。

hoge = “ありがとう”

これは、”ありがとう”という文字をhogeに代入したことになるが、緑が上記で説明したお決まりのダブルクォーテーション。青がエスケープ文字、赤が実質の文字となる。

 

On Errorを解除する

On Error Goto 0

利率計算で利益÷売上*100のロジックを使うが、0で割れずオーバーフローを起こすので、On Error Resume Nextでエラー回避するが、同一プロシージャ内はずっと適用されるのでは不都合がある。それをこれで解除できる。

On Errorを解除する

On Error Goto 0

利率計算で利益÷売上*100のロジックを使うが、0で割れずオーバーフローを起こすので、On Error Resume Nextでエラー回避するが、同一プロシージャ内はずっと適用されるのでは不都合がある。それをこれで解除できる。

行を挿入する

Rows(1).Insert

これで1行目に空白行を挿入でき、もともとの行は2行目に移動する。

複数行を選択する

Rows("1:2").HorizontalAlignment = xlCenter

Rows(“1:2”)で、1行目から2行目を主語として指定できる。

改ページを挿入する

Rows(2).PageBreak = xlPageBreakManual

項目ごとに改ページしたいときは、PageBreakを行で指定するが、指定した行の上部で切れることになる。ようするに、指定した行から次のページになる。Rows(2)とすると、1行目と2行目以降は別のページになる。

カンマ区切りで表示する

cells(1,1).NumberFormatLocal = "#,##0_ ;[赤]-#,##0"
cells(1,1).NumberFormatLocal = "0.0_ ;[赤]-0.0"

単価や金額は普通にカンマ区切りにしてマイナスは赤字で表示する。利益率などは%なのでマイナスは赤字だが、小数点1桁あたりで表示したいそのときは、NumberFormatlocalでこのように指定する。

コメント

タイトルとURLをコピーしました