エクセルを使用するとき、ショートカットキーを覚えていると作業時間が大きく短縮できます。
よく利用するエクセルのショートカットキーをまとめたデータ(jpg)をご用意いたしました。
下記アンケートにご記入いただくと、もれなくダウンロードURLをメールにてご連絡させていただきます。
https://plus1jp.com/wakuwaku121
エクセルを使用するとき、ショートカットキーを覚えていると作業時間が大きく短縮できます。
よく利用するエクセルのショートカットキーをまとめたデータ(jpg)をご用意いたしました。
下記アンケートにご記入いただくと、もれなくダウンロードURLをメールにてご連絡させていただきます。
https://plus1jp.com/wakuwaku121
エクセルで、レイアウトをよく見せたいために、次のようにセルの結合を使ってレイアウトを整えることがあると思います。
しかし、セルの結合を使用すると、データの並べ替えやマクロでうまく動作しないで困ることがあります。
例)データの並べ替えを使用した場合のエラー
レイアウトを調整する場合は、セルの結合を利用しないで次のように調整することができますので、こちらを利用することをおススメします。
エクセルを使用するとき、ショートカットキーを覚えていると作業時間が大きく短くなります。
次に紹介するショートカットキーは、エクセルで良く使う機能のショートカットキーになります。ぜひ、活用して効率よく作業しましょう。
下のPDFをダウンロードなどして、ご活用ください。
エクセルで Postgre を取り扱うときに、指定範囲内にデータがあるかどうかを判定するときの備忘録
BOF プロパティは、レコードの位置が Recordset オブジェクトの最初のレコードより前にあるかどうかを示します。
EOF プロパティは、レコードの位置が Recordset オブジェクトの最後のレコードより後にあるかどうかを示します。
例)
Set RS = CreateObject("ADODB.Recordset") RS.Open SQL, CNN, 1 MsgBox "RS.BOF ⇒ " & RS.BOF MsgBox "RS.EOF ⇒ " & RS.EOF
BOF、EOFも戻り値により、次のようにレコードとデータベースの関係を取得することができます。
・BOF、EOF のいずれかが True の場合、レコードはデータベース内にありません。
・BOF、EOF 共に True の場合、レコードはデータベース内にありません。
・BOF、EOF 共に False の場合、レコードはデータベース内にあります。
ユーザーフォームにボタンなどのコントロールを配置する方法の備忘録です。
(前回紹介した、「【VBA】VBAでエクセル外のオブジェクトを使うとき」に関連した内容になりますので、そちらの投稿も参考にしてください。)
ユーザーフォームにボタンなどのコントロールを配置する場合は、object.Add を使用します。
Dim ctrl As Control Set Set Ctrl = object.Add(class [, Name [, Visible ]] )
class は、配置するコントロールに割り振られた class を指定します。Name には、コントロールに振り分ける名前を指定します。
具体的には、次のように記述します。
Dim ctrl As Control Set ctrl = CreateObject("Forms.CommandButton.1" , "btn_01")
ProgID(プログラムID)の例を次にあげておきます。
Set ctrl = Controls.Add("BARCODE.BarCodeCtrl.1") Set ctrl = Controls.Add("RefEdit.Ctrl") Set ctrl = Controls.Add("Forms.CheckBox.1") 'チェックボックス Set ctrl = Controls.Add("Forms.ComboBox.1") 'コンボボックス Set ctrl = Controls.Add("Forms.CommandButton.1") 'コマンドボタン Set ctrl = Controls.Add("Forms.Image.1") 'イメージ Set ctrl = Controls.Add("Forms.Label.1") 'ラベル Set ctrl = Controls.Add("Forms.ListBox.1") 'リストボックス Set ctrl = Controls.Add("Forms.MultiPage.1") 'マルチページ Set ctrl = Controls.Add("Forms.OptionButton.1") 'オプションボタン Set ctrl = Controls.Add("Forms.ScrollBar.1") 'スクロールバー Set ctrl = Controls.Add("Forms.SpinButton.1") 'スピンボタン Set ctrl = Controls.Add("Forms.TabStrip.1") 'タブストリップ Set ctrl = Controls.Add("Forms.TextBox.1") 'テキストボックス Set ctrl = Controls.Add("Forms.ToggleButton.1") 'トグルボタン Set ctrl = Controls.Add("MSComctlLib.ListViewCtrl") Set ctrl = Controls.Add("MSComctlLib.TreeCtrl") Set ctrl = Controls.Add("InkEd.InkEdit.1") Set ctrl = Controls.Add("MSInkaut.InkPicture.1") Set ctrl = Controls.Add("WMPlayer.OCX.7")
ワークシート上に設置する場合は、OLEObjects.Add を使用します。
ActiveWorkbook.Worksheets("Sheet1").OLEObjects.Add ClassType:="Word.Document"
VBAでエクセル外のオブジェクトを使うときには、
参照設定でバインドする方法以外に、実行時にバインディングする方法があります。
その方法についての備忘録
参照設定でバインドする方法だと、エクセルのバージョンなどにより、参照するDictionaryのバージョンが異なります。このため、自分のPCでは参照できるが、他の人のPCでは参照できずエラーが出てしまうケースが発生してしまいます。
一方、実行時にバインディングする方法ではオブジェクトを直接バインドするため、こういったエラーは発生しません。
オブジェクトを作成する場合は、CreateObject を使用します。
Dim obj As Object Set obj = CreateObject(class)
class は、appname.objecttype の形式で指定します。具体的には、次のように記述します。
Dim obj As Object Set obj = CreateObject("ADODB.Connection")
ProgID(プログラムID)の例を次にあげておきます。
Set obj = CreateObject("BARCODE.BarCodeCtrl.1") Set obj = CreateObject("Access.Application") Set obj = CreateObject("ADODB.Connection") Set obj = CreateObject("ADODB.Recordset") Set obj = CreateObject("ADODB.Stream") Set obj = CreateObject("DAO.DBEngine.120") Set obj = CreateObject("Excel.Application") Set obj = CreateObject("RefEdit.Ctrl") Set obj = CreateObject("Outlook.Application") Set obj = CreateObject("PowerPoint.Application") Set obj = CreateObject("Word.Application") Set obj = CreateObject("Word.Document") Set obj = CreateObject("htmlfile") Set obj = CreateObject("InternetExplorer.Application") Set obj = CreateObject("Microsoft.XMLDom") Set obj = CreateObject("Microsoft.XMLHTTP") Set obj = CreateObject("MSXML2.DOMDocument") Set obj = CreateObject("MSXML2.XMLHTTP") Set obj = CreateObject("Forms.CheckBox.1") Set obj = CreateObject("Forms.ComboBox.1") Set obj = CreateObject("Forms.CommandButton.1") Set obj = CreateObject("Forms.Image.1") Set obj = CreateObject("Forms.Label.1") Set obj = CreateObject("Forms.ListBox.1") Set obj = CreateObject("Forms.MultiPage.1") Set obj = CreateObject("Forms.OptionButton.1") Set obj = CreateObject("Forms.ScrollBar.1") Set obj = CreateObject("Forms.SpinButton.1") Set obj = CreateObject("Forms.TabStrip.1") Set obj = CreateObject("Forms.TextBox.1") Set obj = CreateObject("Forms.ToggleButton.1") Set obj = CreateObject("MSComctlLib.ListViewCtrl") Set obj = CreateObject("MSComctlLib.TreeCtrl") Set obj = CreateObject("Scriptlet.TypeLib") Set obj = CreateObject("CDO.Message") Set obj = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") Set obj = CreateObject("InkEd.InkEdit.1") Set obj = CreateObject("Scripting.Dictionary") Set obj = CreateObject("Scripting.FileSystemObject") Set obj = CreateObject("Shell.Application") Set obj = CreateObject("MSInkaut.InkPicture.1") Set obj = CreateObject("VBScript.RegExp") Set obj = CreateObject("Wia.ImageFile") Set obj = CreateObject("WbemScripting.SWbemLocator") Set obj = CreateObject("WScript.Shell") Set obj = CreateObject("WScript.Network") Set obj = CreateObject("new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
VBAで、特定の日付の曜日を取得する方法についての備忘録
日付関数 Weekday と、WeekdayName の2つがあり、それらについて紹介。
Weekday 関数は、特定の日付の曜日を示す整数値を返す関数です。
Weekday(曜日をしらべたい日付)
曜日をしらべたい日付には、”2021/2/2”のような文字列も可能です。
週の第1日目の曜日を示す値またはクラス名
・0:vbUseSystemDayOfWeek(PCのOSのシステム時間)
・1:vbSunday (日曜日)
・2:vbMonday (月曜日)
・3:vbTuesday (火曜日)
・4:vbWednesday (水曜日)
・5:vbThursday (木曜日)
・6:vbFriday (金曜日)
・7:vbSaturday (土曜日)
例)
MsgBox Weekday("2021/2/2")
カレンダー通り、2(=火曜日)が表示されます。
Weekday 関数では、曜日を表す数字が返ってくるだけなので、何曜日なのか分かりません。
そこで、WeekdayName 関数で、何曜日というテキストを返します。
WeekdayName(Weekday関数で求めた曜日を表す数字, 「曜日」を省略するかどうか, )
例) 「曜日」を省略しない場合
MsgBox WeekdayName(Weekday("2021/2/2"),false)
「火曜日」が表示されます。
例) 「曜日」を省略する場合
MsgBox WeekdayName(Weekday("2021/2/2"),true)
「曜日」が省略され、「火」が表示されます。
VBAで日時を扱うときのデータについて、紹介していきます。
VBAでは、日時を扱うために、「日付型」というデータ型が用意されています。
この日付型を使うと、日付の比較や加算、引き算などの計算ができます。
VBAで、日付型を記述するときは「#」記号で囲みます。
#月/日/年 時:分:秒#の内容で記述します。
Sub macro1() Dim d1 As Date, d2 As Date, d3 As Date d1 = #12/24/2020# ' #月/日/年# d2 = #10:26:30 AM# ' #時/分/秒# d3 = #12/24/2020 10:26:30 AM# ' #月/日/年 時/分/秒# MsgBox d1 & vbCrLf & _ d2 & vbCrLf & _ d3 End Sub
上記で紹介した記述法は見つらいので、文字列のように「”」記号で囲むこともできます。
文字列を日付型で定義したデータに代入すると、自動で日付型に変換されます。
Sub macro1() Dim d1 As Date, d2 As Date, d3 As Date d1 = "12/24/2020" d2 = "10:26:30 AM" d3 = "12/24/2020 10:26:30 AM" MsgBox d1 & vbCrLf & _ d2 & vbCrLf & _ d3 End Sub
DateAdd(“d”, 0, c1.Cells(i, 16))