EXCEL VBA 入門
> 自分専用のVBA資料
infoseek MSN livedoor goo Excite MSNオークション 楽天オークション WANTED
|
----------------------------------------------------------------------------------------- ・レンジ表現使用の可不可 別タスクのコールの可不可など ----------------------------------------------------------------------------------------- 1.自シートから別シートをレンジ表現で操作←可能 Sheets("sheet2").Range("A1:A10")="***" 2.モジュールからシートをレンジ表現で操作←可能 Sheets("sheet2").Range("A1:A10")="***" 3.自シートから別シートのタスクをコール←不可(Public指定でも不可) 4.モジュールからシートのタスクをコール←不可(Public指定でも不可) 5.モジュールから別モジュールのタスクをコール←可能(Privateでは不可) ----------------------------------------------------------------------------------------- ・カーソルを「砂時計」に変換 Application.Cursor=xlWait '砂時計ON Application.Cursor=xlDefault '砂時計OFF ----------------------------------------------------------------------------------------- ・ステータスバーへメッセージを表示 cntRec=cntRec+1 Application.StatusBar="処理実行中....(現在 " & cntRec & "件)" ----------------------------------------------------------------------------------------- ・現ワークブックの絶対パスを参照 w=ThisWorkBook.Path ----------------------------------------------------------------------------------------- ・ Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ----------------------------------------------------------------------------------------- ・特定シートのセルのデータを変数へ (1) w=Sheets("入力").Range("L8") (2) w=Worksheets("商品マスタ").Cells(1,9) ----------------------------------------------------------------------------------------- ・特定シートの全クリアー Worksheets("商品マスタ").ClearContents ----------------------------------------------------------------------------------------- ・特定シートへ切り替える Sheets("納品書").Select ----------------------------------------------------------------------------------------- ・特定シートの任意セルにカーソルを移動する Sheets("納品書").Range("A2").Select cells(5,3).select ----------------------------------------------------------------------------------------- ・イベント割込みの許可と不許可 Application.EnableEvents=False '割込NG ****↓↓**** Application.EnableEvents=True '割込OK ****↑↑**** ----------------------------------------------------------------------------------------- ・現セルの行・桁位置を変数へ dim wgyo as long '行 dim wkta as long '桁 wgyo=ActiveCell.Row:wkta=ActiveCell.Column ----------------------------------------------------------------------------------------- ・現在位置セルのデータ ActiveCell.Value ----------------------------------------------------------------------------------------- ・全セルを選択 ActiveSheet.Cells.Select ----------------------------------------------------------------------------------------- ・値・数式クリア Selection.ClearContents ----------------------------------------------------------------------------------------- ・書式クリア Selection.ClearFormats ----------------------------------------------------------------------------------------- ・コメントクリア Selection.ClearComments ----------------------------------------------------------------------------------------- ・値・数式、書式、コメントを一緒にクリア Selection.Clear ----------------------------------------------------------------------------------------- ・シート全クリアー Worksheets("シート名").Cells.ClearContents ----------------------------------------------------------------------------------------- ・範囲指定でのセルをクリアー (1) Sheets("SHEET").Range("A1:A10").Value="" ○(2) Sheets("SHEET").Select:Range("A1:A10").Select:Selection.ClearContents (3) Worksheets("SHEET").Activate:worksheets("SHEET").Cells.ClearContents ※いつも苦労するので完全版(指定シート全消し)のソース例 '================================================================================ function cell_clear(sheet_name as string,w_range as string) 'w_range="Nn:Nn" '================================================================================ dim cell_clear_wk as string cell_clear_wk=ActiveSheet.Name '現シート名を保存 Application.ScreenUpdating=False '画面更新の停止(画面のチラツキをなくす) Worksheets(sheet_name).Activate '指定シートに切換える worksheets(sheet_name).Cells.ClearContents Worksheets(cell_clear_wk).Activate '元のシートに戻す Application.ScreenUpdating=True '画面更新の再開 end function ----------------------------------------------------------------------------------------- ・リストボックス等を開く(閉じる) UserForm1.Show (UserForm1.Hide) ----------------------------------------------------------------------------------------- ・コマンドボタン表示を複数行にする CommandButton1.Caption="コマンド"&Chr$(13)&"の検索" ----------------------------------------------------------------------------------------- ・セルの文字サイズを変える Range("A1").Font.Size=14 ----------------------------------------------------------------------------------------- ・メッセージボックスの表示 (1) Okボタンのみ w1=MsgBox("完了しました",vbInformation,"確認ボックス") (2) Yes or No If MsgBox("処理して良いですか?",vbQuestion+vbYesNo+vbDefaultButton2,"確認ボックス")<>vbYes Then Exit Sub ※ボタンの種類 vbOKOnly (0) [OK]ボタンのみ vbOKCancel (1) [OK]・[キャンセル] vbAbortRetryIgnore (2) [中止]・[再試行]・[無視] vbYesNoCancel (3) [はい]・[いいえ]・[キャンセル] vbYesNo (4) [はい]・[いいえ] vbRetryCancel (5) [再試行]・[キャンセル] ※アイコンの表示 vbCritical (16) 警告メッセージ vbQuestion (32) 問い合わせメッセージ vbExclamation (48) 注意メッセージ vbInformation (64) 情報メッセージ ※標準ボタンの設定 vbDefaultButton1 (0) 第1ボタンが標準ボタン vbDefaultButton2 (256) 第2ボタンが標準ボタン vbDefaultButton3 (512) 第3ボタンが標準ボタン vbDefaultButton4 (768) 第4ボタンが標準ボタン ※その他 モーダルの設定 vbApplicationModal (vbSystemModal) ヘルプ ボタン追加 vbMsgBoxHelpButton 最前面のウィンドウとして表示 VbMsgBoxSetForeground テキストを右寄せ vbMsgBoxRight テキストを右から左の方向で表示 vbMsgBoxRtlReading (更に詳しく) http://vba-excel.seesaa.net/article/129485925.html ----------------------------------------------------------------------------------------- ・ワークシート保護設定 ActiveSheet.Protect '(保護設定) ActiveSheet.Protect Password:="1234" '(保護設定:パスワード付き) ActiveSheet.Unprotect '(保護解除) ActiveSheet.Unprotect Password:="1234" '(保護解除:パスワード付き) ----------------------------------------------------------------------------------------- ・ワークブック保護設定 Activeworkbook.protect '(保護設定) Activeworkbook.protect Password:="1234" '(保護設定:パスワード付き) Activeworkbook.Unprotect '(保護解除) Activeworkbook.Unprotect Password:="1234" '(保護解除:パスワード付き) ※ブック保護を使用する場合のプログラミングトラブル 例えば、Aシートの指定範囲をコピーし、Bシートを再表示しBシートの指定位置にペーストする 場合、Bシート再表示の直前でブック保護を解除する必要があるが指定形式ペーストの手順は × Aシートの指定範囲をコピー → ○ ブック保護を解除 × ブック保護を解除 → ○ Aシートの指定範囲をコピー × Bシートを再表示 → ○ Bシートを再表示 × Bシートの指定位置にペースト → ○ Bシートの指定位置にペースト ----------------------------------------------------------------------------------------- ・カーソルの相対移動 ActiveCell.Offset( 2, 3).Activate '現セルから下へ2行&右へ3列移動 ActiveCell.Offset(-1, 2).Activate '現セルから上へ1行&右へ2列移動 ActiveCell.Offset( 5,-3).Activate '現セルから下へ5行&左へ3列移動 ActiveCell.Offset(-4,-2).Activate '現セルから上へ2行&左へ3列移動 ActiveCell.Offset(5).Activate '現セルから下へ5行移動 ActiveCell.Offset(,-2).Activate '現セルから左へ2列移動 ActiveCell.Offset(0, 1).Select '違う書き方 ----------------------------------------------------------------------------------------- ・カーソルの絶対移動 Range("B4").Select cells(2,3).Select ----------------------------------------------------------------------------------------- ・画面更新の停止と再開 Application.ScreenUpdating=False '画面更新の停止(画面のチラツキをなくす) Application.ScreenUpdating=True '画面更新の再開 ----------------------------------------------------------------------------------------- ・外部プログラムを起動 Shell (パス名,[Windowスタイル]) [] は省略可 スタイル 1/5/9:フォーカスをもった通常のWindow 2 :フォーカスをもちアイコン化されているWindow 3 :フォーカスをもち最大表示されているWindow 4/8 :フォーカスを持たない通常のWindow 6/7 :フォーカスを持たないアイコン化されたWindow ----------------------------------------------------------------------------------------- ・外部プログラムを起動-2 Dim wwww As object set wwww=CreateObject("WScript.Shell") wwww.Run "(コマンド記述)",(状態),(同期) (状態) (値=0) vbHide ウィンドウを非表示にします。 (値=1) vbNormalFocus 通常のウィンドウ、かつ最前面のウィンドウにします。 (値=2) vbMinimizedFocus 最小化、かつ最前面のウィンドウにします。 (値=3) vbMaximizedFocus 最大化、かつ最前面のウィンドウにします。 (値=4) vbNormalNoFocus 通常のウィンドウです。ただし、最前面にはなりません。 (値=6) vbMinimizedNoFocus 最小化します。ただし、最前面にはなりません。 (同期) true :同期する false:同期しない (記述例) チェーンストア手書用より wwww.Run "cmd.exe /c copy /B "+ThisWorkBook.Path+"\print_out.txt "+chr(&h22)+"LPT1:"+chr(&h22),vbHide,true ----------------------------------------------------------------------------------------- ・ファイルの削除 Kill "\temp3.bmp" ←フルパス ----------------------------------------------------------------------------------------- ・スクリプトのキーボード割当て (public sub) Application.OnKey "{(key)}","xxx_pro" ← sub名 (key) ↑{UP} →{RIGHT} ↓{DOWN} ←{LEFT} BackSpace {BACKSPACE} or {BS} CapsLock {CAPSLOCK} Clear {CLEAR} ^Break {BREAK} Delete {DELETE} or {DEL} End {END} Enter {RETURN} Enter(テンキー) {ENTER} Esc {ESCAPE} or {ESC} F1-F15 {F1} - {F15} Help {HELP} Home {HOME} Ins {INSERT} NumLock {NUMLOCK} PageDown {PGDN} PageUp {PGUP} Return {RETURN} ScrollLock {SCROLLLOCK} Tab {TAB} (shift他) Shift + Ctrl ^ Alt % (使用例) ・次の使用例は、InsertProc を Ctrl + + キーに、SpecialPrintProc を Shift + Ctrl + →キーに登録します。 Application.OnKey "^{+}", "InsertProc" Application.OnKey "+^{RIGHT}", "SpecialPrintProc" ・次の使用例は、Shift + Ctrl + →キーを通常の機能に戻します。 Application.OnKey "+^{RIGHT}" ・次の使用例は、Shift + Ctrl + →キーを無効にします。 Application.OnKey "+^{RIGHT}", "" ----------------------------------------------------------------------------------------- ・現在の範囲指定に同じ文字を入れる Range(Selection.Address)="1" ----------------------------------------------------------------------------------------- ・<***1秒後に消え去るメッセージボックス***最小が1秒> CreateObject("Wscript.Shell").popup "メッセージ",1,"タイトル" ----------------------------------------------------------------------------------------- ・ Declare Function MessageBoxTimeoutA Lib "user32" ( _ ByVal hWnd As Long, ByVal lpText As String _ , ByVal lpCaption As String, ByVal uType As Long _ , ByVal wLanguageId As Long, ByVal dwMilliseconds As Long _ ) As Long Function spbox(title As String,msg As String,t1000 As Long) MessageBoxTimeoutA 0&, msg, title, vbMsgBoxSetForeground, 0, t1000 End Function ----------------------------------------------------------------------------------------- ・ストリング変換(strconv) w=strconv(w,スイッチ):スイッチは以下の数値の合計数で表現する vbUpperCase ( 1) 文字列を大文字に変換 vbLowerCase ( 2) 文字列を小文字に変換 vbProperCase ( 3) 文字列の各単語の先頭の文字を大文字に変換します。 vbWide ( 4) 文字列内の半角文字を全角文字に変換 vbNarrow ( 8) 文字列内の全角文字を半角文字に変換 vbKatakana ( 16) 文字列内のひらがなをカタカナに変換 vbHiragana ( 32) 文字列内のカタカナをひらがなに変換 vbUnicode ( 64) システムの既定のコードページを使って文字列をUnicodeに変換 vbFromUnicode (128) 文字列をUnicodeからシステムの既定のコードページに変換 ----------------------------------------------------------------------------------------- ・エクセルの強制終了 Application.DisplayAlerts=False これが有れば強制終了 Application.Quit これだけなら普通の終了(直前に保存ボックスが開く) ----------------------------------------------------------------------------------------- ・エクセルの上書き保存(強制) ThisWorkbook.Save ----------------------------------------------------------------------------------------- ・保護シートをVBAから操作可能にする Worksheets("入力").Protect UserInterfaceOnly:=True ----------------------------------------------------------------------------------------- ・範囲指定の位置を取得 1.行位置 開始行 = Selection.Row 終了行 = 開始行 + Selection.Rows.Count - 1 2.列位置 開始列 = Selection.Column 終了列 = 開始列 + Selection.Column.Count - 1 ----------------------------------------------------------------------------------------- ・セル単位でのロック(保護)操作 Cells(y,x).Locked=False 'ロック解除 Cells(y,x).Locked=True 'ロック設定 ----------------------------------------------------------------------------------------- ・範囲名の削除法 [挿入]-[名前]-[定義]で削除 ----------------------------------------------------------------------------------------- ・エラーなどで死んでしまった割込み機能を復活させる Application.EnableEvents=True ----------------------------------------------------------------------------------------- ・現在のアクティブブック名を得る ファイル名=Application.ThisWorkbook.Name (例) Book1 ----------------------------------------------------------------------------------------- ・現在のアクティブシート名を得る ActiveSheet.Name (例) 入力シート ----------------------------------------------------------------------------------------- ・エクセルがインストールされているフォルダ名 Application.Path (例) C:\Program Files\Microsoft Office\OFFICE11 ----------------------------------------------------------------------------------------- ・カレントフォルダ名 curdir (例) C:\Documents and Settings\OWNER\My Documents のこと ----------------------------------------------------------------------------------------- ・コンピュータのユーザー名の取得 Object.UserName (例) Dim PcUserName As String Dim WshNetworkObject As IWshRuntimeLibrary.WshNetwork Set WshNetworkObject=New IWshRuntimeLibrary.WshNetwork PcUserName=WshNetworkObject.UserName ※「Windows Script Host Object Model」を参照設定しておく ----------------------------------------------------------------------------------------- ・ Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long ' Function GetMyComputerName() As String Dim strCmptrNameBuff As String*21 GetComputerName strCmptrNameBuff,Len(strCmptrNameBuff) GetMyComputerName=Left$(strCmptrNameBuff,InStr(strCmptrNameBuff,vbNullChar)-1) End Function ----------------------------------------------------------------------------------------- ・行/列の非表示と再表示 Rows("4:5").EntireRow.Hidden=True '行の非表示 Rows("3:6").EntireRow.Hidden=False '行の再表示 Columns("E:F").EntireColumn.Hidden=True '列の非表示 Columns("D:G").EntireColumn.Hidden=False '列の再表示 ----------------------------------------------------------------------------------------- ・ファイルのコピー FileCopy "c:\test.dat","c:\aaa\test.dat" ----------------------------------------------------------------------------------------- ・宣言していない変数を未定義エラーとして扱う Option Explicit ----------------------------------------------------------------------------------------- ・[Ctrl]+[セルクリック]でセル間データを入換える処理(各シートイベントで必要) '============================================================ Private Sub Worksheet_SelectionChange(ByVal Target As Range) '============================================================ Dim gsub_Rng As Range Dim gsub_M as variant If Selection.Count<>2 Then Exit Sub gsub_M=ActiveCell.Value For Each gsub_Rng In Selection If gsub_Rng.Address<>ActiveCell.Address Then ActiveCell.Value=gsub_Rng.Value:gsub_Rng.Value=gsub_M Next gsub_Rng End Sub ----------------------------------------------------------------------------------------- ・ Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long ----------------------------------------------------------------------------------------- ・ Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long,ByVal dwDuration As Long) As Long ※この処理を使用する場合は、通常の「Beep命令」は使用できない ----------------------------------------------------------------------------------------- ・画面スクロール ActiveWindow.LargeScroll Down:=1,ToRight:=2,Up:=(-1),ToLeft:=(-2) '画面単位 ActiveWindow.SmallScroll Down:=1,ToRight:=2,Up:=(-1),ToLeft:=(-2) '行単位 ※セルG9が左上にくるようにワークシートをスクロール With ActiveWindow .ScrollRow=9 .ScrollColumn=7 End With ----------------------------------------------------------------------------------------- ・計算モード(高速化) Application.Calculation=xlManual '計算を手動モードにする Application.Calculation=xlAutomatic '計算を自動モードに戻す ----------------------------------------------------------------------------------------- ・セル内部の計算式を書き換える Cells(1,1).Formula="=B2+666" Cells(1,1).Formula="=" & chr(34) & "ABC" & chr(34) & "&" & chr(34) & "DEF" & chr(34) '<--- chr(34)=ダブルクォート ----------------------------------------------------------------------------------------- ・セル内部の計算式を取込む Dim w As String w=Cells(1,1).Formula ※書式を文字列に変更すれば、セルにも出せる Cells(1,10).NumberFormatLocal="@" Cells(i,10)=Cells(1,1).Formula ----------------------------------------------------------------------------------------- ・スクロール範囲の設定 ActiveSheet.ScrollArea="$A$1:$L$30" Worksheets("入力").ScrollArea="$A$1:$L$30" Worksheets("入力").ScrollArea="" 'スクロール範囲の設定を解除 ----------------------------------------------------------------------------------------- ・フォルダ名の変更 Name "C:\data" As "C:\new_data" ----------------------------------------------------------------------------------------- ・エラー情報の消去 err.clear ----------------------------------------------------------------------------------------- ・フォルダの作成 mkdir (フルパスのフォルダ名) ----------------------------------------------------------------------------------------- ・チェンジ割込みイベント 先頭での処置 if Target.Address<>"$M$9" then exit sub '単一セルで判断 If Intersect(Target, Range("M9:M108")) Is Nothing Then Exit Sub '範囲で判断 ----------------------------------------------------------------------------------------- ・シートを非表示/再表示 Worksheets("Sheet").Visible=xlHidden '非表示 Worksheets("Sheet").Visible=xlSheetVisible '再表示 ----------------------------------------------------------------------------------------- ・カーソルの移動方向を変える Application.MoveAfterReturnDirection=xldown 'xlToLeft(左) xlToRight(右) xlUp(上) xlDown(下) ----------------------------------------------------------------------------------------- ・左端/上端の行列番号のフォントを変更するダイアログの表示 Application.Dialogs(xlDialogFont).Show を実行 ----------------------------------------------------------------------------------------- ・ユーザーフォームの [X] を非表示にする 「タイムカード集計」init_word.bas 参照 ----------------------------------------------------------------------------------------- ・行を「表示しない」に設定 rows("4:999").EntireRow.Hidden=true (false で「表示する」) rows("6").EntireRow.Hidden=true (6行目を表示しない) ----------------------------------------------------------------------------------------- ・エクセルシートの左肩の絶対座標 Activewindow.PointsToScreenPixelsX(0) '座標(X) Activewindow.PointsToScreenPixelsY(0) '座標(Y) ----------------------------------------------------------------------------------------- ・セルの位置ほか cells(1,1).Top cells(1,1).Left cells(1,1).Width cells(1,1).Height ----------------------------------------------------------------------------------------- ・cells 使用の範囲指定方法 Range(Cells(1,1),Cells(100,100)).Value=1 など ----------------------------------------------------------------------------------------- ・Shell関数による「電卓」や「メモ帳」の起動 Sub test() Dim ReturnValue ReturnValue = Shell("CALC.EXE",1) '*** アプリケーション名 (1=windowstyle) *** AppActivate ReturnValue End Sub 電卓 : CALC.EXE メモ帳 : NOTEPAD.EXE ※windowstyle(省略時[2]に設定される) 0:(vbHide) フォーカス有りで非表示 1:(vbNormalFocus) フォーカス有りで元のサイズと位置に復元 ← 使い良い 2:(vbMinimizedFocus) フォーカス有りで最小化表示 3:(vbMaximizedFocus) フォーカス有りで最大化表示 4:(vbNormalNoFocus) フォーカス無しで最後に閉じたときのサイズと位置に復元 6:(vbMinimizedNoFocus) フォーカス無しで最小化表示 ※停止方法 SendKeys "%{F4}",True ----------------------------------------------------------------------------------------- ・ツールバーの ON/OFF Application.CommandBars("**ツールバーの名称**").Visible=True '表示(ON) Application.CommandBars("**ツールバーの名称**").Visible=False '非表示(OFF) ・ツールバーの名称 標準 "Standard" 書式設定 "Formatting" [ウォッチ]ウィンドウ 不明 3-Dの設定 "3-D Settings" Visual Basic "Visual Basic" Web "Web" グラフ "Chart" グラフメニューバー "Chart Menu Bar" コントロールツールボックス "Control Toolbox" チェック/コメント "Reviewing" デザインモードの終了 "Exit Design Mode" ビボットテーブル "PivotTable" フォーム "Forms" リスト 不明 ワークシートメニューバー "Worksheet Menu Bar" ワークシート分析 "Auditing" ワードアート "WordArt" 影の設定 "Shadow Settings" 外部データ "External Data" 記録終了 "Stop Recording" 罫線 不明 循環参照 "Circular Reference" 図 "Picture" 図形描画 "Drawing" 図表 不明 全画面表示 "Full Screen" 組織図 不明 読み上げ 不明 描画キャンバス 不明 並べて比較 不明 保護 不明 クリップボード "Clipboard" ----------------------------------------------------------------------------------------- ・OSの名前とバージョン Application.OperatingSystem ----------------------------------------------------------------------------------------- ・アクティブシートのみを「xls」出力 ActiveWorkBook.SaveAs Filename:="****.xls" ActiveWorkBook.Close (?) ----------------------------------------------------------------------------------------- ・シートの表示/非表示設定 Worksheets("シート名").Visible=xlSheetVisible '表示 Worksheets("シート名").Visible=xlHidden '非表示 ----------------------------------------------------------------------------------------- ・メールの送信(システム標準メーラー起動) Sub mail_send_test() Dim sAddr As String Dim sBody As String Dim sSubj As String Dim sComd As String sAddr="dts@sec123.com" sSubj="これは件名" sBody="ここから本文"+"%0D%0A"+ _ "改行は、[0D] [0A] "+"%0D%0A"+ _ "以上"+"%0D%0A"+ "%0D%0A" sComd="Mailto:" & sAddr & "?Subject=" & sSubj & "&body=" & sBody CreateObject("WScript.Shell").Run sComd End Sub ----------------------------------------------------------------------------------------- ・範囲名の設定を変更(入力規則使用時によく使う) activeworkbook.names("範囲名").refersto="=シート!$A$1:$A$100" '[$] 必要 ----------------------------------------------------------------------------------------- ・固体番号の取得 (2003/2007/2010) Sub test001() dim w_Service as object dim w_items as object dim w_obj as object Const w_fix=&H30 Set w_Service=GetObject("winmgmts:\\.\root\CIMV2") Set w_items =w_Service.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct","WQL",w_fix) For Each w_obj In w_items Debug.Print "IdentifyingNumber: " & trim(w_obj.IdentifyingNumber) Debug.Print "Name: " & trim(w_obj.Name) Debug.Print "UUID: " & trim(w_obj.UUID) Debug.Print "Vendor: " & trim(w_obj.Vendor) Debug.Print "Version: " & trim(w_obj.Version) Next End Sub '(実行結果) ' IdentifyingNumber: YK8B123456 ' Name: PRIMERGY ' UUID: F4493637-AD39-DE11-A847-0019995C63E8 <--- 2007:all[F] ' Vendor: FUJITSU-SV ' Version: GS01 確実な固体番号としては、上の5データを連結すれば良い ----------------------------------------------------------------------------------------- ・エクセルバージョンの取得 Application.Version 12.0=(2007) 11.0=(2003) 10.0=(2002) 9.0=(2000) ----------------------------------------------------------------------------------------- ・保護のプロパティ (チェック=True) [初期値] [False] AllowFormattingCells セルの書式設定 [False] AllowFormattingColumns 列の書式設定 [False] AllowFormattingRows 行の書式設定 [False] AllowInsertingColumns 列の挿入 [False] AllowInsertingRows 行の挿入 [False] AllowInsertingHyperlinks ハイパーリンクの挿入 [False] AllowDeletingColumns 列の削除 [False] AllowDeletingRows 行の削除 [False] AllowSorting 並べ替え [False] AllowFiltering オートフィルタの使用 [False] AllowUsingPivotTables ピボットテーブル レポートを使用する [True] Contents オブジェクトの編集(逆) [True] Scenarios シナリオの編集(逆) [False] DrawingObjects 描画オブジェクトの編集 [False] UserInterfaceOnly VBAマクロからの変更 ActiveSheet.EnableSelection=(xlNoSelection,xlUnlockedCells,xlNoRestrictions) 1.xlNoSelection :すべてのセルを選択禁止 2.xlUnlockedCells :Lockedプロパティが Falseのセルに限り選択可能 3.xlNoRestrictions :どのセルの選択も可能 ----------------------------------------------------------------------------------------- ・文字色を設定(ColorIndex 使用) Range("A1").Font.ColorIndex = 1 cells(10,10).Font.ColorIndex = 1 (1:黒 2:白 3:赤 4:明るい緑 5:青 6:明るい黄色 7:マゼンタ 8:シアン 9:茶 10:緑 11:紺 12:うぐいす) ----------------------------------------------------------------------------------------- ・文字色を設定(Color 使用) Range("A1").Font.Color = &HFFF Range("A1").Font.Color = RGB(0,255,0) (Color=16進数またはRGB関数の戻り値) ----------------------------------------------------------------------------------------- ・セル色を設定(ColorIndex 使用) Cells(1,1).Interior.ColorIndex=0 ----------------------------------------------------------------------------------------- ・参考資料 マクロをマクロで削除する方法 マクロ削除を手動で削除するのでなくて、マクロをマクロで削除する方法を以下に示します。 前条件 1. Microsoft Visual Basic Application Extensibility の参照設定が必要 (VBEのウィンドウメニューのツール(T)の参照設定(R)から)。 2. EXCEL2003のマクロセキュリティの設定で『Visual Basic プロジェクトへのアクセスの信頼する』をチェックする (Excelウィンドウのツール(T)->マクロ->セキュリティ(S)->信頼できる発行元タグの一番下)。 ※実ソース(自らを含めてモジュールが全て消去される) Dim objVBCOMPO As Object For Each objVBCOMPO In ActiveWorkbook.VBProject.VBComponents With objVBCOMPO.CodeModule If .CountOfLines <> 0 Then .DeleteLines 1, .CountOfLines End With If (objVBCOMPO.Type = vbext_ct_StdModule Or objVBCOMPO.Type = vbext_ct_MSForm) Then ActiveWorkbook.VBProject.VBComponents.Remove objVBCOMPO End If Next objVBCOMPO Set objVBCOMPO = Nothing ※空の標準モジュールが削除されない場合がある(原因は不明) ----------------------------------------------------------------------------------------- ・参考資料 マクロから(VBA/VBE)を操作する 〔外部ファイル内ソースモジュールをインポート〕 With ActiveWorkbook.VBProject .VBComponents.Remove .VBComponents("Module12") End With Workbooks("Book2.xls").VBProject.VBComponents.Import Filename 〔テストOKの処理-川井〕 With ActiveWorkbook.VBProject .VBComponents.Remove .VBComponents("TEST2") End With >自モジュールの"TEST2"が消去された ActiveWorkbook.VBProject.VBComponents.Import "TEST.bas" >"TEST" というモジュールが生成された。( TEST.bas は、カレントフォルダに存在) >既に、"TEST"というモジュールが存在する場合は、"TEST1"→"TEST2" と番号が自動付与される >[Microsoft Visual Basic Application Extensibility] の参照設定は不必要だった >上記により、外部ファイルからの [モジュール] の入換えは可能になる >[フォーム] をエクスポートすれば [*.frm] と [*.frx] の2ファイルが生成される、 >インポートする際のファイル名は [*.frm] のみで良い >[クラス] は、[*.cls] >シートに保護を掛けてこの処理を行うとエラーになる(VBA操作可で保護を掛けるとOK) >※注意※ [k茶] で蓋を掛けるとエラーになる >※注意※ VBA保護を掛けるとエラーになる 〔シート・モジュール単位でエクスポート〕使う必要あるのか????? Dim VBC With ActiveWorkbook.VBProject For Each VBC In .VBComponents If VBC.Type = 1 And _ VBC.CodeModule.CountOfDeclarationLines <> VBC.CodeModule.CountOfLines Then VBC.Export "C:\temp\" & VBC.Name & ".bas" End If Next VBC End With ' VBC.Type : 100=シート 1=モジュール ' VBC.CodeModule.CountOfDeclarationLines : ? ' VBC.CodeModule.CountOfLines Then : 行数 ----------------------------------------------------------------------------------------- ・参考資料 ByRef と ByVal の区別(デフォルトは、ByRef になっている) ByRef : 参照渡し : 呼び出し先で変数の変更があれば、自プロシジャ内でも変更されている(影響を受ける) ByVal : 値渡し : 呼び出し先で変数の変更があっても、自プロシジャ内では変更されていない(影響を受けない) ※単純に引数を与えて結果を得るだけであれば「ByVal」が無難である ※複数の引数に加工を加えた結果が欲しい場合は「ByRef」の必要がある ----------------------------------------------------------------------------------------- ・フォルダ選択ダイアログソース sub test() Dim xlAPP As Application Set xlAPP=Application ' InputBoxでフォルダ指定を受ける strPATHNAME=xlAPP.InputBox("参照するフォルダ名を入力して下さい。",cnsTITLE,"C:\") If StrConv(w,vbUpperCase)="FALSE" Then Exit Sub end sub ----------------------------------------------------------------------------------------- ・指定セルの内容の判別方法 ソース if Range("A1").HasFormula then debug.print "数式です" else if IsNumeric(Range("A1").Value) then debug.print "数値です" else debug.print "文字列です" end if end if ----------------------------------------------------------------------------------------- ・データの存在するセルの最終を求める(要テスト) ActiveSheet.UsedRange.End(xlToRight).Column '最終列 ActiveSheet.UsedRange.End(xlDown).Row '最終行 ActiveSheet.UsedRange.Column '最左列 ActiveSheet.UsedRange.Row '開始行 Range("A5").End(xlDown).Row '指定セルから最終行を求める Range("A5").End(xlToRight).Column '指定セルから最終列を求める ----------------------------------------------------------------------------------------- ・全シート名のリスト ソース Dim ws As Worksheet For Each ws In Worksheets Cells(ws.Index,1)=ws.Name Next ----------------------------------------------------------------------------------------- ・メニューバーの ON/OFF 一覧表示のソース Application.CommandBars("Worksheet Menu Bar").Enabled=true '(false=off) ※当処理は、エクセルに対する設定なので一度設定を変更すると反映され続けるので処理の終わりには「もとに戻す」配慮が必要です。 ----------------------------------------------------------------------------------------- ・ツールバーの ON/OFF Application.CommandBars("ツールバー名称[Standardなど]").Visible=True '(false=off) Sub GetCommandbarInfo() Dim AppCmdBar As CommandBar Dim i As Integer i = 0 For Each AppCmdBar In Application.CommandBars i = i + 1 Sheet1.Cells(i,1)=AppCmdBar.Index 'インデックス番号の取得 Sheet1.Cells(i,2)=AppCmdBar.Name 'コマンドバーの名前の取得 Sheet1.Cells(i,4)=AppCmdBar.Visible 'コマンドバーのON/OFF Select Case AppCmdBar.Type 'コマンドバーの種類の取得 Case 0 Sheet1.Cells(i,3)="ツールバー" Case 1 Sheet1.Cells(i,3)="メニューバー" Case 2 Sheet1.Cells(i,3)="ポップアップ" End Select Next AppCmdBar End Sub ※現在のコマンドバーの(ON/OFF)状態は、同じく (.Visible=True/false) で判断できる。 ※当処理は、エクセルに対する設定なので一度設定を変更すると反映され続けるので処理の終わりには「もとに戻す」配慮が必要です。 ----------------------------------------------------------------------------------------- ・ショートカットメニューバー ON/OFF Application.CommandBars("ショートカットメニューバー名称").Enabled=True '(false=off) ※当処理は、エクセルに対する設定なので一度設定を変更すると反映され続けるので処理の終わりには「もとに戻す」配慮が必要です。 ----------------------------------------------------------------------------------------- ・Application.Volatile とは FUnction 内に使用する >ユーザー定義関数を自動再計算関数にする >"ture" は省略可能 >Volatileメソッドを入れない標準状態だと「自動で再計算を行わない」関数になる ----------------------------------------------------------------------------------------- ・[Excel] 関数(特記事項) =EOMONTH(開始日,月) 開始日から、指定した月数だけ前または後の月末の日付を得る (Exp.) =EOMONTH("2011/10/1",2) <--- 2011年12月 の末日が得られる =EOMONTH("2011/10/1",0) <--- 2011年10月 の末日が得られる |







