31.参考資料
このHPのどこかにある内容とダブリ掲載となりますが、マクロ作成時その場所
を探すのが面倒なので、自分が参考資料として必要な項目をこのページにまとめました。
----------- 目次 ------------
31-1. コマンドバーのID番号表
31-2. ASCU 文字コード表
31-3. A1形式の数字対象表
31-4. Sendkeysで使用のキーコード
31-5. カラー指定をマクロで行なう場合の参考表
31-6. データの種類表
31-7. メッセージボックスのボタン種類表
31-8. 演算子の種類と優先順位
31-9 日付関連の参考資料
31-10 UserFomeのコントロ−ルの略称
31-11 ファイル制御関連
31-12 文字列制御関連
31-13 ワークシート関数使用例
31-14 10進数/16進数の対象表
31-15 グラフ作成資料
31-1. コマンドバーのID番号表
▲ページトップ
ツールボタンにアイコンを表示する場合はFaceId番号を使用します。下表の
番号をクリックで実際のイメージが表示されます。
<使用例 & 説明>
← 下記マクロで表示したツールバー
[1] .Delete →ツールバーは毎回作成の関係で前に作成分の削除が必要
[2] .Position = msoBarTop → ツールバーをトップへ表示
[3] temporary:=True →Excel終了で本ツールバーは消える。
[4] .BeginGroup = True → ツールバーに区切りの縦線を入れる
[5] .Caption = "画像の取り込み" → マウスが来た時の説明文
[6] .OnAction = "画像" → アイコンをクリックした時実行するマクロ
[7] ID:=23 → クリックで実際の機能が実行される(注意:この指定でエラーになる番号もある)
[8] .FaceId = 931 → 表示するアイコン(この指定では全表示できるが、表示しているだけなので
実行するマクロの指定が必要。
Sub bar()
Dim cb As CommandBar
On Error Resume Next
CommandBars("mycb").Delete
On Error GoTo 0
Set cb = Application.CommandBars.Add(Name:="mycb", temporary:=True)
With cb
.Controls.Add Type:=msoControlButton, ID:=23, before:=1
.Controls.Add Type:=msoControlButton, ID:=3, before:=2
.Visible = True
.Position = msoBarTop
End With
Set cb1 = cb.Controls.Add(Type:=msoControlButton, before:=3)
With cb1
.BeginGroup = True
.Caption = "画像の取り込み"
.FaceId = 931
.OnAction = "画像"
End With
Set cb2 = cb.Controls.Add(Type:=msoControlButton, before:=4)
With cb2
.Caption = "枠内を透過にする"
.FaceId = 59
.OnAction = "透過"
End With
End Sub
31-2. ASCU文字コード表
▲ページトップ
【ASCU文字コード表】
<使用例 & 説明>
下記例のように、ASCUコードを使用することにより一般の文字の記述では出来ないことが出来る。
[1] 改行例
msg = "完了の項目を消去してよいか" & Chr$(10) & "(消去後は元に戻せません)"
kesu = MsgBox(msg, 1, "消去確認")
[2] ダブルクオーテーション( ”) 付加例
Cells(i, 8) = "<A HREF=" & Chr(34) & "javascript:chk(2)" & Chr(34) & ">注文</A>"
↓
Cells(i, 8)は、<A HREF="javascript:chk(2)">注文</A>となる
[3] セル内にある改行を削除例
(メニュ-から手動の「置換え」で改行コード指定は出来ないがマクロでASCコード指定で簡単に出来る)
Range("B2").Select
ActiveCell.Replace What:=Chr(10), Replacement:="", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
[4] 英文字で指定した列を、マクロで使用する為数字の列にした例
Myabc="A"
cno1 = Asc(UCase(Myabc)) - 64 ’本例ではcno1→"1"となる
[5]prn保存で最終にスペ−スを5個入れたいと言う質問に答えた例
sss = Chr$(&h20) & Chr$(&h20) & Chr$(&h20) & Chr$(&h20) & Chr$(&h20) & Chr$(13)
Cells(1, 1) = "A0001A0002A0003A0004A0005" & sss
[6]ASCコード番号チェック(検索で抽出できない時原因を調べる時便利)
Sub asccheck()
msg = "ASCコードをチェックするセルを指定して下さい"
moz = Application.InputBox(msg, "セルの指定", Type:=8)
i = 1: ascdat = ""
Do
moz1 = Mid(moz, i, 1)
If moz1 = "" Then
Exit Do
End If
ascdat = ascdat & moz1 & "[&H" & Hex(Asc(moz1)) & "] "
i = i + 1
Loop
MsgBox ascdat
End Sub
[7]ASCコードで数字取り出し麗(A列:北海道銀行 ?? 8353 → C列:8353、D列:北海道銀行)
Sub Macro1()
For i = 1 To 27
j = 1
Do
moz1 = Mid(Cells(i, 1), j, 1)
If Asc(moz1) > 48 And Asc(moz1) < 57 Then
Cells(i, 3) = Mid(Cells(i, 1), j)
Cells(i, 4) = Mid(Cells(i, 1), 1, j - 1)
Exit Do
End If
j = j + 1
Loop
Next
End Sub
31-3. A1形式の数字対象表
▲ページトップ
【A1形式の数字対象表】
<使用例 & 説明>
自動記録されたA1形式は、セル指定を変数で指定出来ないのでカスタムマクロ
を組む場合は必要に応じ"Cells"メソッドに変える
また、データベースの処理マクロを作成する場合も、指を折って数えたり
紙にA,B,C・・・と1,2,3.・・・の対象表を書いていたが直ぐ見える表があると便利。
Sub Macro1()
Range("AC2").Select
End Sub
Sub Macro1a()
Cells(2,29).Select '本項の対照表は、AC→29と見るだけです
End Sub
31-4. Sendkeysで使用のキーコード
▲ページトップ
【キーコード表】
<使用例 & 説明>
キーボードから入力したのと同じ処理をマクロで行なう場合、Sendkeysステートネント、
またはSendkeysメソッドで行なう。「キーコード表」クリックでキーとマクロへ実際に記述する
コードの対照表を表示します。
Sub Macro1()
SendKeys "%(FO)" '[AltとFキー][Oキー]でファイルを開くダイアログ表示
SendKeys "Book1.xls" '文字[Book1.xls]と入力
SendKeys "{enter}", True '[Enter]キーを押す
'本例はカレントフォルダ−を対象に実行であり、Book1.xlsがそのフォルダにあること
End Sub
・Shift キー、Ctrl キー、または Alt キーを押しながら他のキーとの組み
合わせを指定するには、通常のキー コードの前に、+、^、% を記述し
次のコードを単独または組み合わせて()内へ記述。
・キーボード上の文字を渡すには、キーの指定にその文字を使う。
・キーを押した時表示されない文字は「キーコード表」のコードを使用。
31-5 カラー指定をマクロで行なう場合の参考表
▲ページトップ
【カラーコード表】
<使用例 & 説明>
セルの背景色や文字に色付け等のカラー設定には、ColorIndex番号で指定する
方法と、RGB(red,green,blue)関数で設定する方法がありますが、本「カラーコード表」
では、Excelの通常カラーパレットの色をコードで表示。
(1)セル"B2"の背景色に「紫色」を設定した例
Cells(2, 2).Interior.ColorIndex = 39
Cells(2, 2).Interior.Color = RGB(&HCC, &H99, &HFF)
Cells(2, 2).Interior.Color = RGB(204, 153, 255)
Excelのカラーパレットにある色を指定した場合はその色が表示されるが、
RGB関数で適当な色を指定してもその色は表示されません。
(2)ユーザーフォーム1のTextBox1の背景色に「紫色」を設定した例
UserForm1.TextBox1.BackColor = "&Hff99cc"
こちらは微妙な色も設定できます
31-6 データの種類表
▲ページトップ
【データの種類表】
<使用例 & 説明>
変数や定数にとって重要なのが、データのタイプを表すデータ型である。
各データ型で消費するメモリ量が異なるので、必要以上に大きい数値ま
で扱えるデータ型を使用しない方がよい。(バイトが小さければマクロ
実行速度も早くなる)
バリアント型は、数値と文字列のどちらにも使用することができる、
しかしバリアント型は最もメモリを消費するので他を宣言できるのであれば、
そちらを宣言した方がよい。
31-7 メッセージボックスのボタン種類表
▲ページトップ
【メッセージボックスのボタン種類表】
<使用例 & 説明>
(1)メッセージボックス
Sub 例92()
msg = "完了の項目を消去してよいか" & Chr$(10) & _
"(消去後は元に戻せません)"
kesu = MsgBox(msg, 1, "消去確認")
If kesu = 2 Then
Exit Sub
End If
End Sub
’-------------------------------------------------------------
(2) インプトボックス(ついでに掲載)
Sub 例91b()
mm = Month(Date)
msg = "総括ブラフを作成する[月]を入力してください。"
tuki = Application.InputBox(msg, "月の指定", mm, Type:=1)
End Sub
31-8 演算子の種類と優先順位
▲ページトップ
【演算子】
<使用例 & 説明>
(1)はセルの位置を「¥」で行、「Mod」で列を算出した例
・本例はセル2B〜U11へ100までの数字を記入(1行20字)
・演算子2()は数字からセルの場所を識別例
(2)は、「+」と「&」の使用上の注意で、文字の結合はどちらでもできるが、
この例では、「a & b=12」「a + b=3」となります。また、データ形式
として、Dim a As String, b As String を指定した場合は「a & b=12」「a + b=12」
となり、Dim a As Integer, b As Integer を指定の場合は「a & b=12」「a + b=3」
となります。
結論として何を言いたいかと言うと、「+」は数字計算となることがあるので混乱を避ける為
文字の結合は「&」を使用した方がよい。
Sub 演算子1()
(1)「\」と「Mod」を使用例
For i = 1 To 200
na = i \ 20
nb = i Mod 20
If nb = 0 Then
nb = 20
na = na - 1
End If
Cells(na + 2, nb + 1) = i
Next
End Sub
Sub 演算子2()
i = InputBox$("指定した数字の場所を選択", "場所指定")
na = i \ 20
nb = i Mod 20
If nb = 0 Then
nb = 20
na = na - 1
End If
Cells(na + 2, nb + 1).Select
End Sub
'-----------------------------------------------------
(2) 「+」と「&」使用上の注意
Sub 計算1()
a = 1: b = 2
c = a & b
d = a + b
MsgBox "a " & Chr(38) & " b=" & c & Chr(10) _
& "a + b=" & d
End Sub
結果:メッセージボックスへ表示 a & b =12
a + b =3
31-9 日付関連の参考資料
▲ページトップ
【日付関連の参考資料】
<使用例 & 説明>
(1) 使用例については下記マクロを参照
(2) 日付関連マクロ作成の注意点:
・IsDate関数で日付に変換出来るかチェック。(可:True、不可:False)(ただし4/32等無い日もTrue)
・Dim hi As Date で変数を日付型に指定 (hiが他の型の場合「型が一致しません」のメッセジがでる)
・変数の内容は、[Windows]→[コントロールパネル]→[地域]→[日付]→(yyyy/mm/dd)→[OK]で指定した
型となる。変数に代入した文字で検索やフィルタ機能が上手く処理出来ない場合はチェックする。
・メニューの「データ」「フィルタ」「オートフィルタ」で日付指定で抽出する場合、年を4桁で指定した場合、
手動で行なう場合は問題ないが、マクロでの年4桁は抽出できない(Excel59〜2000とも同じ)(2桁年はOK)
'(1) 関数の使用例
Sub Macro1()
Cells(1, 1) = Date '結果例:2003/1/22
Cells(2, 1) = DateSerial(2002, 1, 22) '結果例:2003/1/22
Cells(3, 1) = DateValue("2003/1/22") '結果例:2003/1/22
Cells(4, 1) = Day(Date) '結果例:22
Cells(6, 1) = Minute(Now) '結果例:33
Cells(8, 1) = Now '結果例:2003/1/22 12:36:13
Cells(10, 1) = Time '結果例:12:39:04
Cells(11, 1) = Weekday(Now) '結果例:4
End Sub
'--------------------------------------------------------------------
(2)Excelの書式記号使用例
Sub Macro2()
Cells(1, 1) = Format(Date, "yyyy/mm/dd") '結果例:2003/1/22
Cells(2, 1) = Format(Date, "ggge/mm/dd") '結果例:平成15/01/22
Cells(3, 1) = Format(Date, "yyyy/mmm/ddd(dddd)") '結果例:2003/Jan/Wed(Wednesday)
Cells(4, 1) = Format(Date, "ggge/mm/dd(aaaa)") '結果例:平成15/01/22(水曜日)
End Sub
'--------------------------------------------------------------------
(3) 時間をシリアル値にして計算例
Sub Macro3()
t1 = TimeValue("8:30:00")
t2 = TimeValue("15:00:00")
Cells(1, 1).NumberFormatLocal = "h:mm"
Cells(1, 1) = t2 - t1 '結果例:6:30:00
End Sub
・シリアル値は1900/1/1を1として1日に1加算される。(小数点以下は1日内の時間)
・1分は=1/24/60→0.000694444であり、このシリアル値で1分単位の処理が出来る
'--------------------------------------------------------------------
(4)日付形式に変換(InputBoxの入力値を変換例)
Sub Macro4()
msg = "日付を入力して下さい"
ymd = InputBox(msg, "日付入力")
If IsDate(ymd) = False Then
msg = "日付に変換できません" & Chr(10) _
& "yyyy/mm/dd のように/で区切って入力して下さい"
MsgBox msg
Exit Sub
Else
ymd = DateValue(ymd)
End If
MsgBox ymd
End Sub
31-10 UserFomeのコントロ−ルの略称
▲ページトップ
【UserFomeのコントロ−ル略称一覧】
<使用例 & 説明>
この一覧表の「略称」3文字は、Microsoft社推奨の表記であり既存のオブジェクト名を変更して使用する場合、
この略称を使用すると他の方がマクロを見た場合の理解が容易になる。
通常コントロ−ルツ−ルボックスにには、WebBrowserが表示されていませんが、VBEのメニュ−から
[ツ−ル][その他のコントロ−ル] を選択し[Microsoft Web Browser]にマ−クを付ければ表示されます。
31-11 ファイル制御関連
▲ページトップ
【ファイル制御関連一覧】
<使用例 & 説明>
マクロで自動化する場合ファイル制御も必要であるが、どれを使用するか
スペルを含め忘れた場合用の一覧表です。(構文については下記参照)
Sub Macro1()
MsgBox "ブック名の読み取り→ " & ActiveWorkbook.Name
MsgBox "最後に開いたbook名読み取り→ " & ActiveWindow.Caption
MsgBox "パスを含むブック名→ " & ActiveWorkbook.FullName
fff = Application.GetOpenFilename()
MsgBox "" & Dir(fff) 'フルパスからファイル名を取り出す時便利
End Sub
'--------------------------------------------------------------------
Sub Macro2()
MsgBox "カレントフォルダ→ " & Application.DefaultFilePath
MsgBox "実行中のマクロBookのパス→ " & ThisWorkbook.Path
MsgBox "アクティブブックのパス→ " & ActiveWorkbook.Path
MsgBox "カレントパス→ " & CurDir()
End Sub
'--------------------------------------------------------------------
Sub Macro3a()
phn = ActiveWorkbook.Path
dva = Left(phn, 2)
dra = Mid(phn, 3)
ChDrive dva 'ドライブの変更
ChDir dra 'フォルダの変更
End Sub
Sub Macro3b()
phn = ActiveWorkbook.Path
On Error Resume Next
RmDir phn & "\MyGIF" 'フォルダ−の削除
On Error GoTo 0
MkDir phn & "\MyGIF" 'エラー回避に既にある場合は上記で削除
End Sub
Sub Macro3c()
MsgBox Dir("D:\", 16) '16はフォルダ
Do
kesu = MsgBox(Dir(), 1, "ファイル名フォルダ名")
If kesu = 2 Then
Exit Do
End If
Loop
End Sub
'--------------------------------------------------------------------
Sub Macro4()
phn = ActiveWorkbook.FullName
fff = Dir(phn)
MsgBox fff & "の作成年月日→ " & FileDateTime(phn)
MsgBox fff & "のファイルサイズ→ " & FileLen(phn) & "バイト"
SetAttr phn, vbNormal
MsgBox fff & "標準ファイルに設定しました "
MsgBox fff & "ファイルの属性→ " & GetAttr(phn)
' 0:標準、1: 読み込み専用、2: 隠しファイル、4: システム、16: フォルダ
End Sub
'--------------------------------------------------------------------
Sub Macro5()
'下記は記述例:
FileCopy "コピーしたいファイル", "コピー後のファイル名"
Name "変更前ファイル名" As "新しいファイル名"
Kill "削除するファイル名"
End Sub
Sub Macro5a()
'csvファイル保存をtxtに変更した具体例
ActiveWorkbook.SaveAs Filename:=fff, FileFormat:=xlCSV, _
CreateBackup:=False
Range("A1").Select
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
fchk = Dir(phn & "\" & csvmane & ".txt")
If fchk = "" Then
Name fff & ".csv" As phn & "\" & csvmane & ".txt"
Else
Kill phn & "\" & csvmane & ".txt"
Name fff & ".csv" As phn & "\" & csvmane & ".txt"
End If
End Sub
31-12 文字列制御関連
▲ページトップ
【文字列制御関連一覧】
<使用例 & 説明>
使用例は「文字列制御関連一覧」に記載しました。
なお記載内容は下記となっています。
| ページ |
内容 |
【ページ1】
|
1.文字数取得、 |
2.文字列の左より取り出し |
3.文字列の右より取り出し |
| 4.文字列の指定個所取り出し |
5.指定した文字の位置取得 |
6.数字→文字 |
| 7.文字→数字 |
8.アルファベットを小文字に |
9.アルファベットを大文字に |
| 10.文字列の比較(Like) |
11.文字列の比較、 |
12.文字列内の空白削除 |
【ページ2】
|
13.文字列の場所を指定し変更 |
14.文字列の一部を置換え |
|
| 15.ワークシート関数で置換え |
|
|
| 【ページ3】 |
16.文字列の変換 |
|
|
31-13 ワークシート関数使用例
▲ページトップ
【ワークシート関数使用例】
<使用例 & 説明>
VBAマクロでワークシート関数を使用することにより、プログラムか簡素化され
たり、実行が高速になることがあります。自分がワークシート関数を使用した
方が便利だと思った処理を例は少ないがまとめました。
'指定したセルの合計
Sub 合計()
ActiveCell.SpecialCells(xlLastCell).Select
endr = ActiveCell.Row
Set myrang = Range(Cells(2, 2), Cells(endr, 2))
kei = Application.WorksheetFunction.Sum(myrang)
MsgBox "B列の合計=" & kei
'WorksheetFunctionを指定しないで、Application.Sum(myrang)でも
' 問題ないが、マクロ作成時WorksheetFunctionと入力すると使用できる
' ワークシート関数が表示されるので通常あった方がマクロ化がらく
End Sub
’-------------------------------------------------------------
'データベースから最大値を取得
Sub 最大値()
Set myrang = Range("B1").CurrentRegion
maxd = Application.WorksheetFunction.Max(myrang)
MsgBox "最大値=" & maxd
End Sub
’-------------------------------------------------------------
'データベースから最小値を取得
Sub 最小値()
Set myrang = Range("B1").CurrentRegion
maxd = Application.WorksheetFunction.Min(myrang)
MsgBox "最小値=" & maxd
End Sub
’-------------------------------------------------------------
'特定列の最大値(数式で指定例)
Sub 最大値式()
ActiveCell.SpecialCells(xlLastCell).Select
endr = ActiveCell.Row
Range("F1").Formula = "=MAX(B1:B" & endr & ")"
MsgBox "最大値=" & Cells(1, 6)
End Sub
’-------------------------------------------------------------
'5データの移動平均
Sub 移動平均()
ActiveCell.SpecialCells(xlLastCell).Select
endr = ActiveCell.Row
Range(Cells(2, 6), Cells(endr, 6)).Formula = "=Average(B2:B6)"
'セルF2→(B2:B6)、セルF3→(B3:B7)、セルF4→(B4:B8) のように自動的に行は指定される
End Sub
’-------------------------------------------------------------
'千の位迄の表示(百位は四捨五入で000表示)
Sub 四捨五入()
ActiveCell.SpecialCells(xlLastCell).Select
endr = ActiveCell.Row
Set myrang = Range(Cells(2, 8), Cells(endr, 8))
myrang.Formula = "=Round(E2, -3)"
End Sub
'この場合H列は、E列「256897」→H列「257000」のようになります。
'H列をコピーして、形式を選択して貼付け(値v)指定でE列に貼り付ける
'ワークシート関数を使用した場合別の列へ計算式を入れる関係で目的の
'列へ戻す処理が必要で少し面倒だが高速化を考えた場合こちらの方が良い。
追記:上記は数式で記述した為、別セル記入で面倒だが1セルなら下記でよい。
Cells(2, 8) = Application.Round(Cells(2, 8), -3)
追記:(以下の関数はVBAでも使用できます)
'四捨五入して指定した桁数に
Cells(2, 2) = Application.Round(123.45678, 2) ' → 123.46
'数値をもとも近い整数に切り上げ(切り上げ最小単位に1を指定例)
Cells(3, 2) = Application.Ceiling(123.145678, 1) ' → 124
'数値を切捨てゼロに近い値にする(切捨て最小単位に1を指定例)
Cells(4, 2) = Application.Floor(123.95678, 1) ' → 123
'数値を指定した桁へ切捨て(桁数に3指定で小数点以下3桁例)
Cells(5, 2) = Application.RoundDown(123.45678, 3) ' → 123.456
'数値を指定した桁へ切捨て(桁数に3指定で小数点以下3桁例)
Cells(6, 2) = Application.RoundUp(123.45678, 3) ' → 123.457
’-------------------------------------------------------------
Sub 年齢()
Cells(1, 1) = "1944/4/23"
Cells(1, 9).Formula = "=DATEDIF(A1,TODAY()," & Chr(34) & "y" & Chr(34) & ")"
MsgBox "現在の年齢=" & Cells(1, 9)
End Sub
’-------------------------------------------------------------
Sub 半角化()
ActiveCell.SpecialCells(xlLastCell).Select
endr = ActiveCell.Row
Set myrang = Range(Cells(2, 8), Cells(endr, 8))
myrang.Formula = "=ASC(F2)"
End Sub
’-------------------------------------------------------------
' カタカナバー「-」→「ー」に統一例
Sub 文字の置換え1()
ActiveCell.SpecialCells(xlLastCell).Select
endr = ActiveCell.Row
Set myrang = Range(Cells(2, 8), Cells(endr, 8))
myrang.Formula = "=Substitute(F2,""-"",""ー"")"
End Sub
’-------------------------------------------------------------
'「?」を削除例
Sub 文字の置換え2()
ActiveCell.SpecialCells(xlLastCell).Select
endr = ActiveCell.Row
Range("A1").Select
For i = 2 To endr
Cells(i, 6) = Application.WorksheetFunction.Substitute(Cells(i, 6), "?", "")
Next
End Sub
’-------------------------------------------------------------
'セルA1に書いてある漢字漢字のフリ仮名に変換例
Sub ふりがな()
Cells(1, 1).Phonetics.CharacterType = xlKatakana 'カタカナ
'Cells(1, 1).Phonetics.CharacterType = xlHiragana ’ひらがな
'Cells(1, 1).Phonetics.CharacterType = xlKatakanaHalf ’半角カナ
kana = Application.WorksheetFunction.Phonetic(Cells(1, 1))
MsgBox "漢字のフリ仮名=" & kana
End Sub
31-14 10進数/16進数の変換
▲ページトップ
【10進数/16進数の対象表】
<使用例 & 説明>
マクロ作成時、10進数を16進に変換しての使用は殆どないが、
HTMLタグを手書きする時たまに必要であり、この表もあると便利なので掲載。
【ホームへ戻る】