【ソフトウェア】SQL Gears for Oracle

Oracleデータベースに対して様々な操作を行う開発ツールです。
f:id:workaholist:20160324131022p:plain

ダウンロード

SQL Gears for Oracle Ver.2016.3.25.1β (2016/03/25)

  • 更新内容
    • readme.txt参照

著作権や免責事項などについては同梱の readme.txt をご覧ください。

動作環境
マニュアル

操作方法は世に出回るデータベース開発ツールに似たものにしています。
順次、操作方法については記載していこうと思っています。

【Excel VBA】選択範囲をRangeとして取得する(複数選択範囲対応)

選択範囲をRangeとして取得します。
Ctrlキーを押しながら選択すると複数の選択範囲が指定可能ですが、その場合はSelectionでは全ての選択範囲が取得出来ません。
Selection.Areasを利用して全ての選択範囲を結合したRangeを取得します。

'
' 選択範囲をRangeとして取得する。(複数選択範囲対応)
'
Private Function GetSelectionRange() As Range
    Dim allRange As Range
    Dim r As Range

    For Each r In Selection.Areas
        If allRange Is Nothing Then
            Set allRange = r
        Else
            Set allRange = Union(allRange, r)
        End If
    Next
    
    Set GetSelectionRange = allRange
End Function

【Excel VBA】開いているブックが保存されているフォルダを開く

Excelブックが保存されているフォルダを開きます。

'
' 開いているブックが保存されているフォルダを開く。
'
Public Sub フォルダを開く()
    If ActiveWorkbook.path = "" Then
        MsgBox "ファイルはまだ保存されていません。", vbCritical, "エラー"
    Else
        CreateObject("Shell.Application").Open ActiveWorkbook.path
    End If
End Sub

【Excel VBA】全てのシートの左上セルを選択後に先頭シートをアクティブ化

全てのシートの左上セルを選択後に先頭シートをアクティブにします。
ドキュメント作成後にこのマクロを実行してから保存すると良いと思います。

'
' 全てのシートを左上選択状態にする
'
Public Sub 全シート左上セル選択()
    On Error Resume Next
    
    ' 画面更新の停止
    Application.ScreenUpdating = False

    ' 全シート分実行
    Dim i As Integer
    For i = 1 To Worksheets.Count
        ' シートをアクティブ化
        Worksheets(i).Activate
        
        ' 左上にスクロール
        Dim j As Integer
        For j = 1 To Windows(1).Panes.Count
            Windows(1).Panes(j).ScrollColumn = 1
            Windows(1).Panes(j).ScrollRow = 1
        Next
        
        ActiveSheet.Cells(1, 1).Select      ' 左上を選択
        ActiveWindow.View = xlNormalView    ' 改ページプレビュー解除
        ActiveWindow.Zoom = 100             ' 倍率100%
    Next
    
    ' 1番目のシートをアクティブ化
    Worksheets(1).Activate

    ' 画面更新の再開
    Application.ScreenUpdating = True
End Sub

【VB.NET】ComboBoxにDataSource設定用のメソッドを追加

下記のようにKeyValuePairのリストや配列を指定するだけで、DataSource/DisplayMember/ValueMemberを設定することができるメソッドをComboBoxに追加します。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim dataList As New List(Of KeyValuePair(Of String, String))()
    dataList.Add(New KeyValuePair(Of String, String)("A", "1"))
    dataList.Add(New KeyValuePair(Of String, String)("B", "2"))
    dataList.Add(New KeyValuePair(Of String, String)("C", "3"))

    ComboBoxEx1.SetData(dataList, True, True)
End Sub

Private Sub ComboBoxEx1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxEx1.SelectedIndexChanged
    MessageBox.Show(ComboBoxEx1.SelectedValue.ToString())
End Sub

KeyValuePairのジェネリックの2番目の型を変更することで、ValueMemberに設定する型を変更することもできます。

Public Class ComboBoxEx
    Inherits ComboBox

    ''' <summary>
    ''' データを設定する。
    ''' </summary>
    ''' <param name="items">表示テキストと値の組み合わせ項目リスト。</param>
    ''' <param name="addEmpty">先頭に空白を追加するかどうか。</param>
    ''' <param name="autoSize">内容に合わせて幅を自動調整するかどうか。</param>
    Public Sub SetData(ByVal items As IEnumerable(Of KeyValuePair(Of String, String)), _
                       ByVal addEmpty As Boolean, _
                       ByVal autoSize As Boolean)
        ' 設定データクリア
        ClearData()

        Dim itemList As List(Of KeyValuePair(Of String, String)) = items.ToList()

        ' 空アイテムの追加
        If addEmpty Then
            itemList.Insert(0, New KeyValuePair(Of String, String)("", ""))
        End If

        ' バインド
        MyBase.DisplayMember = "Key"
        MyBase.ValueMember = "Value"
        MyBase.DataSource = itemList

        ' 幅の自動調整
        If autoSize Then
            If itemList.Count = 0 Then
                Return
            End If

            Dim maxWidth As Integer = 0
            Dim g As Graphics = MyBase.CreateGraphics()

            ' 表示テキストの最大長+余白分の幅
            MyBase.Width = CInt(items.Select(Function(item) g.MeasureString(Convert.ToString(item.Key), MyBase.Font).Width).Max()) + 20
        End If
    End Sub

    ''' <summary>
    ''' 設定データをクリアする。
    ''' </summary>
    Public Sub ClearData()
        If MyBase.DataSource Is Nothing Then
            ' アイテムクリア
            MyBase.Items.Clear()
        Else
            ' データソースクリア
            MyBase.DataSource = Nothing
        End If
    End Sub

End Class

【C#】番号付きの画像を生成

using System.Drawing;

/// <summary>
/// 番号付きの画像を生成する。
/// </summary>
/// <param name="sourceImage">元画像。</param>
/// <param name="number">番号。</param>
/// <param name="fontColor">番号の文字色。</param>
/// <returns>番号付きの画像。</returns>
public static Image CreateNumberImage(Image sourceImage, int number, Font font, Color fontColor)
{
    using (Graphics g = Graphics.FromImage(sourceImage))
    using (SolidBrush b = new SolidBrush(fontColor))
    {
        g.DrawString(number.ToString(), font, b, new Point(-2, 7));
    }

    return sourceImage;
}