ExcelVBA

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

ExcelVBAでセルの検索

Sub Sample2() Dim FoundCell As Range ''またはバリアント型(Variant)とする Set FoundCell = Range("A1").CurrentRegion.Find(What:="土屋") If FoundCell Is Nothing Then MsgBox "検索に失敗しました" Else FoundCell.Select End If End Sub ネタ元 http…

vbaで英字+数字/数字+英字の文字から英字だけ取る

数字+英字ならVal()を使うと数字部分だけ取れる Sub Sample1() MsgBox Val("123ABC") End Sub英字+数字ならひっくり返してから数字部分だけとり、Replaceで数字部分だけ消しちゃう dim moji moji = "ABC123" MdgBox Replace(moji, StrReverse(Val(StrReverse…

VBAで配列を1文字列に合体

Sub JoinTest() Dim ar(2) As String ar(0) = "aa" ar(1) = "bbb" ar(2) = "cccc" Dim s As String s = Join(ar, ",") Debug.Print s End Sub ネタ元 https://vbabeginner.net/vba%E3%81%A7%E9%85%8D%E5%88%97%E3%81%AE%E5%85%A8%E8%A6%81%E7%B4%A0%E3%82%92…

VBAで文字列を配列に格納

Dim v v = Split("111,2222,33333", ",") ネタ元 https://vbabeginner.net/vba%E9%96%A2%E6%95%B0%EF%BC%9A%E6%8C%87%E5%AE%9A%E6%96%87%E5%AD%97%E3%81%A7%E5%88%86%E5%89%B2%E3%81%97%E3%81%A6%E9%85%8D%E5%88%97%E3%81%AB%E3%81%99%E3%82%8B%EF%BC%88spli…

VBAで配列のクリア(初期化)

Eraseステートメントがある Erase 配列名 ネタ元 https://uxmilk.jp/50104

VBAで配列を追加していく技

ReDim Preserveしていく。 Sgn()で未初期化か判定できる Dim arr() As String For i = 0 To 4 If Sgn(arr) = 0 Then '初期化されていないので初期化 ReDim Preserve arr(0) Else '初期化されているので要素を追加 ReDim Preserve arr(UBound(arr) + 1) End I…

excelvbaで配列の文字列をMsgBoxで表示する

Join()使えば一発。 Dim arr(1 To 3) As String arr(1) = "東京" arr(2) = "大阪" arr(3) = "名古屋" MsgBox Join(arr) ネタ元 https://www.relief.jp/docs/excel-vba-show-msgbox-array-values.html

excelvbaでアドインの関数呼ぶ方法

Excelシートで開発開いて、ツール>参照 でアドインを参照するように設定あとはアドイン内の関数呼ぶだけ

vbaのフォームのリストでチェックボックス付きにする方法

・[プロパティ] ウィンドウで、[ liststyle ] プロパティを選択します。 ・ドロップダウン矢印をクリックして、使用可能なスタイルの一覧を表示します。 ・一覧から [Option] を選択します。 ListstyleプロパティをOptionに設定すると、複数**** 選択のプロ…

VBAのHTTP通信でWebスクレイピング

「ツール」メニューの「参照設定」のところで Microsoft HTML Object Library Microsoft XML, v6.0 を追加して使ってね重い環境だとhtmlDoc.writeの後、読み込み終わってなくてエラーになることがあるみたい。リトライ処理するといい感じ。 Sub HTTP通信() D…

vbaでHTMLDocumentのエラーがでたとき

「ツール」メニューの「参照設定」のところで Microsoft HTML Object Libraryを追加しよう ネタ元 https://oshiete.goo.ne.jp/qa/8929170.html

VBAフォームのリストの全選択ON/OFF

ループして SelectedをTrue/Falseする Private Sub cmd全選択_Click() Dim iintLoop As Integer With Me!lstResult For iintLoop = 0 To .ListCount - 1 .Selected(iintLoop) = True Next iintLoop End With End Sub Private Sub cmd全解除_Click() Dim iint…

VBAの配列のループ

LBound関数…引数に指定した配列の、最も小さい要素番号を返す UBound関数…引数に指定した配列の、最も大きい要素番号を返すこの関数をうまく使う Sub Sample2() Dim tmp As Variant, i As Long tmp = Split("123,田中,tanaka", ",") For i = LBound(tmp) To …

VBAでgetElementsByClassNameが使えないときの対処方法

ターゲットとなる「URL」のページはIEのドキュメントモードがIE8以下だとgetElementsByClassNameは未対応とのこと。getAttribute("className")でクラス名をしらべながら処理するしかない例 .... Dim httpReq As XMLHTTP60 Set httpReq = New XMLHTTP60 httpR…

VBEのコードを簡単にコメント化する

ツールバー>編集にコメントブロックの機能あるけど 面倒なのでツールバーのユーザー設定で使いやすくしましょう。 ネタ元 http://officetanaka.net/excel/vba/tips/tips04.htm

ExcelVBAで三項演算子

代替の関数がある Function IIf(Expression, TruePart, FalsePart) ネタ元 https://vbabeginner.net/vba%E3%81%AE%E4%B8%89%E9%A0%85%E6%BC%94%E7%AE%97%E5%AD%90%EF%BC%88iif%E9%96%A2%E6%95%B0%EF%BC%89/

ExcelVBAで全角を半角に変換するにはStrConv()

Excelの全角->半角変換関数であるASC()はVBAだと指定した文字の文字コード (Shift_JIS) を返す関数なので注意。 StrConv(文字列,vbNarrow); ネタ元 http://officetanaka.net/excel/vba/function/StrConv.htm

ExcelVBAで数値をカンマ付き文字列に変換する

'// カンマ区切り文字列に変換 s = Format(n, "#,###,###") ネタ元 https://vbabeginner.net/vba%E3%81%A7%E6%95%B0%E5%80%A4%E3%82%92%E6%96%87%E5%AD%97%E5%88%97%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B/

カンマ付きの数字文字列でも数値化するのはCDbl()

Val()だとカンマがあると思ったような変換にならない。 CDbl()ならOK。 ネタ元 http://hensa40.cutegirl.jp/archives/3300

ExcelVBAで入力機能付きのダイアログ

Dim ans As String str = InputBox(表示文字列, タイトル文字列, デフォルト値) ネタ元 https://www.officepro.jp/excelvba/dialog/index5.html

ExcelVBAでExcel終了

'確認メッセージを表示させない Application.DisplayAlerts = False '保存 ActiveWorkbook.Save 'Excelを終了する Application.Quit ネタ元 https://excel-excel.com/tips/vba_185.html