LoginSignup
1
0

More than 3 years have passed since last update.

【VBA】【関数】効率化のためのメモ

Last updated at Posted at 2019-11-10

全般的なこと

ボタン

リボン>開発を表示する
挿入>選ぶ
マクロ名選択
移動とか編集とかするときは、開発>デザインモード

VBEditor ショートカット

VBEditorを開く:Alt + F11
ヒント表示:Ctrl + I
入力補完:Ctrl + Space
変数一覧(ローカルウィンドウ):Alt → V → S
エディタ設定: Alt → T → O
 キーワードをピンクにするのがオススメ。
実行:F5
一行ずつ:F8
ブレークポイント:F9

具体的なコード

インプットボックス

Application.InputBox(Prompt:="必要な列数は?(1~8)", Type:=1)
Type:=1は数値。2は文字列。4はTrue/False

列の非表示

Range(Columns(Honsu + 3), Columns("J")).Hidden = True
+3は、1列目(D)までの固定列

一列目・一番下のデータの次のセル

Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select

選択範囲の可変値(=関数以外)を削除する

Sub 可変値削除()
Dim ra As Range
Range("C3", "J53").Select  '対象範囲を選択。範囲が増えたらここも増やす必要あり
For Each ra In Selection
    If ra.HasFormula Then
        ra.Interior.Color = RGB(220, 220, 220) '関数だったら灰色にする
    Else
        ra.ClearContents '関数じゃなかったら値を消去する
    End If
Next
Cells(3, 3).Select
End Sub

```vb
この中にVBAのマクロを書くと、上のようにスタイリッシュになるなんて知らなかった。
```

関数

横方向に並んだデータを、縦方向に並べ替える

=OFFSET($A$1,0,ROW()-2)
元データは、A1、B1、C1…と並んでいて、それをA2、A3、A4…に転記する場合の例。
末尾の2は、並べ替え先の始点となるセル(ここではA2)の行番号。始点セルだと2-2=0になり、A1の値を返す。並べ替え先の次のセルでは、ROWが1つ増えて3-2=1でOFFSETの列指定が1つ増え、B1の値を返す。
元データの始点を絶対参照にすることで、A2の関数をA3、A4…にコピーしても動作する。

縦方向に並んだデータを、横方向に並べ替える

=OFFSET($A$1,COLUMN()-2,0)
縦横(行・列)を逆にしたもの。OFFSETの行指定のところに、列=COLUMNを参照した値を入れることで、列の移動を行の移動に置き換えることができる。

関数の置換

A1セルに「=元データ!\$C$1」という関数が入っていて、それを上記の関数に置換したい時。
="=OFFSET("&SUBSTITUTE(FORMULATEXT(A1),"=","")&",0,ROW()-2)"
FORMULATEXT関数で、関数の結果ではなく関数自体を参照できる。
あとはコピーして値貼り付けして、F2→Enterを繰り返す

1
0
0

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
1
0