VBA

VBA

Excelで方眼紙のつくりかた

①リボンの表示タブで「ページレイアウト」ボタンをクリックしてから「ルーラー」チェックボックスにチェック。ルーラーが表示される。

②オプションで「詳細設定」にある「表示」見出しで「ルーラーの単位」を「センチメートル」にする

③列の幅と行の高さを1cmに直す

2つの日付間の年数や日数を求める

=DATEIF(C5,G5,”Y”) >>> 日付間の年数

=DATEIF(C5,G5,”YM”) >>> 1年未満の月数

引数にはY、M、D、YM、YD、MDが存在する

Select Case

Select Case Cells(1,1).Value

Case 1, 2

MsgBox “1か2です”

Case 3 To 5

MsgBox “3~5です”

Case Is >= 10

MsgBox “10以上です”

Case Else

MsgBox “それ以外の数です”

End Select

Range範囲内に特定の文字が一つでも含まれているかどうか

If WorksheetFunction.CountIf(Range(“A1:A10”), “前”) > 0 Then

End If

1つのセルが特定の文字列を含むかどうか

InStr(“あいうえお”, “う”) >>> 3

If InStr(Cells(1,1).Value, “前”) = 0 Then

End If

日付から年を取得

Year(Cells(1,1).Value) >>> 2023

Format(Cells(1,1).Value, “ggge”) >>> 令和5年

ggge等の引数はhttps://www.relief.jp/docs/000018.htmlを参照

列番号対応表

https://takamin.github.io/techtips/xlsColNumMap

値が数値であるかどうか

If IsNumeric(Cells(3,4).Value) = True Then

x = 5

End If

IsNumeric関数は空白のセルでもTrueを返すため注意

IsNumericIsNumber
””TRUEFALSE
4月1日FALSETRUE
21:30TRUETRUE
“2020/04/01”FALSEFALSE
“1000”TRUEFALSE
1000TRUETRUE

For Step Next

For i = 1 To 9 Step 2

total = total + i

Next

結合セルの値を取得

Cells(5,6).MergeArea(1,1).Value

VLOOKUP

vlookup(検索値、検索範囲、左から何列目を表示、検索方法)

「左から何列目」は表示したい列が検索範囲より右にある場合はエラーになるので注意

「検索方法」は完全一致の場合、0またはFALSE

XLOOKUP

xlookup(検索値、検索範囲、値を取り出す範囲、見つからない場合、一致モード、検索モード)

xlookup(B2, $AC$6:$AC$100, $BQ$6:$BQ$100, ROUNDDOWN(V44*0.03063, 0), -1, 1) の場合、

B2をAC6からAC100から探し、AC20だったらBQ20の値をセルに表示する

ただし、見つからなかった場合、ROUNDDOWN()の値をセルに表示する

一致モードは0,-1,1とあり、

0完全一致が見つからなかった場合、#N/Aを返す
-1完全一致が見つからなかった場合、それより小さな値で最大の値を探す
1完全一致が見つからなかった場合、それより大きい値で最小の値を探す

今回は-1なのでB2が136528の場合は、136528の完全一致が見つからなかった場合は、それより大きい値で最小の値を探す

検索モードは1、-1があり

1AC6:AC100の先頭から探す
-1AC6:AC100の末尾から探す

※XLOOKUPはEXCEL2021から登場した関数なので、EXCEL2016や2019では=xlfs.XLOOKUP()となる

もし値が入っていたなら

If Cells(i, “B”).Value <> “” Then

~~~

End If

四捨五入や切り捨て

四捨五入: round(123.45, 0) —>123

切り捨て: rounddown(123.45, 1) —>123.4

切り上げ: roundup(123.45, -1) —>130

文字列の長さを取得

Len(“sample”) —> 5

Len(“サンプル”) —> 4

LenB(“sample”) —> 5

LenB(“サンプル”) —> 8

ハイパーリンクを追加

同ブックの別シートへのハイパーリンクを追加

ActiveSheet.Hyperlinks.Add Anchor:=ActiveSheet.Cells(1, 1), _

Address:=””, _

SubAddress:=”’” & ws.Name & “‘!A1”

全てのシート名を取得

Dim ws As Worksheet

Dim i As Integer

For i = 1 To Worksheets.Count

Set ws = Worksheets(i)

Cells(i, 1).Value = ws.Name 

Next 

半角2文字と全角1文字で文字幅が異なる

フォントを「MSゴシック」で統一すること

Excel方眼紙

通常は幅8.38point(72pixel)・高さ18.75point(25pixel)になっているので、

幅2.50point(25pixel)にすればいい

1列を複数列に分割

1列目のデータを2~4列目に3分割する場合

Dim i As Integer

Dim j As Integer

Dim k As Integer

k = 1

Dim ws As Worksheet

Set ws = Worksheets(“Sheet1”)

For i = 1 To 5

For j = 2 To 4 Step 1

ws.Cells(k, 1).Copy

ws.Cells(i, j).Paste

k = k + 1

Next

Next

改行(便箋)

A1の値をB10以降に貼り付ける場合(一行30byteまで)

Dim s As String

Dim i As Integer

Const 行間隔 As Long = 0

Const 行桁数 As Long = 30

s = Range(“A1”).Value

For i = 10 To Cells(Rows.Count, 2).End(xlup).Row

s = s & Cells(i, 2).Value

Next

For i = 0 To (LenB(s) – 1) / 行桁数

Range(“B10”).Offset(i * (行間隔 + 1)).Value = Mid(s, i * 行桁数 + 1, 行桁数)

Next

曜日番号を取得

Weekday(“2023-03-01”)

1月曜
2火曜
3水曜
4木曜
5金曜
6土曜
7日曜

〇日後の日付を取得

DateAdd(“d”, 1, “2023/03/01”)

検索範囲に検索値があるか調べる

xlookup(検索値, 検索範囲, 戻り範囲, 見つからなかった場合, 一致モード, 検索モード)

xlookup(v45, ac6:ac100, bq6:bq100, rounddown(v45*0.03063, 0), -1, 1)

一致モード

0:完全一致

1:検索値以上の最大値

-1:検索値以下の最大値

検索モード

1:先頭から末尾に向かって検索

配列内に特定文字があるか調べる

Dim s(3) As Variant

s(0) = “abc 456”

s(1) = “ABC DEF”

s(2) = “123 ABC”

f = Filter(s, “ABC”)

f(0) = “ABC DEF”

f(1) = “123 ABC”

ウィンドウサイズの変更

サイズ指定(その1)

Application.WindowState = xlNormal

Application.Width = 320

Application.Height = 160

サイズ指定(その2)

Windows(“sample.xlsx”).Width = 600

Windows(“sample.xlsx”).Height = 300

最大化・最小化

Application.WindowState = xlMaximized

Application.WindowState = xlMinimized

アクティブウィンドウのサイズ変更

ActiveWindow.Width = 600

ActiveWindow.Height = 300

ファイル名を取得

ThisWorkbook.Name

ファイルのパスを取得

ThisWorkbook.path & “\” & ThisWorkbook.Name

BACK