約 2,871,203 件
https://w.atwiki.jp/dotcom/pages/21.html
セル内の関数がめちゃくちゃ長くなっちゃって、そのセルをアクティブにしておくと数式バーが複数行にまたがるから、でろーんて下に広がって邪魔でしょうがないのです。 そんなことありません? comはいつものことです。関数未熟者なので長文ご注意。 おかげで数式バーは幅広でいらいら。 なにがいらいらするかって数式バーが2段以上になると列の見出しが見えなくなってしまうのですよ! 今作業している列はどこなのよ!ってわざわざ短い文字しか入っていないところへアクティブセルを変えなくちゃいけない。 面倒です。 メニューバーから変更 ツールバーを作ってボタンで切り替え VBAのショートカットキーで一発切り替え excel2007なら問題は解決していた メニューバーから変更 邪魔ならば「数式バー」を非表示にしちゃえばいいのです。 メニューバーの「表示」>「数式バー(F)」のチェックをはずせば数式バーが消えちゃいます。 チェックを入れればまた戻ってきます。 でもいちいちメニューからなんて面倒なのね。 ツールバーを作ってボタンで切り替え そういう時は「数式バー表示非表示ツールバー」を作っちゃいましょ。 エクセル起動して以下の通りにどうぞ。 メニューバーの「表示」?「ツールバー(T)」>「ユーザー設定(C)...」をクリック 「ユーザー設定」ダイアログの「ツールバー」タブをクリック 「新規作成(N)...」ボタンをクリックして「新しいツールバー」ダイアログでツールバー名を入力(私は「すうしきばー」という名前で設定しました。) 「OK」ボタンクリックすると新しく「すうしきばー」というツールバーができました。 最初は表示にチェックが入っているのでどこかにできているはず。そのツールバーの上に「数式バー」を追加してあげればOK。 「ユーザー設定」ダイアログの「コマンド」タブをクリック 「分類(G) 」リスト内の「表示」をクリック 右の「コマンド(D) 」リスト内に「数式バー」があるのでそれをドロップアンドドラッグで新しい「すうしきばー」の上におきます。 「すうしきばー」に「数式バー(F)」というボタンができたら成功。 これでツールバーのボタンをクリックするだけで数式バーの表示・非表示ができるようになりました。よかったよかった。 VBAのショートカットキーで一発切り替え でもでも。 マウスでツールバーをクリックすることすら面倒な方。comもそのうちの一人。 そんな時はVBAがオススメ。 個人用マクロブックなんかに作ってショートカットキーの設定しておくとすぐ切り替えられていいかも。 こんな感じ。 Sub 数式バー表示切り替え() If Application.DisplayFormulaBar = False Then 数式バーが表示されていない時は表示 Application.DisplayFormulaBar = True Else 数式バーが表示されている時は非表示に Application.DisplayFormulaBar = False End If End Sub 動作確認:Excel2000 Excel2003 ただしツールバーもVBAもセル内容を編集中は動かないので、関数触っている最中には切り替えられないです。むう。それが一番したかったことなんだけどなあ。残念ですはい。 仕様変更で数式バーを一行表示に切り替えなんてオプションできないかしら。 excel2007なら問題は解決していた まいったねこりゃ。 2007だと数式バーは1行のまま、スクロールするバーがついてるそうです。 「数式バーの拡張」機能で1行から3行にすることも。3行になったらシートもその分下がるからセルの1行目が見えないなんていらいらすることもなくなるですね。 参考:http //journal.mycom.co.jp/special/2007/office2007/048.html たまにはびるげいつくんもユーザーの声を反映した機能改善を考えてくれるのねと思った新機能。
https://w.atwiki.jp/test_0th/pages/20.html
Excel: Excel表をらくらく修正!ドラッグで列の順序を入れ替える【知っ得!虎の巻】 - ガジェット通信 SHIFT ドラッグで表の入れ替えできる。カットアンドペーストが楽になる。直観的で分かりやすい。
https://w.atwiki.jp/kojiro/pages/668.html
VBA.MAKE.ADDIN
https://w.atwiki.jp/lmes2/pages/201.html
Excel TIPS ワークブック名をセルに表示-CELL関数・FIND関数・MID関数:Excel エクセルの使い方-関数/計算式-文字列操作 エクセル(Excel)技道場 ワークシート名を表示する関数 Excelファンクラブ 複数あるシートのシート名をあるシートにリストとしてまとめるには?
https://w.atwiki.jp/kplus/pages/83.html
VBAオブジェクトボックス / VBA基本 / VBA関数 概要 VBAは、VisualBasic for Applicationsの略。 Excel5.0(1994年)に付けてリリースしたのが始まりである。 現在ではMicrosoft Office製品であれば、どのソフトでも利用可能です。 Excel、Accessでは常用化されていますが、Word、Powerpoint、Outlookでは 頻度が少なく、またネット上でも資料が少ないためか難度が高めと言われています。 VBAを利用するツールとしてVBE(VBA Editor)がOffice2000から同梱されているので Excel2000以降であればVBAを組むことが簡単に行えます。 ただ実際にVBAでツール作成する場合、様々なアドイン、ライブラリー等を利用する ケースが多くあります。VBAツールを社内配布するなどの場合、相手方の環境に 配慮する必要があるため、バージョン管理が煩雑になったり互換性に右往左往 させられるケースは少なく、環境依存に苦しむ場合があります。 ツール VBAを記述するツールはテキストツールでも構わないのですが、実際に組み込む場合は VBEのみとなります。 変数名などに日本語を利用することが出来ますが、複数名で開発、メンテナンスする場合は 好ましくはありません。 歴史 1994年にExcel5.0に同梱される。 なおVBAそのものの歴史、進化についての詳細は不明だが、 VisualBasicに沿って進化していっているようだ。
https://w.atwiki.jp/keiplus/pages/145.html
VBAワンライナー Excel vba ワンライナー 内容 コード(イミディエイトウィンドウで実施) 備考 シート一覧 For Each i In ThisWorkbook.Sheets debug.print i.name next i -
https://w.atwiki.jp/coraljapan/pages/32.html
2010年07月28日 (水) 10時07分59秒; EXCEL覚え書き EXCEL覚え書きクリックしたセルの色を変更する スクロール位置を先頭に戻す 印刷範囲を可変設定にする 相対パスで指定する ボタンの行位置を知る 自分自身を削除する。 フォルダ内のexcelファイルを検索する(サブフォルダも検索) セルがエラーかどうか調べる ユーザーフォームの表示位置を画面サイズの右側にする 定期的にマクロを実行する ファイルダイアログでファイル名を取得する 指定の表示形式を返す ファイルがあるかどうかチェックする 入力規則である条件では入力できないようにする 処理中にWAITを入れる VBAでファイルコピー、移動 VBAでホームページを開く ユーザーフォームのTextBox1にセットする ユーザーフォームと変数をやり取りする 他のブックのマクロを実行する 既存のブックをコピーする ブックを読み取り専用で開く 別のブックのセルの値を取得する(ユーザフォーム) アクティブなブックを閉じる ブックをアクティブにする ブックを保存する ブックを別名で保存する 他のブックのシートのセルの値を取得(リンク方式) 他のブックのシートのセルの値を取得 開いているブックを見えなくする 指定したブックが開いているか調べる エクセルを終了する 条件が一致したときのみ、コントロールを表示する ユーザーフォームにコンボボックスを作成する 乱数を発生させるマクロ ユーザーフォーム出現位置を設定する 覚えておくと便利なショートカットキーのこと CALL ステートメントと、引数 2つのテキストファイルの比較 テキストファイルの内容をセルに読み込む マクロ 文字列をテキストファイルへ書き出す マクロ 処理実行中のカーソルを砂時計にする セルの値を簡易棒グラフで表示する エクセルで早口言葉? ユーザーフォームのテキストボックス内での制御プロパティ ユーザーフォームのテキストボックス内で改行する。 Format関数 ユーザーフォームをモードレスで表示する ユーザーフォームで簡易プログレスバーをつくる。 DATEVALUE関数とTIMEVALUE関数 YEAR関数 実行中のマクロを強制終了する。 他のシートのセルの内容を取得する マクロ シートがアクティブになったら、指定したマクロを実行する。 曜日まで表示する表示形式設定 シート名一覧を取得するマクロ その2 データの最終行を知る マクロ フォルダのコピー マクロ 文字列の操作 選択したフォルダ内のファイル一覧を取得するマクロ ブックの共有操作のマクロ メッセージボックスのアイコン セル範囲指定で絶対的な座標で指定する メッセージボックスで改行する ステータスバーに表示するマクロ 実行中の自動計算をオフにするマクロ 実行中の画面の更新を無効にする 指定した文字列が含まれる行以外を削除するマクロ 24時間を越える場合のマクロでの記述 アクティブシートの名前を変更するマクロ アクティブブックのシートをコピーするマクロ ワークシートを別のBOOKへ保存するマクロ 「はい」「いいえ」ダイアログを表示するマクロ 複数条件のカウント SUMPRODUCT関数 その2 複数条件のカウント SUMPRODUCT関数 シリアル値から日付データ「年」「月」「日」を取り出す 範囲内の最大値、最小値を求める BOOKを開いたら、マクロを自動で実行する ラベルへジャンプするマクロ アクティブセルの位置を調べるマクロ シートをアクティブにするマクロ ワークブックを開くマクロ アクティブセルの内容を取得するマクロ 指定したセルに値を代入するマクロ 指定範囲内のセルに値を代入するマクロ シート名の一覧を表示するマクロ セルにアクティブシート名を表示する 重複データを削除する 条件にあったものの合計 クリックした図形のセルの色を変えるマクロ セルに時間を記録するマクロ =COUNTIF関数 条件付書式 IF関数 セルのコピー&貼り付け セル内の文字列をリスト形式で選択 クリックしたセルの色を変更する (シート内のModuleに) Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) ActiveSheet.Rows.Interior.ColorIndex = xlNone Rows(Target.Row).Interior.ColorIndex = 15 End Sub (指定した行のみ動作させる) Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If ActiveCell.Row 4 Then Exit Sub ActiveSheet.Rows("4 104").Interior.ColorIndex = xlNone Rows(Target.Row).Interior.ColorIndex = 15 End Sub スクロール位置を先頭に戻す ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollRow = 1 印刷範囲を可変設定にする 1.メニュー>挿入>名前>定義>を選択する。 2.名前定義ダイアログで、Print_Areaを選択する。 3.参照範囲に「=OFFSET($A$1,0,0,COUNTA($A $A),100)」を入力する。 A列のデータ行の数によって、印刷範囲が可変する。 【OFFSET関数】OFFSET(基準, 行数, 列数, 高さ, 幅) 相対パスで指定する 変数 = ThisWorkbook.Path Workbooks.Open (変数 "\..\test.xls") ボタンの行位置を知る bt = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 自分自身を削除する。 Sub test() With ThisWorkbook .Save .ChangeFileAccess Mode =xlReadOnly Kill .FullName .Close (False) End With End Sub フォルダ内のexcelファイルを検索する(サブフォルダも検索) Sub test() フォルダを検索してxlsファイル特定する Dim f, buf As String, cnt As Long, FSO Set FSO = CreateObject("Scripting.FileSystemObject") With Application.FileSearch .NewSearch .Filename = "*.xls" ファイル名 .LookIn = "D \data" フォルダ名 .SearchSubFolders = True サブフォルダも検索する If .Execute() 0 Then For Each f In .FoundFiles path_name = FSO.GetFile(f).ParentFolder パス file_name = FSO.GetFile(f).Name ファイル名 MsgBox path_name "\" file_name Next f End If End With Set FSO = Nothing End Sub セルがエラーかどうか調べる Set rg = Range("A1") If Application.WorksheetFunction.IsError(rg) Then 処理 End If ユーザーフォームの表示位置を画面サイズの右側にする Private Sub UserForm_Activate() Me.Left = Application.Left + Application.Width - Me.Width Me.Top = Application.Top + (Application.Height - Me.Height) / 2 End Sub 定期的にマクロを実行する 1秒ごとにA1に現在時刻を表示 OnTime開始 Sub timer_start() Application.OnTime Now + TimeValue("00 00 01"), "timer_start" Range("A1") = Now() End Sub OnTimeキャンセル Sub timer_stop() On Error Resume Next Application.OnTime Now + TimeValue("00 00 01"), "timer_start", schedule =False End Sub 10秒ごとに10回先まで予約 Sub test() For i = 1 To 10 Application.OnTime Now + TimeValue("00 00 10") * i, "my_Procedure" Next i End Sub Sub my_Procedure() MsgBox "きたー" End Sub ファイルダイアログでファイル名を取得する fname = Application.GetOpenFilename( _ Title ="取り込みファイルの選択") If fname = False Then Exit Sub Msgbox fname End If 指定の表示形式を返す Format(Now(), "yymmdd") ファイルがあるかどうかチェックする Sub filechk strWrk= ここにパス記入 strFile=ここはファイル名 If Dir(strWrk strFil) = "" Then MsgBox("ファイルありません") End If End Sub 入力規則である条件では入力できないようにする A1がバナナか、リンゴか、みかんのときで、なおかつ、B1が食べる以外のときは入力できないようにする。 データの入力規則で、 設定をユーザ定義 数式に、 =OR(AND(A1 "バナナ",A1 "リンゴ",A1 "みかん"),B1="食べる") 処理中にWAITを入れる Application.Wait [NOW()+"0 00 00.01"] 1/100秒停止 VBAでファイルコピー、移動 ファイルコピー Option Explicit Private Const cnsSOUR = "C \AAA\SAMPLE1.txt" 元ファイル Private Const cnsDEST = "C \BBB\SAMPLE2.txt" 先ファイル ファイルコピーのサンプル Sub COPY_SAMPLE() ファイルをコピー FileCopy cnsSOUR, cnsDEST End Sub パスを含めた名前で指定する。 ファイル移動(コピーして元ファイル削除) Option Explicit Private Const cnsSOUR = "C \AAA\SAMPLE1.txt" 元ファイル Private Const cnsDEST = "C \BBB\SAMPLE2.txt" 先ファイル ファイル移動のサンプル② Sub MOVE_SAMPLE2() ファイルをコピー FileCopy cnsSOUR, cnsDEST 元ファイルを削除 Kill cnsSOUR End Sub VBAでホームページを開く Sub Sample() Shell "EXPLORER.EXE http //google.co.jp/" End Sub ユーザーフォームのTextBox1にセットする UserForm1.TextBox1 = "てきすと" ユーザーフォームと変数をやり取りする 標準モジュールの先頭に、呼出し元のプロシージャとユーザフォームで共用したい変数名をPublicでセットします。 Public aaa, bbb Sub test() aaa = 3000 UserForm1.Show vbModeless MsgBox bbb End Sub Private Sub UserForm_Initialize() TextBox1.Text = aaa bbb = 500 End Sub 他のブックのマクロを実行する Application.Run "book1.xls!test" ※引数を渡す場合は、 Application.Run " book1.xls !test",aaa,bbb 例) 元ブック Workbooks.Open Filename =("sample.xls") hiki1 = "りんご" hiki2 = "おいしい" Application.Run "sample.xls!ringo", hiki1, hiki2 先ブック Sub ringo(hiki1, hiki2) With UserForm1 .TextBox1 = hiki1 .TextBox2 = hiki2 .Show End With End Sub 既存のブックをコピーする Sub bkcopy() wp = ThisWorkbook.Path Workbooks.Open Filename =(wp "\aaaa.xlsx"), ReadOnly =True Application.DisplayAlerts = False Workbooks("aaaa.xlsx").Activate ActiveWorkbook.SaveAs Filename =wp "\bbbb.xls" Application.DisplayAlerts = True ActiveWorkbook.Close End Sub ブックを読み取り専用で開く Workbooks.Open Filename =("BBB.xls"), ReadOnly =True 別のブックのセルの値を取得する(ユーザフォーム) Private Sub UserForm_Initialize() wp = ThisWorkbook.Path Workbooks.Open Filename =(wp + "\aaaa"), ReadOnly =True with Workbooks("aaaa.xlsx") msg = .Sheets(1).Range("a1") .Windows(1).Visible = True .Close End with TextBox1 = msg End Sub アクティブなブックを閉じる ActiveWorkbook.Close ブックをアクティブにする Workbooks("sample.xls).Activate ブックを保存する ActiveWorkbook.Save ブックを別名で保存する ActiveWorkbook.SaveAs "Sample.xls" 他のブックのシートのセルの値を取得(リンク方式) Range("a1") = "= " "c \" "[" "サンプル.xls" "]シート1 !" Range("a1") 他のブックのシートのセルの値を取得 Workbooks.Open Filename =("サンプル.xls"), ReadOnly =True Range("a1") = Workbooks("サンプル.xls").Sheets(1).Range("a1") ActiveWorkbook.Close 開いているブックを見えなくする Workbooks("aaaa.xlsx").Windows(1).Visible = False 指定したブックが開いているか調べる Sub Sample15() Dim wb As Workbook, flag As Boolean For Each wb In Workbooks If wb.Name = "Book1.xls" Then flag = True Next wb If flag = True Then MsgBox "開いています。" Else MsgBox "開いていません。" End If End Sub エクセルを終了する Application.Quit 条件が一致したときのみ、コントロールを表示する 例)ComboBox1が"あり"に選択のとき、ComboBox2を表示 Private Sub ComboBox1_Change() If ComboBox1 = "あり" Then ComboBox2.Visible = True Exit Sub End If End Sub ユーザーフォームにコンボボックスを作成する 1.ユーザーフォームにツールボックスからコンボボックスを作成する。 2.Initialize()にコンボボックスの文字列を羅列する。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "リスト1" .AddItem "リスト2" .AddItem "リスト3" .AddItem "リスト4" End With End Sub 乱数を発生させるマクロ Randomize rnd1 = Int(Rnd * 99999999 + 1) ※99999999は0~99999999の乱数 ユーザーフォーム出現位置を設定する Private Sub UserForm_Initialize() Me.StartUpPosition = 0 Me.Left = 20 Me.Top = 10 End Sub 覚えておくと便利なショートカットキーのこと その1 現在日付を入力 〔CTRL〕+〔;〕 その2 現在時刻を入力 〔CTRL〕+〔:〕 その3 関数の引数を表示 〔CTRL〕+〔SHIFT〕+〔A〕 たとえば、数式バーに=IFと入力してから、〔CTRL〕+〔SHIFT〕+〔A〕と押すと、=IF(論理式,真の場合,偽の場合)と表示される。 その4 書式のみのコピペ 〔CTRL〕+〔SHIFT〕+〔C〕書式のみコピー 〔CTRL〕+〔SHIFT〕+〔V〕書式のみペースト CALL ステートメントと、引数 他のマクロを呼び出すときに、変数を受け渡す場合は、以下を参考。 Sub test() Call メッセージ表示("あははは") End Sub Sub メッセージ表示(moji) MsgBox moji End Sub 複数受け渡す場合は、カンマで区切って列挙する。 Sub test() Call メッセージ表示("あははは", "いひひひ", "うふふふ") End Sub Sub メッセージ表示(moji1, moji2, moji3) MsgBox moji1 MsgBox moji2 MsgBox moji3 End Sub 2つのテキストファイルの比較 A.txtとB.txtを行ごとに比較します。 Sub 比較() Dim strREC_A As String Dim strREC_B As String Dim File_A As String Dim File_B As String Dim ForderPass As String Dim CT As Long ForderPass = ThisWorkbook.Path File_A = "\A.txt" File_B = "\B.txt" Open ForderPass File_A For Input As #1 Open ForderPass File_B For Input As #2 CT = 1 st If EOF(1) Or EOF(2) Then GoTo owari End If Line Input #1, strREC_A Line Input #2, strREC_B If strREC_A strREC_B Then MsgBox CT "行目 違う。" vbCrLf strREC_A vbCrLf strREC_B End If CT = CT + 1 GoTo st owari Close #1 Close #2 MsgBox "終了。" End Sub テキストファイルの内容をセルに読み込む マクロ Sub READ_TextFile() Const cnsFILENAME = "\sample.txt" Dim intFF As Integer FreeFile値 Dim strREC As String 読み込んだレコード内容 Dim GYO As Long 収容するセルの行 FreeFile値の取得(以降この値で入出力する) intFF = FreeFile 指定ファイルをOPEN(入力モード) Open ThisWorkbook.Path cnsFILENAME For Input As #intFF GYO = 1 ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) 改行までをレコードとして読み込む Line Input #intFF, strREC 行を加算しA列にレコード内容を表示(先頭は2行目) Cells(GYO, 1).Value = strREC GYO = GYO + 1 Loop 指定ファイルをCLOSE Close #intFF End Sub 文字列をテキストファイルへ書き出す マクロ Sub WRITE_TextFile() Const cnsFILENAME = "\SAMPLE.txt" Dim intFF As Integer FreeFile値 Dim strREC As String 書き出すレコード内容 FreeFile値の取得(以降この値で入出力する) intFF = FreeFile 指定ファイルをOPEN(出力モード) Open ThisWorkbook.Path cnsFILENAME For Output As #intFF 内容をレコードにセット strREC = "test" レコードを出力 Print #intFF, strREC 指定ファイルをCLOSE Close #intFF End Sub 処理実行中のカーソルを砂時計にする Application.Cursor = xlWait 元に戻すには、 Application.Cursor = xlDefault セルの値を簡易棒グラフで表示する 以下の様な表示。 A列にパーセンテージを入力。 B列に■で棒グラフが作成される。 B列の関数 =LEFT("■■■■■■■■■■",TRUNC($A1/0.1)) ※条件書式で、100%を赤く設定してあります。 エクセルで早口言葉? くだらなすぎ。(自爆) http //www29.atwiki.jp/coraljapan/?cmd=upload act=open page=EXCEL%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D file=20080217_hayakuchi.xls ユーザーフォームのテキストボックス内での制御プロパティ SelLength 選択されたテキストの文字数を設定します。 値の取得も可能です。 SelStart 選択されたテキストの開始点を設定します。 値の取得も可能です。テキストが選択されていないときは、 挿入ポインタの位置を示します。 SelText 現在選択されているテキストを含む文字列を設定します。 値の取得も可能です。文字が選択されていないときは、長さ 0 の文字列 ("") を返します。 例)TextBox1.SelStart = 0 カーソル位置を先頭にします。 ユーザーフォームのテキストボックス内で改行する。 EnterKeyBehaviorをTrueに設定します。 MultiLineもTrueに設定しておく必要があります。 Format関数 Format([値],"[書式設定]") 以下は書式設定 カンマ区切り : #,##0 : 1,234 ¥マーク入り : \\#,##0 : \1,234 単位付き : #,##0\円 : 1,234円 小数点桁数の指定 : #,##0,0000 : 1,234.5670 小数点桁数の指定2 : #,##0,0### : 1,234.567 日付の書式 : YYYY/MM/DD HH NN SS : 2002/11/28 10 18 30 YYYYMMDDをYYYY/MM/DD : @@@@/@@/@@ : 20021128- 2002/11/28 西暦を和暦 : GGGEE\年MM\月DD\日 : 2002/11/28- 平成14年11月28日 和暦を西暦 : YYYY\年MM\月DD\日 : 平成14年11月28日- 2002年11月28日 数値を曜日 : AAAA : 1- 日曜日 四半期を返す : Q : 2002/01- 1 郵便番号 : @@@-@@@@ : 2510871- 251-0871 左に0を充填 : 00000 : 123- 00123 左に半角スペースを充填 : @@@@@ : 123- 123 全部大文字 : : abc- ABC 全部小文字 : : ABC- abc 曜日:aaa:2003/01/30 - 木 カンマ区切りで0なら表示しない #,### 1234- 1,234 0- (表示しない) ユーザーフォームをモードレスで表示する UserForm1.Show vbModeless vbModelessをつけると、ユーザーフォームを表示しながら、セルの選択などができます。 ユーザーフォームで簡易プログレスバーをつくる。 1.Visual Basic Editerを開く。Alt+11 2.メニューの挿入→ユーザーフォームを選択して、フォームを新規作成する。 3.ツールボックスの、「ラベル」で以下のようにラベルを2つと、「コマンドボタン」でボタンを一つ作成する。 4.作成したコマンドボタン上で右ボタンを押して、プロパティを表示して、Captionを「OK」に変更する。 5.ユーザーフォームを選択した状態で、F7を押して、コードを表示する。 6.表示されているコードをすべて削除して、以下のコードを入力する。 Private Sub UserForm_Activate() Label2 = "作業中です..." lb = "■" For i = 0 To 100 Label1 = lb DoEvents lb = lb + "■" ここから処理 For w = 1 To 10000 For x = 1 To 100 Next x Next w ここまで処理 Next i CommandButton1.Enabled = True Label2 = "完了しました。" End Sub Private Sub CommandButton1_Click() Unload Me End Sub 7.Visual Basic Editerを閉じる。 8.新規マクロに以下を入力する。 Sub プログレス() UserForm1.Show End Sub 9.マクロ「プログレス」を実行する。 完成データ DATEVALUE関数とTIMEVALUE関数 指定された文字列からシリアル値を求めるものです。 例) TIMEVALUE("6 0 0") DATEVALUE("2008/2/14") YEAR関数 指定した日付の年を返します。 例)YEAR(Now()) 実行中のマクロを強制終了する。 Dos/V機 [CTRL]+[Break(Pause)] PC9800シリーズ [CTRL]+[STOP] 他のシートのセルの内容を取得する マクロ aaa=Worksheets("Sheet1").Range("A1") シートがアクティブになったら、指定したマクロを実行する。 Sub Auto_Open() Sheet1がアクティブになったら「Macro1」マクロ実行 Worksheets("Sheet1").OnSheetActivate = "Macro1" End Sub 曜日まで表示する表示形式設定 yyyy"年"m"月"d"日("aaa")" シート名一覧を取得するマクロ その2 Sub シート一覧() ct = 1 For I = 1 To Sheets.Count shname = Sheets(I).Name Cells(ct, 1) = shname ct = ct + 1 Next End Sub データの最終行を知る マクロ er = Range("A" 65536).End(xlUp).Row フォルダのコピー マクロ c \001の内容を%temp%\書庫へコピーします。 Sub FolderCopy() Dim SourcFolderSpec, DestFolderSpec, TempFolder As String Dim SourcFolder_Object, DestFolder_Object As Object Dim FileNamePath As Variant 環境変数TEMP を取得します TempFolder = Environ("temp") Source Folder をセットします SourcFolderSpec = "c \001" Destination Folder をセットします DestFolderSpec = TempFolder "\書庫" フォルダオブジェクトを取得 Set SourcFolder_Object = CreateObject _ ("Scripting.FileSystemObject").GetFolder(SourcFolderSpec) SourcFolderSpec内の全ファイルをDestFolderSpecにコピー サブフォルダも対象になります SourcFolder_Object.Copy DestFolderSpec MsgBox "完了しました" End Sub 文字列の操作 =LEFT(文字列,[文字数]) :文字列の左端から指定した文字数だけ取り出す。 文字数を省略すると1を指定したことになります(1の時は省略できる)。 =RIGHT(文字列,[文字数]) :文字列の右端から指定した文字数だけ取り出す。 文字数を省略すると1を指定したことになります(1の時は省略できる)。 =MID (文字列,開始位置,文字数) :文字列の指定した位置から指定した文字数だけ取り出す。 =SEARCH(検索文字列,対象,開始位置) 文字列が開始位置から何番目にあるかを返します 英字の大文字と小文字を区別できませんが、ワイルドカード文字を使用できます。 =FIND(検索文字列,対象,開始位置) 文字列が開始位置から何番目にあるかを返します 英字の大文字と小文字を区別できる代わりに、ワイルドカード文字を使用することができません。 選択したフォルダ内のファイル一覧を取得するマクロ Sub ファイルリスト() Dim filename As String ファイル名 Dim DrvDir As String フォルダパス Dim rw As Long 行カウンタ Dim ShellApp As Object ShellApp Dim myFolder As Object フォルダ名 Set ShellApp = CreateObject("Shell.Application") Set myFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) If myFolder Is Nothing Then Exit Sub DrvDir = myFolder.items.Item.Path "\" フォルダパスをセットする With Worksheets("Sheet1") .Range("A2 A65536").ClearContents 表示用のA列をクリア rw = 1 フォルダを検索してファイルとフォルダを特定する filename = Dir(DrvDir "*.*", vbDirectory) While filename "" 順にSheet1に書き出していく rw = rw + 1 .Range("A" rw) = filename filename = Dir(, vbDirectory) Wend End With End Sub ブックの共有操作のマクロ Sub ブックの共有を解除() ブックの共有を解除 Application.DisplayAlerts = False If ActiveWorkbook.MultiUserEditing Then _ ActiveWorkbook.ExclusiveAccess End Sub Sub ブックの共有をする() ブックの共有をする Application.DisplayAlerts = False ActiveWorkbook.KeepChangeHistory = True ActiveWorkbook.SaveAs Filename =ActiveWorkbook.FullName, _ AccessMode =xlShared End Sub メッセージボックスのアイコン vbCritical 警告メッセージ アイコン vbQuestion 問い合わせメッセージ アイコン vbExclamation 注意メッセージ アイコン vbInformation 情報メッセージ アイコン セル範囲指定で絶対的な座標で指定する INDIRECT("A1 A100")) このように設定すると、行が削除されてもA100は変化しない メッセージボックスで改行する MsgBox "これは" vbCrLf "ペンデス" ステータスバーに表示するマクロ Application.StatusBar = "リスト取得中です...(現在 " rw - 3 "件)" 実行中の自動計算をオフにするマクロ Application.Calculation = xlCalculationManual オンに戻すには以下のマクロ Application.Calculation = xlCalculationAutomatic 実行中の画面の更新を無効にする Application.ScreenUpdating = False 有効にするには、FalseをTrueです 指定した文字列が含まれる行以外を削除するマクロ Sub 行削除() Dim Rwe As Long Dim R As Long Dim delname As String delname = InputBox("検索対象を入力してください", "検索") If delname = "" Then MsgBox "検索を中断します", vbInformation, "検索" End End If Rwe = Range("B" 65536).End(xlUp).Row For R = Rwe To 1 Step -1 To 1では、1行目から検索します If Application.CountIf(Rows(R), "*" delname "*") = 0 Then =0 を 0にすると、検索対象がある行を削除します Rows(R).Delete End If Next MsgBox delname " 以外を除去しました", vbInformation, "検索" End Sub 24時間を越える場合のマクロでの記述 Sub 24over() RT = Int(Range("A1") * 24) " " Format(Range("A1"), "nn ss") MsgBox "経過時間は" RT "です。" End Sub アクティブシートの名前を変更するマクロ ActiveSheet.Name = シート名 アクティブブックのシートをコピーするマクロ Sheets("シート名").Copy シート4の後に追加コピー Sheets("シート名").Copy Before =Sheets(4) ワークシートを別のBOOKへ保存するマクロ あらかじめ、Bookと同じディレクトリに書庫というフォルダを作成しておいてください。 Sub 書庫へ保存() yesno = MsgBox("シートを保存します よろしいですか?", vbYesNo + vbQuestion, "進捗度表") If yesno = vbNo Then End End If wpath = ThisWorkbook.Path "\" パスを設定する sheetname = ActiveWorkbook.ActiveSheet.Name シート名を取得する datenow = Format(Now, "yyyymmdd") 日時を設定 savename = wpath datenow "_" sheetname ".xls" ファイル名設定 savename_msg = datenow "_" sheetname ".xls" 表示用ファイル名設定 Sheets(sheetname).Copy シートを新規ブックへコピー ActiveWorkbook.SaveAs Filename =savename 新規ブックを保存する ActiveWorkbook.Close 新規ブックを閉じる Application.DisplayAlerts = False 警告メッセージオフ Worksheets(sheetname).Delete Application.DisplayAlerts = True 警告メッセージオン MsgBox savename_msg vbCrLf "書庫へ保存しました", vbInformation, "シート保存" End Sub 「はい」「いいえ」ダイアログを表示するマクロ Sub 問い合わせ() yesno = MsgBox("シートを保存します よろしいですか?", vbYesNo + vbQuestion, "問い合わせ") If yesno = vbNo Then End End If End Sub 複数条件のカウント SUMPRODUCT関数 その2 =SUMPRODUCT((A1 A10= 初稿 *(MONTH(B1 B10)=3)*(ISNUMBER(FIND("出版",C1 C10))))) A1 A10が初稿で、B1 B10が3月で、C1 C10の文字列に”出版”という文字を含んでいるならカウントする (解説) ISNUMBER(セル番地または計算式) 参照しているセルが数値かどうか調べる。 数値なら TRUE (1) 数値でないなら FALSE (0) FIND(検索文字列,対象,開始位置) 参照しているセルの検索文字列の位置を調べる 含まれない場合は#VALUEとなる。 複数条件のカウント SUMPRODUCT関数 =SUMPRODUCT((A1 A10= 初稿 )*(MONTH(B1 B10)=3)) A1 A10が初稿でB1 B10が3月ならカウントする シリアル値から日付データ「年」「月」「日」を取り出す =YEAR(シリアル値) =MONTH(シリアル値) =DAY(シリアル値) 範囲内の最大値、最小値を求める 範囲内の最大値 =MAX(範囲) 範囲内の最小値 =MIN(範囲) 例) =MAX(A1 A5) =MIN(B1 B5) =MAX(A1 A5)-MIN(B1 B5) BOOKを開いたら、マクロを自動で実行する Sub Auto_Open() MsgBox "自動です" ここに必要な処理を記述します End Sub ラベルへジャンプするマクロ GoTo ラベル ラベル 例) Sub goto001() If ActiveCell.Value = True Then GoTo msg1 End If End msg1 MsgBox "Trueですよ" End Sub アクティブセルの位置を調べるマクロ 行位置 ActiveCell.Row 列位置 ActiveCell.Column シートをアクティブにするマクロ Worksheets("Sheet1").Activate ワークブックを開くマクロ Workbooks.Open Filename =ThisWorkbook.Path "ファイル名.xls" アクティブセルの内容を取得するマクロ bn = ActiveCell.Value 指定したセルに値を代入するマクロ A5に1を代入 Cells(5,1).Value=1 指定範囲内のセルに値を代入するマクロ A1 C5の範囲に1を代入 Range("a1 c5").Value=1 シート名の一覧を表示するマクロ Sub ListSheetsName() Dim objSheet As Object Dim intLoop As Integer intLoop = 1 For Each objSheet In ActiveWorkbook.Sheets Cells(intLoop, 1).Value = objSheet.Name intLoop = intLoop + 1 Next End Sub (補足) Cells(intLoop, 1).Value = objSheet.Name を Cells(intLoop, 1).Value = objSheet.Range("A1") にすると、参照シート内のA1の内容を持ってこれる。 セルにアクティブシート名を表示する =MID(CELL("filename"),FIND("]",CELL("filename"))+1,31) 重複データを削除する (A1セルにフィールド見出し、A2 A10セルに9個のデータが入力されているときに、重複データを削除した新たなリストをC列に作成する例) メニュー[データ]-[フィルタ]-[フィルタオプションの設定]をクリック ↓ [フィルタオプションの設定]ダイアログで [抽出先]欄で[指定した範囲]オプションボタンをOnに [リスト範囲]欄で「A1 A10」セルを [抽出範囲]欄で「C1」セルを [重複するレコードは無視する]チェックボックスをOnに 設定 ↓ [フィルタオプションの設定]ダイアログ-[OK]ボタンをクリック 参考 http //pc.nikkeibp.co.jp/article/NPC/20060214/229243/ サンプル http //www29.atwiki.jp/coraljapan/?cmd=upload act=open page=EXCEL%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D file=%E6%8A%BD%E5%87%BA.xls 条件にあったものの合計 =SUMIF(B1 B4,"りんご",C1 C4) B1~B4のりんごに該当するもののみ、C1~C4の合計を計算 クリックした図形のセルの色を変えるマクロ 以下のマクロを、セル上の図形に登録する。 Sub iro001() Dim button As Range セル位置取得 button Set button = ActiveSheet.Shapes(Application.Caller).TopLeftCell セル位置 0,0の色を変更 With button.Offset(0, 0).Interior .ColorIndex = 10 .Pattern = xlSolid End With End Sub セルに時間を記録するマクロ A2が開始なら、B2に現在時刻を返す。 A2が終了なら、C2に現在時刻を返す。 Sub jikankiroku() If Range("A2").Value = "開始" Then Range("B2") = Now() End If If Range("A2").Value = "終了" Then Range("C2") = Now() End If End Sub =COUNTIF関数 =COUNTIF(A1 A10,"合格") A1~A10までのセルに「合格」が何個存在するか返す。 =COUNTIF(A1 A10,"合格")+COUNTIF(A1 A10,"不合格") とすると、合格+不合格の合計数が何個あるか返す。 条件付書式 セルの内容によって、書式を変化させる。 例)セルの値が”合格”なら、セルパターン=赤色、文字色=白 IF関数 =IF(A1="","",IF(A1 50,"○","×")) A1が空白なら、空白。 空白以外なら、A1 50をチェック。 50以上なら○ 50以下なら×。 セルのコピー&貼り付け セルが別のセルを指している時に そのセルを別の位置にコピーすると、移動した分だけ指していた位置まで移動してしまう。 これを移動させず、指している位置が変わらないままにするには、変えたくない行・列には「$」を前につけて、「$A$1」といった指定をする。 参考http //www.ne.jp/asahi/hishidama/home/tech/excel/cellcopy.html セル内の文字列をリスト形式で選択 1 [▼]を押して選択するためのリストを別の場所に作成。 2 ドロップダウンリストを表示させたいセルを選択して、メニューバー[データ]から[入力規則]をクリック。 3 [設定]タブの[入力値の種類]で[リスト]を選択し、[元の値]に文字カーソルを移します。 4 ドロップダウンリストの元となる、欄外に入力したデータを範囲選択する。 5 [OK]を押す。 参考http //kokoro.kir.jp/excel/nkisoku_list.html
https://w.atwiki.jp/kojiro/pages/667.html
VBA.INSERT.FILE
https://w.atwiki.jp/ipubluedictionary/pages/19.html
困ったら ↓ のURLからMSDNに飛び込もう!! http //msdn.microsoft.com/ja-jp/library/cc348225.aspx 新規でExcelを作成 データの管理について RecordCountプロパティ .ldbファイル リンクファイルのパフォーマンス 新規でExcelを作成 オブジェクトの作成、解放は以下のような感じ Dim xls As Object Set xls = CreateObject("Excel.Sheet") xls.SaveAs "てすと.xls" xls.Application.Quit Set xls = Nothing エクセルのオブジェクト、メソッド、プロパティについては VBA(Excel) を参照の事。 データの管理について DAOを使っている場合での話だが、複数人でデータベースを使用する場合、 フォームやVBAの更新などを行った際に、データの整合性を保つのが結構面倒である。 …というのも、mdbファイルがテーブル・クエリ・フォーム・レポート・マクロとセットに なってしまっていることに起因する。 例えばフォームを更新した場合、他の人がテーブルを更新していた時などはテーブルの インポートを行う必要が出てくる。この作業はかなり面倒かつ整合性が取りづらいものであり、 インポートの際には自分のテーブルを消さないと勝手にインデックスがふられるし、 リレーションも考慮してまとめてインポートしなくてはならないなど厄介極まりない。 なので、いい方法としてはテーブルだけを持っているデータベースと、それ以外のデータベースに分け、 テーブルをリンクする方法が考えられる。こうすることでテーブルは複数のデータベースで共有されるし、 フォームなどの更新もそのままそのmdbファイルを更新するだけでよくなる。 ※リンクテーブルをVBAでオープンする場合、基本的には dbOpenTable で開くことはできない。もし開く場合は OpenDatabase でリンクテーブルが含まれるデータベースをフルパス指定して開き、そこからテーブルを取得する必要がある RecordCountプロパティ RecordCountプロパティはレコードの総数を知るために使うことができるが、 注意しなければならないのは、返す値はあくまでもアクセスされたレコード数という事である。 なので、レコードの総数を取得するには、まず MoveFirst - MoveNext - EOFまでループ という ような形で、全てのデータにアクセスする必要がある。 テーブルにレコードが含まれていない場合はプロパティの値は 0 に設定されるので、判定基準に 使っても大丈夫。 レコードがない状態でMoveNextとかやるとエラーが出るので、レコードの取り扱いは常に EOF, BOFをチェックするのがいいと思われる。 .ldbファイル .mdbファイルと同じ場所に突如として存在する .ldbファイル。 これはロック情報ファイルで、同時アクセスをする際などの情報が含まれているもので、 データの保守などに使われているっぽい。 データベースを開くと勝手に生成され、閉じると自動的に削除されるもののようだ。 なので、データベースを移動するとか人に渡すとかするときに .ldbファイルを渡す必要は ないということだ。 リンクファイルのパフォーマンス リンクテーブルに対するアクセスが重い場合、それを改善するための手段がある。 (とは言っても改善されないこともあるような…) 手段としては、 バックエンドデータベース(テーブルとそれ以外でデータベースを分割したうちのテーブルのほう)のテーブルをデザインビューで開く 表示メニューのプロパティからサブデータシート名プロパティを「なし」にする。 これで改善されるらしい。 VBA側での切り替えもできるらしいが、詳しくはこちら↓ http //support.microsoft.com/kb/261000/JA/
https://w.atwiki.jp/chiffon/pages/6.html
ピボットテーブル作成時のデータ範囲指定のヒント 外部データを取り込んで、更新可能状態の場合、更新時に 変更のあったデータ(行)は追加削除になるようにする。 そのときにピボットの元なるデータは空白以外のセルになるようにする。 (ウィザードによるピボットテーブル作成のときに対象となるデータの あるシートを開いた状態にしておけば自動的に、対象となりそうな 範囲が指定されているのでそのままOKをおして作成するのが吉) こうすればフィールドとなるでーたは元データの書式どおりに 取れてくるので、年月日等でグループ指定する場合に便利。 外部データ取り込み更新で追加になった分の行が増えても ピボット側でその分の範囲をしゅうせいしてくれる?ので こうするほうがいい。完全列指定よりも圧倒的に使いやすくなる。 書いてて死ぬほど分かりにくいなと思った。 VBAでマウスホイールを使えるようにする http //support.microsoft.com/default.aspx?scid=kb;ja;837910 関数