入力されたIDに対応した文字列を表示するVBAでメッセージ仕様書を作成
あるセルにKeyとなる値が入力されたときに、そのKeyに対応したデータを隣のセルに代入させるVBA。メッセージ仕様書でメッセージIDを入力したらメッセージをとってきてくれるのがほしかったので作成。
Changeイベントを使えば、セルの値が変わったときに、そのセルの情報を受け取ることができる。
例 Private Sub Worksheet_Change(ByVal Target As Range)
‘Columnが1の場合に処理を実行する
If Target.Column = 1 Then
‘入力されたKeyを取得
Key = Target.Value
‘Keyによって代入値を変える
If Key = “藤原” Then
Msg = “名前が入力されたみたい”
Else
Msg = “それ以外みたい”
End If
‘Tragetの隣のCellに代入
Cells(Target.Row, Target.Column + 1) = Msg
End If
End Sub
確認メッセージを出す
処理を続行するかどうかの確認を行い、「はい」を選択した時に処理を続行。「いいえ」を選択した時は何も実行しない。
ソース ‘続行の確認を行う
Sub 処理続行確認メッセージ()
Dim Style
Dim Response
Style = vbYesNo + vbInformation + vbDefaultButton2
Response = MsgBox(“続行しますか?”, Style, “確認”)
If Response = vbNo Then
End
End If
End Sub
VBAでページ番号をつける
指定したエクセルファイルのページごとに通番をつけていくマクロ。複数のファイルに連番をつけたい時はこのマクロを使えばいい。
その他応用も可能なのでテンプレートに使用できる。
このマクロができること
ページ付与機能 ページ整形機能 ソース一部抜粋 ‘連番で複数ファイルにページ番号を付与する
‘分類を利用して作成しておく
Sub ページ番号付与実行()
Application.DisplayAlerts = False
処理続行確認メッセージ
Dim RowNum As Integer
Dim TotalPageNum As Integer
TotalPageNum = 0
‘設定シート読込みループ
For RowNum = 5 To ActiveSheet.Cells.SpecialCells(xlLastCell).Row
‘設定取得
エクセル文書整形設定取得 (RowNum)
If FilePath = “” Then
MsgBox “おわったよー”, vbInformation, “終了”
Exit For
End If
Dim IsChange As Boolean
IsChange = False
If ClassA <> ClassABefore Or ClassB <> ClassBBefore Then
‘大分類、中分類が変わった時
IsChange = True
If StartNum <> [...]
ファイル読み込みVBA
例ではCSVファイルを1行ずつ読み込み、Excelのシートに挿入していく。
データは「”」で囲われているため、ダブルクォーテーション削除処理が必要になる。
ソース Dim Row
Dim ImportFile
Open ImportFile For Input As #1
Row = 11
‘読み込む
Do While Not EOF(1)
‘1行読込
Line Input #1, LineStr
LineArray = Split(LineStr, “,”)
‘タイトル
ActiveWorkbook.Sheets(1).Cells(Row, 1).Value = “・” & ダブルクォーテーション削除(LineArray(4))
‘開始予定日?終了予定日
ActiveWorkbook.Sheets(1).Cells(Row, 2).Value = Format(LineArray(6), “mm/dd”) & “?” & Format(LineArray(7), “mm/dd”)
‘開始日?終了日
ActiveWorkbook.Sheets(1).Cells(Row, 3).Value = Format(LineArray(8), “mm/dd”) & “?” & Format(LineArray(9), “mm/dd”)
Row = Row + 1
Loop
Close #1
ファイル作成マクロ
シートに書かれた内容のファイルを作成する。
下のソースではセル区切りのファイルを作成する。
ソース Function ファイル作成(FilePath, FileName, SheetName, OutputFileName)
Dim fs
Dim Row
Dim Col
Dim EndRow
Dim EndCol
Dim Content
Row = 1
EndRow = Workbooks(FileName).Sheets(SheetName).Cells.SpecialCells(xlCellTypeLastCell).Row
EndCol = Workbooks(FileName).Sheets(SheetName).Cells.SpecialCells(xlCellTypeLastCell).Column
Dim OutputPath
OutputPath = FilePath
Set fs = CreateObject(“Scripting.FileSystemObject”)
If Not fs.FolderExists(OutputPath) Then
‘出力フォルダがない場合
MkDir (OutputPath)
End If
Open OutputPath & “\” & OutputFileName For Output As #1 ‘ファイル番号1で新規作成
‘行ループ
Do While True
If EndRow + 1 = Row Then
Exit [...]
VBAでデータ検索
ある列の中から検索を行う関数。
エラー処理をいれないと、Fildで見つからなかった場合に落ちてしまうので注意。セルが見つかれば、RowとColumnやValueを取得することができる。
Private Function GetTargetRow(Key)
On Error GoTo エラー処理
‘A列を検索する
GetTargetRow = ThisWorkbook.Sheets(“シート1″).Columns(“A:A”).Find(What:=Key).Row
On Error GoTo 0
Exit Function
エラー処理:
MsgBox “Keyを確認してください。Keyに対応するメッセージがありません。”
On Error GoTo 0
End Function 追記:VLOOKUP関数でよくね??
ダブルクォーテーション削除VBA
CSVファイルを読み込み「”」でデータが囲われている場合に削除する。
ソース Function ダブルクォーテーション削除(Str)
ダブルクォーテーション削除 = Mid(Str, 2, Len(Str) – 2)
End Function
Accessでエクスポートしたデータの整形VBA
AccessからエクスポートしたデータはExcelで開くと日付表示のフォーマットが異なってしまう。なので、そのままインポートすると「時分秒」部分がうまくインポートできない。
また、大きい数値などが浮動小数点表示されてしまうため、これもうまくインポートできない場合がある。
データ整形のマクロ
このマクロによって、指定したファイルの整形を行う。
日付行幅オートフィット 日付フォーマット変換 数値変換 行幅オートフィット(コメント化してある) 折り返して表示変換(コメント化してある) ソース(一部抜粋) Sub エクスポートデータ整形()
Application.DisplayAlerts = False
処理続行確認メッセージ
Dim RowNum As Integer
Dim TotalPageNum As Integer
TotalPageNum = 0
‘設定シート読込みループ
For RowNum = 2 To ActiveSheet.Cells.SpecialCells(xlLastCell).Row
‘設定取得
設定取得 (RowNum)
If FilePath = “” Then
MsgBox “おわったよー”, vbInformation, “終了”
Exit Sub
End If
Workbooks.Open Filename:=FilePath
Worksheets(1).Activate
‘シート選択
Dim W As Worksheet
For Each W In Worksheets
W.Select
エクスポートデータ整形実行
[...]
XMLを作成するVBA
XMLのテストデータを作成しなければならなくなって、いいツールがなかったので作ってみた。要素名を書いて、要素の値の型とかフォーマットとか指定すれば、それにそったXMLファイルを作成する。
Excel2002で作成したが、そんなに凝ったことせずに、「うおーーー!」と作ったので、大体のバージョンで動くはず。
Excelファイル簡易比較VBA
2ファイルを比較し、変更のあったセルの色を変更する。比較元となるファイルには何も行わない。
ソース(一部抜粋) Sub エクセルファイル比較実行()
処理続行確認メッセージ
初期設定
Application.DisplayAlerts = False
Dim ConfRowNum
ConfRowNum = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
Dim RowNum
For RowNum = 2 To ConfRowNum
設定取得 (RowNum)
Dim FileName1
Dim FileName2
Dim SheetCount1
Dim SheetCount2
Workbooks.Open Filename:=FilePath1
FileName1 = ActiveWorkbook.Name
Workbooks.Open Filename:=FilePath2
FileName2 = ActiveWorkbook.Name
SheetCount1 = Workbooks(FileName1).Worksheets.Count
SheetCount2 = Workbooks(FileName2).Worksheets.Count
Dim SheetNum
SheetNum = 1
Do While SheetNum <= SheetCount1 And SheetNum <= SheetCount2
Dim MaxRow
Accessのテーブル一覧を削除するVBA
仕事ではOracleを使うことが多いのだが、テスト工程にはいるとAccessを使うこともある。これはGUIで簡単にレコードを見れるというのがすんばらしいからだろう。
で、テーブルのリンクをODBCから吸い込んでテーブルの表示欄にテーブルリンクをインポートするんだけど、このリンクって複数選択して削除?というのができないのだ。
これがとても不便で、接続先を変えるときなんて「Delete」>「Enter」の連打連打連打。こういうことをやってると、人間なんだから一度にポチっと削除したくなるのがエンジニアたるもの。
そこで、テーブルリンク一覧を削除するコードをVBAで作ってみた。「めんどくさい」ときにちょこっとマクロやバッチをかける人間とかけない人間の差はでかい。
ポイントはDaoでテーブル一覧を取得するというもの。SQLで「Select * from MSysObjects」ってやればわかるんだけど、テーブル情報にもいろいろあって、Accessで使うものもあるので、すべて削除はできない。よって、リンクを判断してやればいいんだけど、そこまでは調べられなかったので、Accessで使うテーブル以外を削除する方法をとった。
マクロなりOnClickイベントなりで呼び出すとよいね。
‘————————————————————
‘[ツール]-[参照設定]にて「Microsoft DAO 3.6 Object Library」
‘にチェックをつけてください
‘————————————————————
‘全テーブルを削除します。
‘————————————————————
Function DeleteTable()
Dim tbls As DAO.TableDefs
Dim tbl As DAO.TableDef
‘テーブル一覧取得
Set tbls = CurrentDb.TableDefs
Dim Cnt, i
Cnt = 0
Dim TableNames(500) ‘ひとまず500テーブルまでとする
Dim DelName
For Each tbl In tbls
‘システムテーブルを削除しようとするとエラーになる
‘MSysではじまる名前のテーブルはシステムテーブルなので
‘それを判定して削除対象を決める
If InStr(1, tbl.Name, “MSys”, vbBinaryCompare) = 0 Then
TableNames(Cnt) = tbl.Name
Cnt = Cnt + 1
End If
Next
For i = 0 To Cnt – 1
‘テーブル削除
[...]
Accessでインポートとエクスポート
インポートしてみよう
まずオブジェクトから「マクロ」を選択してマクロの画面を開きます。
次に「新規作成」ボタンを押下してマクロを新しく作ります。
アクション欄には「やりたいこと」を記入します(条件を指定することもできます)。今回はエクセルからのインポートを行うので「ワークシート変換」を選択します。テキストからのインポートは「テキスト変換」を選びます。
画面下部分に詳細設定が表示されるので、インポートの詳細設定を行います。画像の設定だと以下のようになっています。
読み込むファイルはエクセル インポートするテーブルは「TEST_TABLE」 読み込むファイルの場所は「C\imp\test_table.xls」 一行目をフィールド名として判定する
作成したマクロを保存すると、マクロ画面に作成したマクロが表示されます。これをダブルクリックすれば、マクロが起動します。
インポートなどは、元のデータを変更するため、マクロ実行のはじめのアクションとして「確認ダイヤログ」を表示するなどすれば安全です。
VBAで作成しているモジュール クエリのエクスポートができる CSVとXLSファイルに対応
エクスポート用VBA Function エクスポート(TableName As String)
‘設定
Dim DirPath
DirPath = “C:\access\”
Dim QueryName
QueryName = “クエリ_” & TableName
On Error GoTo エクスポート_Err
Dim OutputType
OutputType = Form_メインフォーム.出力形式フレーム.Value
If OutputType = 1 Then
‘エクスポート CSV版
Dim CSVFullPath
CSVFullPath = DirPath & TableName & “.csv”
DoCmd.TransferText acExportDelim, “”, QueryName, CSVFullPath, True, “”
ElseIf OutputType = 2 Then
‘エクスポート Excel版
Dim ExcelFullPath
僕について
Dai Fujihara
A hero can be anyone.
藤原大はマネージャでありアジャイル実践者だ。そして、プロジェクトリーダー、チェンジ・エージェント、アジャイルコーチ、トレーナーでもある。彼はまたRedmine、Jenkinsといった開発を支援するツール環境の整備や、アジャイル開発を活用した創造的なソフトウェア開発の支援を行っている。さらに、趣味は沖縄離島巡りらしい。
ここ最近の人気
アジャイルコミュニティは超めんどうくさい… 976 view(s)
3年使ったRedmineの使い方について共有したい10の… 573 view(s)
チームとタワーを創造せよ!マシュマロチャレンジでチームビ… 306 view(s)
Javaで入力チェックに使える正規表現まとめ… 208 view(s)
Redmineプラグイン開発 – 史上最高のチームプラグ… 157 view(s)
開発ツールを使うと「思いやり」が減る(前半) #swat… 125 view(s)
開発ツールを使うと「思いやり」が減る(後半) #swat… 118 view(s)
Redmineプラグイン開発 – パーキングロットチャー… 100 view(s)
DAOとかDTOとかVOとかEntityとか… 92 view(s)
LinkStationのようなNASを買ってもバックアッ… 92 view(s)
永久保存の本
Jonathan Rasmusson (著), 西村 直人 (翻訳), 角谷 信太郎 (翻訳)
アジャイルサムライ―それはソフトウェアを顧客に届ける猛々しきプロフェッショナルだ。本書では、圧倒的なアジャイルプロジェクトの姿を見せる。2011年爆発的にヒットしたアジャイル開発に情熱を持つエンジニアに届けたい本。
Mike Cohn (著), マイク コーン (著), 安井 力 (翻訳), 角谷 信太郎 (翻訳)
採用した現在のタイトルは、見積りや計画づくりといったプロセスを、アジャイルに進めなければならないと謳っているのだ。見積りと計画づくりがアジャイルでないのに、プロジェクトがアジャイルであるということはありえない。(イントロダクションより)
Venkat Subramaniam (著), Andy Hunt (著), 木下 史彦 (監訳), 角谷 信太郎 (監訳)
アジャイルな習慣とは一体何なのか?本書ではプラクティスを交えながら、その姿勢を読者に問いかけている。世代や役割をこえて色褪せない「アジャイル」に対する良書。Amazonレビュー
メアリー・ポッペンディーク (著), トム・ポッペンディーク (著), 高嶋 優子 (翻訳), 天野 勝 (翻訳), 平鍋 健児 (翻訳)
「トヨタ生産方式」を源流にする「リーン開発」をソフトウエア開発に取り入れるための具体的方法を紹介した本です。本書は、リーンの7大原則を「価値」「ムダ」「スピード」「人」「知識」「品質」「パートナー」に整理し、ソフト開発現場にどうしたら効果的に適用できるかを、多くの実例を交えながら具体的に説明します。
タグ
Agile ant Apache bash Eclipse GlassFish install Java Javascript kobo Linux log4j Management Maven Open Source PHP Pukiwiki Python Redmine Ruby Ruby on Rails Scrum Spring Struts Struts2 Subversion Test Tomcat Trac VBA Web WebDriver WebLogic Windows WordPress 働く 勉強会 嫁(ベータ) 思い出し笑う 我思う 旅する 映画/ドラマ 英語を話す 読むと聞く 過去を語るアーカイブ









