ExcelVBA

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

ExcelVBAでCSVファイルを読み込むマクロ

こちらで公開しているシートのReadCSVをまるっと頂きましょう。 https://www.excelspeedup.com/readcsv/

ExcelVBAで指定のシートにフォームボタンを追加する

Dim addTop Dim addLeft addTop = Range("A1").Top addLeft = Range("A1").Left Dim btn Set btn = Workbooks("hogeシート.xlsm").Sheets("hogehoge").Buttons.Add(addLeft + 19.5, addTop, 133.5, 37.5) btn.Characters.Text = "ボタン名" btn.OnAction = "…

ExcelVBAで文字などの簡単な入力ダイアログ

Sub Sample1() Dim buf As String buf = InputBox("名前を入力してください") Range("A1") = buf End Sub ネタ元 http://officetanaka.net/excel/vba/tips/tips37.htm

ExcelVBAでマクロ実装させずにワークシート開く方法

Workbook_Open()にやらかしマクロ書いちゃったときなどに使います。 Excelを起動する。 メニューの「開く」を選択。 「ファイルを開く」ダイアログで、開きたいファイルをクリック。 Shiftを押しながら「開く」をクリック。 ネタ元 https://stabucky.com/wp/…

Excelvbaでクリックしたボタンの座標取得

MsgBox ActiveSheet.Shapes(Application.Caller).Left MsgBox ActiveSheet.Shapes(Application.Caller).Top MsgBox ActiveSheet.Shapes(Application.Caller).Width MsgBox ActiveSheet.Shapes(Application.Caller).Height $A$2 とかの書式ならこちら MsgBox …

ExcelVBAでutf-8指定でファイル読み込みする

ADO(ActiveX Data Objects) 使う Sub Sample1() Dim buf As String, Target As String Target = "D:\Work\UTF-8のテキスト.txt" With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .LoadFromFile Target buf = .ReadText .Close MsgBox buf End W…

ExcelVBAでRange()からRow Column取得してCells()によるアクセスする方法

Debug.Print Range("A1").Row & "," & Range("A1").Column ネタ元 https://website-note.net/vba/change-range-to-cells/

ExcelVBAでPasteSpecialするときに、描画停止してるとエラーになる

Range("E1").PasteSpecialなどするときは '描画停止 Application.ScreenUpdating = Falseはしないようにしましょう。

ExcelVBAで右隣のセル情報取得

Offset()使う Sub Sample1() Dim FoundCell As Range Set FoundCell = Range("A:A").Find("田中") If Not FoundCell Is Nothing Then MsgBox FoundCell.Offset(0, 1) End If End Sub ネタ元 https://www.moug.net/tech/exvba/0050161.html