ExcelVBA

ExcelVBAで入力するとき付箋的なものを出す

入力規則を使う With Range("B2").Validation '入力規則を削除 .Delete '入力規則の設定 'エラーメッセージのスタイルは「停止」 .Add Type:=xlValidateDate, _ Formula1:="2015/1/1", _ Operator:=xlLessEqual, _ AlertStyle:=xlValidAlertStop .InputTitle…

ExcelVBAでセルの高さを標準にする

'// 行と列を標準サイズに設定 Range("A1:B2").RowHeight = ActiveSheet.StandardHeight Range("A1:B2").ColumnWidth = ActiveSheet.StandardWidth ネタ元 https://vbabeginner.net/%E8%A1%8C%E3%81%AE%E9%AB%98%E3%81%95%E3%81%A8%E5%88%97%E3%81%AE%E5%B9%…

ExcelVBAで日付の加算

DateAdd(単位, 加算時間, 日時)日時に単位の加算時間を計算した結果を取得します。引数「単位」 引数「加算時間」の単位を表す文字を指定します。 引数「加算時間」 引数「日時」に加算する時間を数値で指定します。 引数「日時」 元になる日時を指定します…

ExcelVBAでエクスプローラ風のファイルコピー

例にアニメーション付きでコピーする 'C:\CopySource以下にあるファイルをすべてC:\CopyTarget\以下にコピーする。 'コピーに時間がかかる場合はコピー中のダイアログが自動的に表示される。 'このサンプルを動作させるにはフォーム上にコマンドボタンを1つ…

excelVBAからExcelを終了させる

Application.Quitで即終了するわけではない '警告メッセージを表示しない Application.DisplayAlerts = False '保存 Call ActiveWorkbook.Save '終了させる Application.Quit ThisWorkbook.Close ネタ元 http://hensa40.cutegirl.jp/archives/1286

RTDでDLLの機能が何故か呼び出せない時の原因

32bitExcelから呼び出すDLLなのに64bit用のregasmで登録してないかい?ANYCPUで作ったDLLとしても 32bit用のregasmで登録しないと呼び出せないよ。

ExcelVBAでシート内の最終行を取得する

最終行を取得する With Sheets(<シート名>).UsedRange LogRow = .item(.count).Row End With ネタ元 https://excel-ubara.com/excelvba4/EXCEL222.html

シート全体クリア

クリアする方法は次の5種類Clear:全てクリア ClearContents:数式、文字列をクリア ClearFormats:書式をクリア ClearComments:コメント文をクリア ClearOutline:アウトラインをクリア Sub test() Worksheets("Sheet1").Cells.Clear End Sub ネタ元 http:…

excelvbaでJST(日本時間)をミリ秒単位で取得

#If Win64 Then Private Declare PtrSafe Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME) #Else Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME) #End If Private Function GetLocalTime() As String Dim …

Excel セルの右クリックメニューやサブメニューにマクロを登録/削除する

With CommandBars("Cell").Controls.Add() .Caption="{メニューに表示する名前}" .OnAction="{実行するマクロのメソッド名}" End With先頭に追加するには Add(Before:=1)と書く区切り線入れるならこう書く。この例では3番めの上に区切り。 Application.…

ExcelVBAで日付型への変換はCVDate()

ネタ元 http://officetanaka.net/excel/vba/function/CVDate.htm

ExcelVBAでセルに値書き込むときはValueでアクセスしよう

Range("A1") = "hoge" じゃなくて Range("A1").Value = "hoge"Valueの代入ならちょっぱや。数こなすと雲泥の差が出る ネタ元 http://officetanaka.net/excel/vba/speed/s13.htm

ExcelVBAで高速化のための色々ON/OFF

Sub Focus(aSheet As Worksheet, aFlag As Boolean) Application.ScreenUpdating = aFlag Application.DisplayStatusBar = aFlag Application.Calculation = aFlag aSheet.EnableCalculation = aFlag Application.EnableEvents = aFlag aSheet.DisplayPageBr…

ExcelVBAでワークシートからブック名を取得する

Sub シート名がわかっているときにブック名を取得する() Const FIND_SH = "顧客マスター" Dim bk As Workbook Dim sh As Worksheet For Each bk in Workbooks For Each sh in bk.Worksheets If sh.Name = FIND_SH Then MsgBox sh.Parent.Name Exit Sub End I…

ExcelVBAでセルの再更新要求

Range("A1:C3").Dirtyでもユーザー定義関数(Function)からの呼び出しでは機能しない。サブルーチン(sub)経由で呼べば使える ネタ元 https://archives.aotsuki.org/excel-vba-calculate/#ApplicationCalculateApplicationCalculateFull

