最近、仕事でちょっとしたことのためにExcel VBAで作業していました。2週間くらいでしょうか。そもそもBasicをいじるのが久しぶりという感じでしたが、何とかなりました。
参考資料執筆諸氏に感謝します。
いくつか自分なりに見つけたテクニックをメモしておきます。順番は……適当です。しいて言えば作ったプログラムの展開順。
ファイルを保存する直前に何かを実行する
VBAでThisWorkbookに書き込む
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' ファイルを開いたら直ちに行われる動作 '……以下コード。
あるプローシージャの中に場所を特定してラベルを貼り、処理によって飛び先を変える
N88 Basic言語で言うところの行番号的に用いることができる。
If〜Thenや、Goto命令でその場所にジャンプできる。Thenで飛びたいときはGotoを省略できるのもN88 Basicと同じ。
If ほげほげの条件のとき Then Label_A '---それ以外の時の処理…… Label_A: '……以下コード。
画面表示率を変更する
ActiveWindow.Zoom = 84 '画面拡大率%
半角英数モードにする
' ----IMEを解除し半角英数直接入力にする---- If IMEStatus = vbIMEModeOn Then SendKeys "{kanji}", True '[半角/全角]キー End If
はい・いいえをダイアログボックスで選択し、処理を分岐する
Dim HogehogeSuru As Integer HogehogeSuru = MsgBox("ほげほげしますか?", vbYesNo) Select Case HogehogeSuru Case vbYes '「はい」の処理 Case vbNo '「いいえ」の処理 Case Else '「それ以外」の処理 End Select
文章中に改行があるダイアログを表示
MsgBox("この国では" & vbCrLf & "人民の" & vbCrLf & "人民による" & vbCrLf & "人民のための" & vbCrLf & "政治を実現していると" & vbCrLf & "思っていますか?" , vbYesNo)
処理しているときの画面をいちいち表示するかどうか
Application.ScreenUpdating = False '画面描画オフ Application.ScreenUpdating = True '画面描画オン
確認ダイアログボックス表示非表示を切り替える。
Application.DisplayAlerts = False '確認メッセージ表示オフ Application.DisplayAlerts = True '確認メッセージ表示オン
行の高さ・列の幅を引き締める
Rows(1)とは1行目になる。2行目であればRows(2)。
Columns(1)とはA列になる。B列であればColumns(2)。数字で書くので書き方に注意。
' 行の高さを引き締める Rows(1).EntireRow.AutoFit ' 列の幅を引き締める Columns(1).EntireColumn.AutoFit
その瞬間の日付と秒数のシート名を付ける
ActiveSheet.Name = Format(Now, "yyyy年M月d日(aaa) h時mm分ss秒")
印刷範囲をいつも同じものに設定する
たとえば、A1からG20までをA4横で設定、用紙の中央に配置するとき
'---用紙設定A4横、余白少なめ、紙一枚に合わせる、引き伸ばしOK--- ActiveSheet.PageSetup.PrintArea = "$A$1:$G$20" With ActiveSheet.PageSetup .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 600 .CenterHorizontally = True .CenterVertically = True .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = xlPrintErrorsDisplayed .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = False .ScaleWithDocHeaderFooter = True .AlignMarginsHeaderFooter = True End With
データの空き行を探して、見つけ次第何かの処理を始める
Dim AkiRow As Integer For AkiRow = 1 To 30 '30行まで数えればOKとわかっている場合 If Cells(AkiRow, 1).Value = "" Then Exit For Next AkiRow '---以下、処理内容を書く---