【VBA】よく使う書き方
QiitaとNoteにも纏めています。
Noteが自分程度の情報纏めにはとてもやり易かった。
基本
- 俺たちが唱える最初の呪文
- workbook、worksheetの指定
- ファイルを開く
- subの中でsubとfunctionを呼ぶ
- クリップボードに値をコピー
初級編
- ある文字の一番下に文字を加える
- 特定フォルダのファイルを開く
- 特定フォルダにある全てのファイル名を取得する
Outlookと絡める
- 文字列をプレーンテキスト化する
- 番外 LINK集
——————-
俺たちが唱える最初の呪文
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'APIを宣言 (何のAPIだったかは忘れた)
workbook、worksheetの指定
Sub randomSubName()
Dim WB As Workbook
Set WB = ThisWorkbook
Dim WS As Worksheet
Set WS = WB.Worksheets("SubjectList")
WS.Cells(1, 1).Value = "cells provide (rows, column), that's what you always forgot hah"
WS.Cells(1, 2).Value = "paypal mafia"
WS.Cells(1, 3).Value = "tiktok pajama"
End Sub
ファイルを開く
'最近はこれで全てのファイルを開いてます(良いのか分からんが)
CreateObject("Shell.Application").ShellExecute "ここにファイルパス
subの中でsubとfunctionを呼ぶ
Private Sub main()
'callは使いません
'functionの戻り値の変数定義が反対の様な気がしますが、動きます。
Dim i As Long
tEst
funcTEST
i = Add(1, 2)
MsgBox i
End Sub
Sub tEst()
MsgBox "testだよ"
End Sub
Function funcTEST() As Long
MsgBox "funcだよ"
End Function
Public Function Add(number1 As Double, number2 As Double)
Add = number1 + number2
End Function
クリップボードに値をコピー
(カスタマイズできそうに書いてます)
Private Sub iLikeCB()
Dim cbData As New DataObject 'ClipBoard data object
'クリップボードへ文章をコピーする
cbData.SetText "依頼内容:" & vbCrLf & _
"依頼者:" & vbCrLf & _
"依頼日:" & vbCrLf & _
"完了期限:" & vbCrLf & _
"メール件名:" & vbCrLf & _
"種別:" & vbCrLf & _
"概要:" & vbCrLf & _
"注意点等:" & vbCrLf & _
"詳細:" & vbCrLf & _
"備考:" & vbCrLf & _
"場所:" & vbCrLf & _
"ラック:" & vbCrLf & _
"機器:"
cbData.PutInClipboard
End Sub
ある表の一番下に文字を加える(前提:その表の下には空欄のセルのみ)
Dim startPointRow As Long
startPointRow = WS.Cells(1048576, 1).End(xlUp).Row + 1
特定フォルダにある全てのファイル名を取得する
(Office TANAKA先生のファイルの一覧を取得するも一読を)
Sub GetFolderList()
Dim fso As Object
Dim find_path As String
Dim cf As Variant
Dim i As Long
find_path = "C:\Users\Sample" '←取得したいフォルダパスを指定する
Set fso = CreateObject("Scripting.FileSystemObject")
Set cf = fso.getfolder(find_path)
i = 1
For Each f In cf.Files
Cells(i, 1) = f.Path
Cells(i, 2) = f.Name
i = i + 1
Next
End Sub
特定フォルダのファイルを開く
Sub openFile()
Dim buf As String, wb As Workbook
Dim cnt As Long
Const targetPath As String = "特定のフォルダ"
Dim excelFileName As String
excelFileName = InputBox("Please enter a part of filename. Folder is" & targetPath)
'対象のフォルダ内のファイル全てを検索 一番最初のファイルがbufへ入る
buf = Dir(targetPath & "*")
Do While buf <> ""
If InStr(1, buf, excelFileName, vbTextCompare) > 0 Then
Exit Do
End If
buf = Dir() 'Dir()は自動的に次の値を吐き出す
Loop
''ファイルの存在チェック
If buf = "" Then
MsgBox buf & vbCrLf & "は存在しません", vbExclamation
Exit Sub
End If
''同名ブックのチェック
For Each wb In Workbooks
If wb.Name = buf Then
MsgBox buf & vbCrLf & "はすでに開いています", vbExclamation
Exit Sub
End If
Next wb
'Excelを開く場合、ユーザーフォームを閉じておかないと開けない
Unload UserForm1
'ファイルを開く
CreateObject("Shell.Application").ShellExecute targetPath & buf
End Sub
outlookの本文をHTMLからプレーンテキスト化する
'失敗例
If oBjMailitem.BodyFormat <> olFormatPlain Then
oBjMailitem.BodyFormat = olFormatPlain
oBjMailitem.Save
End If
'理由:ObjectはPlainテキスト化されるんだけど、やりたいことが達成できてない。やりたいのは、HTML形式を転載したとき冗長な改行だったりの文字列を1行にしたいことなので・・・
'成功例
Link集