'==========(標準モジュール)======================
Option Explicit
'+------------------------------------------------------------------------------
'| 共通変数
'| 参照設定:Microsoft Activex Data Object X.X Library が必要
'+------------------------------------------------------------------------------
Public Ps_Host As String 'ホスト
Public Ps_Sid As String 'SID
Public Ps_User As String 'ユーザ-
Public Ps_Pass As String 'パスワード
Public OraCn As ADODB.Connection 'コネクション
Public OraRs As ADODB.Recordset 'レコードセット
Public ErrMsg As String 'エラーメッセージ
'+------------------------------------------------------------------------------
'| 処理名 :ボタン「TABLE」
'+------------------------------------------------------------------------------
Sub テーブル一覧()
On Error GoTo Err_Han
ErrMsg = ""
' 画面固定
Application.ScreenUpdating = False
Application.Speech.Speak "TABLE LISTING"
' データベース接続
Call PS_DbConn
If ErrMsg <> "" Then GoTo TBL_END
Dim stSQL As String
Dim iRow As String
' データ取得SQL編集
stSQL = "select table_name from user_tables"
If UserForm1.TextBox1.Text <> "" Then
UserForm1.TextBox1.Text = StrConv(UserForm1.TextBox1.Text, vbUpperCase)
stSQL = stSQL & " where table_name like '%" & UserForm1.TextBox1.Text & "%'"
End If
' VIEWも対象としない場合以下をコメント
stSQL = stSQL & " union select view_name as table_name from user_views"
If UserForm1.TextBox1.Text <> "" Then
UserForm1.TextBox1.Text = StrConv(UserForm1.TextBox1.Text, vbUpperCase)
stSQL = stSQL & " where view_name like '%" & UserForm1.TextBox1.Text & "%'"
End If
' テーブル名順に整列
stSQL = stSQL & " order by table_name"
' 項目リストクリア
Worksheets("COLUMN").Select
Range(Range("A2:E2"), Selection.End(xlDown)).ClearContents
' テーブルリストクリア
Worksheets("TBL").Select
Range(Range("A2:C2"), Selection.End(xlDown)).ClearContents
' データを取得(レコードセットオプション:読み取り専用)
Set OraRs = OraCn.Execute(stSQL)
Worksheets("TBL").Range("A2").CopyFromRecordset OraRs
' リストボックス範囲の変更
iRow = Cells(Rows.Count, 1).End(xlUp).Row
If iRow < 2 Then iRow = 2
Application.Names("テーブル一覧").RefersTo = "=TBL!$A$2:$A$" & iRow
Worksheets("TBL").Range("A1").Select
TBL_END:
' データベース接続切断(NO COMMIT)
Call PS_DbDisConn(False)
' 画面固定解除
Application.ScreenUpdating = True
If ErrMsg <> "" Then
MsgBox ErrMsg
Exit Sub
End If
Unload UserForm1
UserForm1.Show
Exit Sub
Err_Han:
If ErrMsg = "" Then
ErrMsg = Err.Description
End If
GoTo TBL_END
End Sub
'+------------------------------------------------------------------------------
'| 処理名 :ボタン「COLUMN」
'+------------------------------------------------------------------------------
Sub 項目一覧()
On Error GoTo Err_Han
ErrMsg = ""
If UserForm1.ListBox1.Value = "" Then
Application.Speech.Speak "You don't select tables"
MsgBox "テーブルが選択されていません!"
Err.Raise 0
Exit Sub
End If
' 画面固定
Application.ScreenUpdating = False
Application.Speech.Speak "COLUMN LISTING"
' データベース接続
Call PS_DbConn
If ErrMsg <> "" Then GoTo ITEM_END
Dim stSQL As String
Dim iRow As Integer: iRow = 1
Dim i As Integer
Dim j As Integer: j = 0
Dim k As Integer: k = 0
Dim stTblNo As String: stTblNo = ""
' 選択ありを数え、マークする
For i = 0 To UserForm1.ListBox1.ListCount - 1
If UserForm1.ListBox1.Selected(i) Then
j = j + 1
Worksheets("TBL").Cells(i + 2, 2).Value = 1 'FLG ON
Else
Worksheets("TBL").Cells(i + 2, 2).Value = "" 'FLG OFF
End If
Next i
' 項目リストクリア
Worksheets("COLUMN").Select
Application.Goto Reference:="項目一覧"
Selection.ClearContents
For i = 0 To UserForm1.ListBox1.ListCount - 1
If UserForm1.ListBox1.Selected(i) Then
If j > 1 Then '複数テーブル選択か?
k = k + 1
stTblNo = "T" & k & "."
End If
' データ取得SQL編集
' stSQL = "select '" & stTblNo & "' || column_name,data_type,data_length,data_precision,data_scale"
' stSQL = stSQL & " from user_tab_columns"
' stSQL = stSQL & " where table_name = '" & UserForm1.ListBox1.List(i) & "'"
' stSQL = stSQL & " order by column_id"
' データ取得SQL編集(↓ユーザー指定型)…user_tab_columnsで、複数の同名テーブルを引いてくる場合の改良型
stSQL = "select '" & stTblNo & "' || column_name,data_type,data_length,data_precision,data_scale"
stSQL = stSQL & " from all_tab_columns"
stSQL = stSQL & " where table_name = '" & UserForm1.ListBox1.List(i) & "'"
stSQL = stSQL & " and upper(owner) = '" & UCase(Ps_User) & "'" '←スキーマ名
stSQL = stSQL & " order by column_id"
' データを取得(レコードセットオプション:読み取り専用)
Set OraRs = OraCn.Execute(stSQL)
Worksheets("COLUMN").Range("A" & iRow + 1).CopyFromRecordset OraRs
iRow = Cells(Rows.Count, 1).End(xlUp).Row
End If
Next i
If iRow < 2 Then iRow = 2
' 数字項目の場合、整数部・小数部を項目長にする
For i = 2 To iRow
If Worksheets("COLUMN").Cells(i, 4).Value <> "" Then
Worksheets("COLUMN").Cells(i, 3).Value = Worksheets("COLUMN").Cells(i, 4).Value _
& "," & Worksheets("COLUMN").Cells(i, 5).Value
End If
Next i
' リストボックス範囲の変更
Application.Names("項目一覧").RefersTo = "=COLUMN!$A$2:$E$" & iRow
Worksheets("COLUMN").Range("A2").Select
ITEM_END:
' データベース接続切断(NO COMMIT)
Call PS_DbDisConn(False)
' 画面固定解除
Application.ScreenUpdating = True
If ErrMsg <> "" Then
MsgBox ErrMsg
Exit Sub
End If
Unload UserForm1
UserForm1.Show
Exit Sub
Err_Han:
If ErrMsg = "" Then
ErrMsg = Err.Description
End If
GoTo ITEM_END
End Sub
'+------------------------------------------------------------------------------
'| 処理名 :ボタン「SQL実行」
'+------------------------------------------------------------------------------
Sub SQL実行()
On Error GoTo Err_Han
ErrMsg = ""
If UserForm1.TextBox2.Text = "" Then
Application.Speech.Speak "You don't set SQL"
MsgBox "SQLが設定されていません!"
Err.Raise 0
Exit Sub
End If
Dim stSQL As String
Dim i As Integer
' 画面固定
Application.ScreenUpdating = False
' データ取得SQL編集
stSQL = UserForm1.TextBox2.Text
If InStr(stSQL, "WHERE") = 0 And _
InStr(stSQL, "UPDATE") = 0 And _
InStr(stSQL, "INSERT") = 0 Then
stSQL = StrConv(stSQL, vbUpperCase)
End If
' データベース接続
Call PS_DbConn
If ErrMsg <> "" Then GoTo DATA_END
If Left(stSQL, 6) = "SELECT" Then
' データを取得(レコードセットオプション:読み取り専用)
Application.Speech.Speak "SELECT EXECUTE"
Set OraRs = OraCn.Execute(stSQL)
Else
Application.Speech.Speak "UPDATE EXECUTE"
OraCn.Execute (stSQL)
GoTo HIST_ADD
End If
' データシートクリア
Worksheets("DATA").Select
Cells.Clear
' 項目名展開
For i = 0 To OraRs.Fields.Count - 1
Worksheets("DATA").Cells(1, i + 1).Value = OraRs.Fields(i).Name
Select Case OraRs.Fields(i).Type
Case adChar
Worksheets("DATA").Cells(2, i + 1).Value = "CHAR"
Case adVarChar
Worksheets("DATA").Cells(2, i + 1).Value = "VARCHAR2"
Case adNumeric
Worksheets("DATA").Cells(2, i + 1).Value = "NUMBER"
Case adDate, adDBDate, adDBTime, adDBTimeStamp
Worksheets("DATA").Cells(2, i + 1).Value = "DATE"
Case Else
Worksheets("DATA").Cells(2, i + 1).Value = OraRs.Fields(i).Type
End Select
Next i
Rows("1:2").Interior.ColorIndex = 36
' データ展開
Application.StatusBar = "データ展開中"
Worksheets("DATA").Range("A3").CopyFromRecordset OraRs
If Cells(Rows.Count, 1).Value <> "" Then
Call CSV出力処理
End If
Application.StatusBar = False
HIST_ADD:
' 履歴追加
Worksheets("HIST").Select
Worksheets("HIST").Rows(1).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
stSQL = Replace(stSQL, vbNewLine & " " & vbNewLine, vbNewLine)
stSQL = Replace(stSQL, vbNewLine & vbNewLine, vbNewLine)
Worksheets("HIST").Cells(1, 1).Value = Trim(stSQL)
Worksheets("HIST").Cells(1, 2).Value = Ps_Host
Worksheets("HIST").Cells(1, 3).Value = Ps_Sid
Worksheets("HIST").Cells(1, 4).Value = Ps_User
' リストボックス範囲の維持(変えない)
Application.Names("実行履歴").RefersTo = "=HIST!$A$1:$A$20"
' データシート表示
ActiveWindow.WindowState = xlNormal
Worksheets("DATA").Select
Worksheets("DATA").Range("A1").Select
DATA_END:
' データベース接続切断
Select Case Left(stSQL, 6)
Case "UPDATE", "DELETE", "INSERT"
Call PS_DbDisConn(True)
Case Else
Call PS_DbDisConn(False)
End Select
' 画面固定解除
Application.ScreenUpdating = True
If ErrMsg <> "" Then
MsgBox ErrMsg
Exit Sub
End If
If Left(stSQL, 6) = "SELECT" Then
UserForm1.Hide
Else
Unload UserForm1
UserForm1.TextBox2.Text = stSQL
UserForm1.Show
End If
Exit Sub
Err_Han:
If ErrMsg = "" Then
ErrMsg = Err.Description
End If
GoTo DATA_END
End Sub
'+------------------------------------------------------------------------------
'| 処理名 :ボタン「SAVE」
'+------------------------------------------------------------------------------
Sub データセーブ()
Dim FileName As Variant
FileName = Application.GetSaveAsFilename("DATA.xls", "Excel ブック(*.xls),1")
If FileName <> False Then 'ダイアログでキャンセルを選ぶとFALSEで抜ける
Sheets("DATA").Copy
ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:=xlExcel8, _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWindow.Close
End If
End Sub
'+------------------------------------------------------------------------------
'| 処理名 :CSV出力処理
'+------------------------------------------------------------------------------
Sub CSV出力処理()
Application.Speech.Speak "Do You want to write a CSV file?"
If MsgBox("検索件数がシート行限界に達しました" & vbNewLine & _
"CSVに出力しますか?", vbYesNo) = vbNo Then Exit Sub
Dim FileName As Variant
FileName = Application.GetSaveAsFilename("DATA.csv", "CSV ファィル(*.csv),1")
If FileName = False Then Exit Sub 'ダイアログでキャンセルを選ぶとFALSEで抜ける
Dim outFF As Integer ' FreeFile値
Dim Buf As String: Buf = ""
Dim i As Integer
Dim j As Long: j = 0
outFF = FreeFile
Open FileName For Output As #outFF
For i = 0 To OraRs.Fields.Count - 1
If i > 0 Then Buf = Buf & ","
Buf = Buf & OraRs.Fields(i).Name
Next i
Print #outFF, Buf
OraRs.MoveFirst
Do While Not OraRs.EOF
If OraRs.Fields(0).Type = adNumeric Then
Buf = OraRs.Fields(0).Value
Else
Buf = """" & OraRs.Fields(0).Value & """"
End If
For i = 1 To OraRs.Fields.Count - 1
If OraRs.Fields(i).Type = adNumeric Then
Buf = Buf & "," & OraRs.Fields(i).Value
Else
Buf = Buf & ",""" & OraRs.Fields(i).Value & """"
End If
Next i
Print #outFF, Buf
j = j + 1
If j = Int(j / 100) * 100 Then
Application.StatusBar = "CSV RECORD(現在 " & j & "件目)"
End If
OraRs.MoveNext
Loop
Close #outFF
Application.Speech.Speak "A CSV file writing is completed"
MsgBox FileName & vbNewLine & "に " & j & " 件出力しました"
Application.StatusBar = False
End Sub
'+------------------------------------------------------------------------------
'| 処理名 :データベース接続
'| 処理内容 :データベースに接続する
'| 引数 :なし
'| 返値 :なし
'| 備考 :実行時エラーは上位処理でハンドル
'+------------------------------------------------------------------------------
Private Sub PS_DbConn()
On Error GoTo Err_Han
Dim i As Integer
' 共通変数・ホスト、ユーザ、パスワードのいずれかに入力がない場合
If Ps_Host = "" Or Ps_Sid = "" Or Ps_User = "" Or Ps_Pass = "" Then
i = 2
Do While Worksheets("USER").Cells(i, 1).Value <> ""
If UserForm1.ComboBox1.Value = Worksheets("USER").Cells(i, 1).Value Then
Ps_Host = Worksheets("USER").Cells(i, 2).Value 'ホスト
Ps_Sid = Worksheets("USER").Cells(i, 3).Value 'SID
Ps_User = Worksheets("USER").Cells(i, 4).Value 'ユーザ-
Ps_Pass = Worksheets("USER").Cells(i, 5).Value 'パスワード
Exit Do
End If
i = i + 1
Loop
If Ps_Host = "" Or Ps_Sid = "" Or Ps_User = "" Or Ps_Pass = "" Then
ErrMsg = "USERシートにORACLE接続情報が設定されていません"
' 実行時エラーを発生させる
Err.Raise 0
Exit Sub
End If
End If
' ORACLE接続
Set OraCn = CreateObject("ADODB.Connection")
OraCn.Open "Provider=MSDAORA;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=" & _
"(PROTOCOL=TCP)(HOST=" & Ps_Host & ")(PORT = 1521)))" & _
"(CONNECT_DATA=(SID=" & Ps_Sid & ")));", Ps_User, Ps_Pass
' トランザクションの開始
OraCn.BeginTrans
Exit Sub
Err_Han:
ErrMsg = "ORACLE接続が失敗しました"
Err.Raise 0
Exit Sub
End Sub
'+------------------------------------------------------------------------------
'| 処理名 :データベース切断
'| 処理内容 :データベース接続を切断する
'| 引数 :(1) (I) Boolean トランザクション処理フラグ
'| True=Commitする,False=ロールバックする
'| 返値 :なし
'+------------------------------------------------------------------------------
Public Sub PS_DbDisConn(pb_Set As Boolean)
If ErrMsg <> "" Then Exit Sub
On Error Resume Next '実行時エラーを無視
' トランザクション処理フラグ=Trueの場合
If True = pb_Set Then
OraCn.CommitTrans 'トランザクションをコミットする
' トランザクション処理フラグ=Falseの場合
Else
OraCn.Rollback 'トランザクションをロールバックする
End If
' オブジェクト消去
OraRs.Close
Set OraRs = Nothing
OraCn.Close
Set OraCn = Nothing
On Error GoTo 0 '実行時エラーハンドリングリセット
End Sub
' 引数 SheetName のシートが実際にあるかチェックする
Function ExistSheet(SheetName) As Boolean
Dim i As Integer
ExistSheet = False
For i = 1 To Sheets.Count
If StrConv(Sheets(i).Name, vbUpperCase) = StrConv(SheetName, vbUpperCase) Then
ExistSheet = True
Exit For
End If
Next i
End Function
'+------------------------------------------------------------------------------
'| 処理名 :環境設定
'+------------------------------------------------------------------------------
' シート未設定時(初回のみ)手動実行
Sub 初期シート設定()
Dim NewWorkSheet As Worksheet
Const CFont As String = "HGゴシックM" ' 任意のフォントを設定(お好きなフォント)
If ExistSheet("DATA") = False Then
Set NewWorkSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count)) '-- シートが無ければ追加する
NewWorkSheet.Name = "DATA"
Cells.Select
Selection.Font.Name = CFont
Range("A1").Select
Set NewWorkSheet = Nothing
End If
If ExistSheet("USER") = False Then
Set NewWorkSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count)) '-- シートが無ければ追加する
NewWorkSheet.Name = "USER"
Cells.Select
Selection.Font.Name = CFont
Cells(1, 1).Value = "接続先" ' 見出し(識別名)-- 任意の名称
Cells(1, 2).Value = "ホスト" ' Data Source HOST =
Cells(1, 3).Value = "SID" ' Data Source CONNECT_DATA=SID =
Cells(1, 4).Value = "ユーザー" ' oracle user
Cells(1, 5).Value = "パスワード" ' oracle password
Cells(2, 5).NumberFormatLocal = "**;**;**;**"
Cells(1, 7).Value = "選択idx" ' 選択記録用(次回表示時も選択を継続)
Cells(2, 7).Value = 0 ' 先頭が0(初期値)
Range("A2:E2").Select
ActiveWorkbook.Names.Add Name:="接続一覧", RefersTo:="=USER!$A$2:$E$2"
ActiveWorkbook.Names("接続一覧").Comment = "ORACLEの接続情報をコンボボックスに表示する"
Range("A1").Select
Set NewWorkSheet = Nothing
End If
If ExistSheet("TBL") = False Then
Set NewWorkSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count)) '-- シートが無ければ追加する
NewWorkSheet.Name = "TBL"
Cells.Select
Selection.Font.Name = CFont
Cells(1, 1).Value = "TABLE_NAME" ' 見出し
Range("A2:A2").Select
ActiveWorkbook.Names.Add Name:="テーブル一覧", RefersTo:="=TBL!$A$2:$A$2"
ActiveWorkbook.Names("テーブル一覧").Comment = "テーブル一覧情報をリストボックスに表示する"
Range("A1").Select
Set NewWorkSheet = Nothing
End If
If ExistSheet("COLUMN") = False Then
Set NewWorkSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count)) '-- シートが無ければ追加する
NewWorkSheet.Name = "COLUMN"
Cells.Select
Selection.Font.Name = CFont
Cells(1, 1).Value = "COLUMN_NAME" ' 見出し(項目名)
Cells(1, 2).Value = "TYPE" ' 見出し(データタイプ)
Cells(1, 3).Value = "LENGTH" ' 見出し(項目長、但し数字は編集置換する)
Cells(1, 4).Value = "PRECISION" ' 見出し(数字、整数部)
Cells(1, 5).Value = "SCALE" ' 見出し(数字、小数部)
Range("A2:C2").Select
ActiveWorkbook.Names.Add Name:="項目一覧", RefersTo:="=COLUMN!$A$2:$C$2"
ActiveWorkbook.Names("項目一覧").Comment = "項目一覧情報をリストボックスに表示する"
Range("A1").Select
Set NewWorkSheet = Nothing
End If
If ExistSheet("HIST") = False Then
Set NewWorkSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count)) '-- シートが無ければ追加する
NewWorkSheet.Name = "HIST"
Cells.Select
Selection.Font.Name = CFont
Range("A2:A20").Select
ActiveWorkbook.Names.Add Name:="実行履歴", RefersTo:="=HIST!$A$2:$A$20"
ActiveWorkbook.Names("実行履歴").Comment = "実行履歴をリストボックスに表示する"
Range("A1").Select
Set NewWorkSheet = Nothing
End If
' 既定シートは削除する(削除しなくても可)
If ExistSheet("Sheet1") Then
Worksheets("Sheet1").Delete
End If
If ExistSheet("Sheet2") Then
Worksheets("Sheet2").Delete
End If
If ExistSheet("Sheet3") Then
Worksheets("Sheet3").Delete
End If
End Sub
'==========(UserForm1)===========================
Option Explicit
'+------------------------------------------------------------------------------
'| イベント :コンボボックス「接続先」
'+------------------------------------------------------------------------------
Private Sub ComboBox1_Change()
Dim i As Integer
ThisWorkbook.Activate
Worksheets("USER").Range("G2").Value = UserForm1.ComboBox1.ListIndex
i = UserForm1.ComboBox1.ListIndex + 2
Ps_Host = Worksheets("USER").Cells(i, 2).Value 'ホスト
Ps_Sid = Worksheets("USER").Cells(i, 3).Value 'SID
Ps_User = Worksheets("USER").Cells(i, 4).Value 'ユーザ-
Ps_Pass = Worksheets("USER").Cells(i, 5).Value 'パスワード
End Sub
'+------------------------------------------------------------------------------
'| イベント :ボタン「TABLE」
'+------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Call テーブル一覧
End Sub
'+------------------------------------------------------------------------------
'| イベント :ボタン「COLUMN」
'+------------------------------------------------------------------------------
Private Sub CommandButton2_Click()
Call 項目一覧
End Sub
'+------------------------------------------------------------------------------
'| イベント :ボタン「SELECT」
'+------------------------------------------------------------------------------
Private Sub CommandButton3_Click()
Dim stSQL As String
Dim i As Integer
Dim j As Integer: j = 0
Dim k As Integer: k = 0
' 検索項目編集 (SELECT ~)
stSQL = "SELECT "
If UserForm1.ListBox2.ListCount > 0 Then
For i = 0 To UserForm1.ListBox2.ListCount - 1
If UserForm1.ListBox2.Selected(i) Then
stSQL = stSQL & UserForm1.ListBox2.List(i) & " ,"
j = j + 1
End If
Next i
If j > 0 Then
stSQL = Left(stSQL, Len(stSQL) - 2)
Else
stSQL = stSQL & "*"
End If
End If
' テーブル名編集 (FROM ~)
j = 0
For i = 0 To UserForm1.ListBox1.ListCount - 1
If UserForm1.ListBox1.Selected(i) Then '複数指定あり
j = j + 1
End If
Next i
If j > 1 Then
stSQL = stSQL & vbNewLine & " FROM "
Else
stSQL = stSQL & ",ROWID " & vbNewLine & " FROM "
End If
For i = 0 To UserForm1.ListBox1.ListCount - 1
If UserForm1.ListBox1.Selected(i) Then
k = k + 1
If j > 1 Then
stSQL = stSQL & UserForm1.ListBox1.List(i) & " T" & k
If k < j Then
stSQL = stSQL & ","
End If
Else
stSQL = Replace(stSQL, "SELECT *,ROWID", "SELECT " & UserForm1.ListBox1.List(i) & ".*,ROWID")
stSQL = stSQL & UserForm1.ListBox1.List(i)
End If
End If
Next i
UserForm1.TextBox2.Text = stSQL
UserForm1.TextBox2.SetFocus
End Sub
'+------------------------------------------------------------------------------
'| イベント :ボタン「WHERE」
'+------------------------------------------------------------------------------
Private Sub CommandButton4_Click()
Dim stSQL As String
Dim i As Integer
Dim j As Integer: j = 0
stSQL = UserForm1.TextBox2.Text
If InStr(stSQL, "WHERE") > 0 Then
stSQL = Left(stSQL, InStr(stSQL, "WHERE") - 1)
End If
stSQL = stSQL & vbNewLine & " WHERE "
If UserForm1.ListBox2.ListCount > 1 Then
For i = 0 To UserForm1.ListBox2.ListCount - 1
If UserForm1.ListBox2.Selected(i) Then
stSQL = stSQL & UserForm1.ListBox2.List(i) & " = " & vbNewLine & " AND "
j = j + 1
End If
Next i
If j > 0 Then
stSQL = Left(stSQL, Len(stSQL) - 5) ' 末尾の AND の除去
End If
End If
UserForm1.TextBox2.Text = stSQL
UserForm1.TextBox2.SetFocus
End Sub
'(次の記事に続く)
' http://blog.goo.ne.jp/frontflug/e/908ef1c3488d02fc707bbe95c7ba55be へ続く
最新の画像もっと見る
最近の「EXCEL VBA」カテゴリーもっと見る
最近の記事
カテゴリー
- VBScript(2)
- Weblog(314)
- お仕事ツール(0)
- Saloon(1122)
- Node.js他(Python)(16)
- HTA(32)
- 決め・分け論(72)
- 映画・ドラマ(37)
- EXCEL VBA(35)
- PL/SQL(10)
- Java(11)
- 詩(自作)(5)
- 詩(塚原将)(298)
- 短歌(200)
- 題詠100首鑑賞(96)
- 題詠100首(109)
- ALIAS SMITH and JONES エピソード(1)
- 題詠100首2010(11)
- 読書(74)
- プロスポーツ(プロ野球、格闘技)(27)
- 日常・育児とか(88)
- 仕事(IT関係)(61)
- とほほ(33)
- 夢(32)
- 勝手にバトン(7)
- 写真(36)
- スタートレック視聴日誌草稿(24)
- 旅行(25)
- 嫌いな言葉(6)
- 好きな言葉(4)
バックナンバー
人気記事