2015年2月24日火曜日

[.NET]Hashテーブル(辞書)宣言方法

以外にど忘れする宣言方法。


①Hashテーブル(dictionary型)を.Addではなく1文で宣言する方法。
  Private等の共通定義で使える。
'-----------------------------------
 Private dicstrKbn As New System.Collections.Generic.Dictionary(Of String, String)() From {
            {"社員1", "Aさん"},
            {"社員2", "Bさん"},
            {"社員3", "Cさん"},
            {"社員4", "Dさん"}
        }
'-----------------------------------

②動的な時は.Addを使う
'-----------------------------------
 Dim dicstrKbn As New System.Collections.Generic.Dictionary(Of String, String)
 For i As Integer = 0 To res.MainTable.Rows.Count - 1
    dicstrKbn.Add("社員1","Aさん")    '←ここを動的に 
 Next
 '-----------------------------------


③使い方は↓
 '-----------------------------------
If dicstrKbn.ContainsKey("社員1") Then
       messagebox.show(dicstrKbn("社員1").ToString.Trim)
End If
 '-----------------------------------

2015年2月9日月曜日

[VBA]選択しているセルを図形オブジェクトに一発変換するマクロ

フローや機能要件を作成するときに
一度Excelのセルに打ったものを一気に図形オブジェクトに変換したい時用マクロ。


例)これを

          ↓

一発でこんな感じに。

----------------------------------------------------------------
Private Sub MakeObject()


    Dim WB As Workbook
    Set WB = ThisWorkbook
    Dim WS1 As Worksheet
    Set WS1 = WB.ActiveSheet
 
    '--------------------------------------------------------
    '実行速度向上のため画面更新と自動計算を停止
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    '-----------------------------------------------------------

    '現在選択しているセルの取得
    Dim intStartGyo As Integer: intStartGyo = Selection.Row
    Dim intLastGyo As Integer: intLastGyo = Selection.Row + Selection.Rows.Count - 1
    Dim intStartRow As Integer: intStartRow = Selection.Column
    Dim intLastRow As Integer: intLastRow = Selection.Column + Selection.Columns.Count - 1
 
    '※初期置
    Dim Rng As Range
    Set Rng = WS1.Cells(intStartGyo, intStartRow)
 
    Dim lWidth As Long: lWidth = 100  'オブジェクトのサイズ
    Dim lHeight  As Long: lHeight = 20  'オブジェクトのサイズ

 
    lLeft = Rng.Left + 10
    For i = intStartGyo To intLastGyo
   
        lTop = Rng.Top
        For j = intStartRow To intLastRow
         
            'If Len(WS1.cells(i, j).Text) > 0 And WS1.cells(i, j).Text > 0 Then '空欄なら作らない
                       
              '図形の作成---------------------------------------
              Dim myShape1 As Shape
              Dim strText As String
              strText = WS1.Cells(i, j).Text
              Set myShape1 = WS1.Shapes.AddShape( _
                    Type:=msoShapeRectangle, _
                    Left:=lLeft, _
                    Top:=lTop, _
                    Width:=lWidth, _
                    Height:=lHeight)
                With myShape1
                    .Fill.Visible = msoTrue
                    .Fill.Solid
                    .TextFrame.Characters.Text = strText
                    .TextFrame.HorizontalAlignment = xlCenter
                End With
              '-------------------------------------------------------
         
              '追加位置を下へずらす
              lTop = lTop + lHeight + 5
           
            'End If
     
            Next

       '追加位置を右へずらす

       lLeft = lLeft + lWidth + 5
 
    Next

    '実行速度向上のため画面更新と自動計算を再開---------------
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    '-----------------------------------------------------------


End Sub