ExcelVBAでセルが更新されたら点滅させる

Dim a_cell As Variant Private Sub Worksheet_Calculate() If a_cell = "" Then a_cell = Cells(1,1).Value 'セルに初期値が入っていない時に代入 Exit Sub '1回目だけは、そのまま抜ける End If If a_cell <> Cells(1, 1).Value Then 'セル値が変化した時…

ExcelVBAでフォームが開いてるか調査

Dim bOPen_UserForm1 As Boolean: bOPen_UserForm1 = False Dim f As UserForm For Each f In UserForms If TypeOf f Is UserForm1 Then bOPen_UserForm1 = True 'MsgBox "開かれている" End If Next If bOPen_UserForm1 = False Then Exit Sub End If 'ダイ…

ExcelVBAで文字列内の文字をカウントする

簡単な関数があるわけじゃないシンプルなのは、指定文字を削除した文字列をつくって、 その文字列と元の文字列の文字数の差分取る方法 ネタ元 http://officetanaka.net/excel/vba/tips/tips152.htm

ExcelVBAで変数宣言と初期値入力を一行で書く方法

Dim str As String: str = "ABC"てな感じ。 ネタ元 https://qiita.com/11295/items/056e7c3f99374145c43b

ExcelVBA データ入力されている最終セルの行を取得

A1列のデータ最終行の例 Cells(Rows.Count, Range(”A1").Row).End(xlUp).Row ネタ元 http://officetanaka.net/excel/vba/tips/tips130.htm

ExcelVBAでファイル追記

Dim fso As FileSystemObject Set fso = New FileSystemObject Dim ts As TextStream Set ts = fso.OpenTextFile("D:\Tips.txt", ForAppending, True, TristateTrue) ' ファイルを UTF-16 で開く Set ts = fso.OpenTextFile("D:\Tips.txt", ForAppending, Tr…

VBAでユーザーフォームの表示を確認

Visible で判断 If (UserForm1.Visible = True) Then '表示されている Else '表示されていない End If ネタ元 https://oshiete.goo.ne.jp/qa/7846020.html

ExcelVBA Application.OnTimeで呼び出す関数に引数渡す

OnTimeで呼び出すプロシージャーに引数を渡しています。 全体をシングルクォーテーション(')で囲み、引数をダブルクォーテーション(")で囲みます。 Sub sample1() Application.OnTime Now + TimeValue("00:00:05"), "'sample2 ""時間ですよ""'" End Sub Sub …

Excelブック単体でExcelVBAを疑似マルチスレッド化

ここ参照 https://www.excel-chunchun.com/entry/2019/03/27/005233 Option Explicit '親部分 Sub Main() Const MAX_PROCESS = 10 Dim Apps As Collection: Set Apps = New Collection Dim i As Long '下準備 Dim App As Excel.Application Dim Wb As Workbo…

Excel関数のMAXを使って、指定列の最大値を取得

MAX値 = Application.WorksheetFunction.Max(Range("A:A")) ネタ元 https://uxmilk.jp/50111

ExcelVBAでリストボックスで選択された項目名を取得

Private Sub CommandButton1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "未選択です。" Else MsgBox .List(.ListIndex, 0) End If End With End Sub ネタ元 https://kosapi.com/post-4033/

ExcelVBAでブックの一覧を取得

Sub Sample1() Dim i As Long, tmp As String For i = 1 To Workbooks.Count tmp = tmp & Workbooks(i).Name & vbCrLf Next i MsgBox "現在開いているブックは、" & vbCrLf & tmp & "です" End Subもしくは Sub Sample2() Dim wb As Workbook, tmp As String…

ExcelVBAにてSGN関数で配列み初期化チェックは、環境によっては例外発生するので、使えない

環境によては動きが違うのでおかしいなとおもったら・・・。 On Error GoTo 使うのがいいのかな。 ネタ元 http://execel-util.blogspot.com/2015/12/vbasgn.html

ExcelVBAで任意の名前のシートがなければ作成する

'任意のワークシート名を指定 Dim trgtShName As String trgtShName = "新規追加" 'シートが開いているかどうかのフラグを定義する Dim flg As Boolean 'ワークシートオブジェクトを定義する Dim ws As Worksheet 'マクロ実行ブックの全シートにループ処理を…

ExcelVBAでシートのクリア

Worksheets("Sheet1").Cells.Clear ネタ元 http://www.koikikukan.com/archives/2016/10/04-003333.php