【完全自分用】ExcelVBAのチート(カンニング)シート

以下全部自分用につくりました。

頭ではわかってるのになんか出てこない。
これよくあるのでまとめました。

目次

設定編

Excel高速化のためにやるやつ

お決まりの高速化に使うやつ。

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayAlerts = False
        .Calculation = Excel.XlCalculation.xlCalculationManual
    End With

もろもろオフにして

  With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .DisplayAlerts = True
        .Calculation = Excel.XlCalculation.xlCalculationAutomatic
   End With

オンに戻す。

個人的には最後にこれはつけます。
なぜかというと、全部オフ→オンに行く前にエラー→だるい
となるので最後がおすすめです。(というか配列使えばなくてもいい)

確認メッセージを消す&シートの追加と削除

シートやブックを消すときに出る確認ポップ。
あれのせいで作業が止まってしまうことありますよね。
Application.DisplayAlertsで制御できます。

Application.DisplayAlerts = False
    
    Worksheets.Add.Name = "test"
    ActiveSheet.Delete
    
Application.DisplayAlerts = True

ユーザー定義型変数の宣言

何気便利なユーザー定義型。

Type ex
    namae As String
    nenrei As Long
End Type

Sub test()
    Dim a() As ex
    c(1).namae = "azeti"
    c(1).nenrei = 30
End Sub

連想配列

リンゴは赤いみたいな感じの連想配列。
便利です。

Dim dic as Object
Set dic = CreateObject("Scripting.Dictionary")
Set dic = Nothing

配列の大きさをかえる

どれくらいの大きさが必要かわからないときに便利。

Dim a
Dim i as Long

ReDim Preserve a(i)

エラー時の処理

On Error Resume Next
On Error GoTo 0

インプットボックス

 Dim buf
buf = InputBox("入力して")
MsgBox buf

buf = InputBox(Prompt:="入力してみて", HelpFile:="", Context:=2)
MsgBox buf
0数式
1数値
2文字
4True/False
8Rangeオブジェクト
16エラー値
64数値配列

フォルダパスを取得

 Dim folderPath As String   
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
        folderPath = .SelectedItems(1)
        End If
    End With

ワードを開く

 Dim wdApp As Object
 Set wdApp = CreateObject("Word.Application")
 wdApp.Visible = True

ユーザー定義型は定義されていませんとエラーが出た場合は、ツール→参照設定から「Microsoft Word ○○.〇 Object Library」にチェックを入れましょう。
〇はバージョン名です。

Microsoft XX.X Object Libraryと勘違いしがちですが、Wordと入ってるやつにチェックしてください。

クラスモジュールの参照渡し

callをつけて渡す。

Dim cls as Class1
Set cls = new Class1
Dim 変数
変数 = "test"

Call cls.test(変数)

セル操作

Find

Sub test()
    Dim Rng As Range
    Set Rng = Cells.Find(What:="test")
    If Not Rng Is Nothing Then
        msgbox Rng
    End If
End Sub

Object.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection,
MatchCase, MatchByte, SearchFormat)

メソッド対象
ObjectRangeオブジェクト
What何を検索する?”対象”
After検索位置、Range、省略OK
LookIn検索の対象 数式(xlFormulas)、値(xlValues)、コメント(xlComments) 省略OK
LookAt完全に同一なセルだけ(xlWhole)、一部一致OK(xlPart) 省略OK
SearchOrder検索方向。列方向に検索する(xlByColumns)、行方向に検索する(xlByRows)省略OK
SearchDirection前方に検索(xlNext:既定値)、後方に検索(xlPrevious)省略OK
MatchCase大文字と小文字を区別する(True)、区別しない(False) 省略OK
MatchByte半角と全角を区別する(True)、区別しない(False)省略OK
SearchFormat書式を検索する (True)、検索しない(False) 省略OK

削除

Range("A1").ClearContents
メソッド対象
Clear全て(削除)
ClearCommentsコメント
ClearContents値と数式(値けし)
ClearFormats書式 (色や罫線、条件付き書式など)
ClearNotesコメント
ClearOutlineアウトライン
ClearHyperlinksハイパーリンク

書式変更

Range.NumberFormatLocal = "@" '文字列
Range.NumberFormatLocal = "yyyy/mm/dd" '日付、月、日

色変更

Range("A1").Interior.Color = vbRed '赤
vbBlack
vbRed
vbGreen
vbYellow
vbBlue
vbWhite

罫線、網掛け

Sheets("Sheet1").Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous

最終行、最終列を取得

Dim Maxcol
Dim Maxrow

'最終列
 Maxcol = Cells(1, Columns.Count).End(xlToLeft).Column
'最終行
 Maxrow = Cells(Rows.Count, 1).End(xlUp).Row

コピペ

Sheets("Sheet1").Range("A1").Copy Destination:=Sheets("Sheet2").Range("A1")

計算編

乱数

Randomize
Range("A1") = Rnd

Randomizeが初期化。
Rndで乱数です。
※0<Rnd<1です。

Range("A1") = Int(6 * Rnd + 1)

Intを使って整数値の範囲内で乱数を起こすことも可能です。

演算子一覧

さすがに忘れることはないけど一応。

比較系

記号意味
<小さい
<=以下
>大きい
>=以上
=等しい
<>等しくない

計算系

記号意味
+加算
減算
*乗算
/定数の除算
\整数の除算
Mod除算の余り

論理系

記号意味
And論理積
Or論理和
Not否定

○○を含む

関数でやるとき、”*含む*”みたいに*で挟むと含むという意味になりますよね。(ちなみに””は空白)
イメージ的には*は何でもいいという感じです。
なので”*含む”とやると、左側がなんでもいいとなります。

セルで指定するときは、”*”&A1&”*”となります。

これをVBAでやるときに便利なのがLikeです。

If Range("A1") Like "azechi" Then

End If

おわり

随時更新していきます。

[temp id=2]

コメント

コメントする

目次