2015年10月19日月曜日

[CSS]表題や注意書きの前に丸や四角を表示する。

よく忘れるのでメモ。
--------------
●ここに注意!
--------------
↑などを表記するとき、画像をはりつけるのは面倒なのでCSSで行う。


出来上がりイメージはこちら
↓↓↓↓↓↓

CSS/HTMLは以下。

.header1-1{
    height:40px;  
}
.header1-1:before {
  content: "";
  margin-right:5px;
  display: inline-block;
  border: 5px solid transparent;
  background: #337AB7;
  border-radius: 5px;
}
.header1-2{
    height:40px;  
}
.header1-2:before {
  content: "";
  margin-right:3px;
  display: inline-block;
  border: 8px solid;
  border-top-color: transparent;
  border-right-color: transparent;
  border-bottom-color: transparent;
  border-left-color: red;
}
.header1-3{
    height:40px;  
}
.header1-3:before {
  content: "";
  margin-right:5px;
  display: inline-block;
  border: 7px solid;
  border-top-color: transparent;
  border-right-color: #66CC22;
  border-bottom-color: transparent;
  border-left-color: #CC2266;
  background: #337AB7;
  border-radius: 7px;
}
.header1-4{
    height:40px;  
}
.header1-4:before {
  content: "";
  margin-right:5px;
  display: inline-block;
  border: 7px solid transparent;
  background: #337AB7;
}
.header1-5{
    height:40px;  
}
.header1-5:before {
  content: "";
  margin-right:5px;
  display: inline-block;
  border: 7px solid transparent;
  background: #337AB7;
  border-radius: 3px;
}
.header1-7{
  width:22px;
  color:blue;
  display: inline-block;
  border: 1px solid black;
  background: pink;
  border-radius: 10px;
}

<div class="header1-1">前に○をつけてみます。</div>
        <div class="header1-2">前に△をつけてみます。</div>
        <div class="header1-3">組み合わせるとおかしなものもできあがった。</div>
        <div class="header1-4">シンプルな□はこれ</div>
        <div class="header1-5">○の角度を変えると□っぽく</div>
        やりながら思ったけど①などもCSSで実装できる&nbsp;&nbsp;→&nbsp;&nbsp;<div class="header1-7" >a</div>

2015年6月17日水曜日

[その他]SQLServerとExcelマクロを使ってリバースER図を作成する。(エンティティのみ)

①まずは以下のSQL文を↓SQLServer上指定のDB上にて実行しましょう

SELECT
object_name(sys.columns.object_id),
sys.columns.column_id,
sys.columns.name,
sys.indexes.name AS INDEX_NAME,
sys.indexes.is_primary_key AS TEST

FROM
sys.columns inner join sys.objects on
sys.columns.object_id = sys.objects.object_id


LEFT JOIN
sys.index_columns
on sys.columns.column_id = sys.index_columns.column_id
and sys.columns.object_id = sys.index_columns.object_id

LEFT JOIN sys.indexes
on sys.indexes.object_id = sys.index_columns.object_id

where

ISNULL(sys.indexes.is_primary_key ,-1) IN (-1,1)
and
sys.objects.type = 'U'

--もしER図に出したくないカラムがある場合はここで指定
--and
--sys.columns.name NOT IN ( --'created',
--'テスト項目',
--'削除フラグ'
--)


--テーブルしぼるならここで!
--and
--LEFT(object_name(sys.columns.object_id),8) IN (
--'T_氏名'
--'T_給与'
--)


order by
object_name(sys.columns.object_id),
column_id


②出力された結果をエクセルに貼り付けて以下の様にします
 (必ずA1セルから貼り付けてください)


③貼り付けたシート上で以下のVBAマクロを実行します。

Dim WB As Workbook
Set WB = ActiveWorkbook
Dim WS1 As Worksheet
Set WS1 = WB.ActiveSheet

WS1.Select
Range("A1:E1").Select
Range(Selection, Selection.End(xlDown)).Select

'--------------------------------------------------------
'実行速度向上のため画面更新と自動計算を停止
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 intStartClm As Integer: intStartClm = Selection.Column
Dim intLastClm As Integer: intLastClm = Selection.Column + Selection.Columns.Count - 1

'※初期置
Dim Rng As Range
Set Rng = WS1.Cells(intStartGyo, intStartClm)


Dim lWidth As Long: lWidth = 150 'エンティティオブジェクトのサイズ
Dim lHeight As Long: lHeight = 14 'エンティティオブジェクトのサイズ

lLeft = Rng.Left + 350 '初期位置
Ltop = Rng.Top + 10 '初期位置

Dim TblCnt As Integer: TblCnt = 0
Dim TblTitle As String
Dim TblStartTop As Integer
Dim ECnt As Integer
Dim strShapes As String
Dim FlgKey As Boolean

For j = intStartGyo To intLastGyo

'テーブルカウント
If TblTitle <> WS1.Cells(j, intStartClm).Text Then
TblCnt = TblCnt + 1
TblTitle = WS1.Cells(j, intStartClm).Text
ECnt = 0
strShapes = ""
Ltop = WS1.Cells(j + 1, intStartClm).Top + 10
TblStartTop = Ltop
FlgKey = True
End If

'エンティティの作成---------------------------------------

Dim myShape1 As Shape

'主キーからそうでなくなった場合、線を足す
If WS1.Cells(j, intStartClm + 4).Text <> "1" Then
If FlgKey = True Then
Dim SShape As Shape
Set SShape = WS1.Shapes.AddConnector(msoConnectorStraight, lLeft, Ltop, lLeft + lWidth, Ltop)
strShapes = strShapes & "," & SShape.Name
FlgKey = False
End If
End If


Dim oShape As Shape
Set oShape = WS1.Shapes.AddShape(msoShapeRectangle, lLeft, Ltop, lWidth, lHeight)
With oShape
.Fill.Visible = msoFalse
.Fill.Solid 'グラデーション等無し
.Line.Visible = msoFalse
.TextFrame.Characters.Font.Color = vbBlack
If WS1.Cells(j, intStartClm + 4).Text <> "1" Then
.TextFrame.Characters.Text = WS1.Cells(j, intStartClm + 2).Text
Else
.TextFrame.Characters.Text = "■" & WS1.Cells(j, intStartClm + 2).Text
End If
.TextFrame.Characters.Font.Size = 8
.TextFrame.HorizontalAlignment = xlHAlignLeft
End With
strShapes = strShapes & "," & oShape.Name


'追加位置を下へずらす
Ltop = Ltop + lHeight
ECnt = ECnt + 1
'-------------------------------------------------------

'次が異なるテーブルor終了行---------------------------------
If Len(strShapes) > 0 Then
If WS1.Cells(j + 1, intStartClm).Text <> TblTitle Or j + 1 > intLastGyo Then


Set oShape = WS1.Shapes.AddShape(msoShapeRectangle, lLeft, TblStartTop - 20, lWidth, 30 + ECnt * (lHeight + 1))
With oShape
.Fill.Visible = msoFalse
.Fill.Solid 'グラデーション等無し
.Line.Visible = msoTrue
.TextFrame.Characters.Font.Color = vbBlue
.TextFrame.Characters.Text = TblTitle
.TextFrame.Characters.Font.Size = 8
.TextFrame.HorizontalAlignment = xlHAlignLeft
End With
'strShapes(ECnt) = oShape.Name
'ActiveSheet.Shapes.Range(Array("""" & oShape.Name & """" & strShapes)).Select
strShapes = strShapes & "," & oShape.Name


Dim valShapes() As String
valShapes = Split(strShapes, ",")


'oShape.Select
'Selection.ShapeRange.Group.Select
WS1.Shapes.Range(valShapes).Group

'追加位置を右へずらす
'lLeft = lLeft + lWidth + 5
'追加位置を下へずらす
Ltop = Ltop + 30 + ECnt * (lHeight + 1) + 10

End If
End If
'------------------------------------------------------------

Next

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

MsgBox ("作成成功")



End Sub


④以下の様にER図用のエンティティ図形が出来ます。

2015年6月3日水曜日

[その他]MK-2からコピーしたスキーマ情報からER図用のエンティティオブジェクトを作成するマクロ

Sub MR2ERtoExcelER()

 
    MsgBox "※変換したい情報を全部選択しておく必要があります※"

    Dim WB As Workbook
    Set WB = ActiveWorkbook
    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 intStartClm As Integer: intStartClm = Selection.Column
    Dim intLastClm As Integer: intLastClm = Selection.Column + Selection.Columns.Count - 1
 
    '※初期置
    Dim Rng As Range
    Set Rng = WS1.Cells(intStartGyo, intStartClm)
 
 
    Dim lWidth As Long: lWidth = 150  'エンティティオブジェクトのサイズ
    Dim lHeight  As Long: lHeight = 14  'エンティティオブジェクトのサイズ

    lLeft = Rng.Left + 350 '初期位置
    Ltop = Rng.Top + 10 '初期位置
 
    Dim TblCnt As Integer: TblCnt = 0
    Dim TblTitle As String
    Dim TblStartTop As Integer
    Dim ECnt As Integer
    Dim strShapes As String
    Dim FlgKey As Boolean
 
    For j = intStartGyo To intLastGyo
               
            'テーブルカウント
            If WS1.Cells(j, intStartClm).Text = "[Entity]" Then
                TblCnt = TblCnt + 1
                TblTitle = Replace(WS1.Cells(j + 1, intStartClm).Text, "PName=", "")
                ECnt = 0
                strShapes = ""
                Ltop = WS1.Cells(j + 1, intStartClm).Top + 10
                TblStartTop = Ltop
                FlgKey = True
            End If
                                           
            'エンティティの作成---------------------------------------
            If Left(WS1.Cells(j, intStartClm).Text, 6) = "Field=" Then
         
              Dim myShape1 As Shape
              Dim strText() As String
              strText = Split(WS1.Cells(j, intStartClm).Text, ",")
           
           
                '主キーからそうでなくなった場合、線を足す
                If strText(4) = "" Then
                    If FlgKey = True Then
                        Dim SShape As Shape
                        Set SShape = WS1.Shapes.AddConnector(msoConnectorStraight, lLeft, Ltop, lLeft + lWidth, Ltop)
                        strShapes = strShapes & "," & SShape.Name
                        FlgKey = False
                    End If
                End If
           
           
              Dim oShape As Shape
              Set oShape = WS1.Shapes.AddShape(msoShapeRectangle, lLeft, Ltop, lWidth, lHeight)
              With oShape
                .Fill.Visible = msoFalse
                .Fill.Solid 'グラデーション等無し
                .Line.Visible = msoFalse
                .TextFrame.Characters.Font.Color = vbBlack
                If strText(4) = "" Then
                    .TextFrame.Characters.Text = Replace(strText(1), """", "")
                Else
                    .TextFrame.Characters.Text = "■" & Replace(strText(1), """", "")
                End If
                .TextFrame.Characters.Font.Size = 8
                .TextFrame.HorizontalAlignment = xlHAlignLeft
              End With
              strShapes = strShapes & "," & oShape.Name
           
           
              '追加位置を下へずらす
              Ltop = Ltop + lHeight
              ECnt = ECnt + 1
            End If
            '-------------------------------------------------------
               
            '次が異なるテーブルor終了行---------------------------------
            If Len(strShapes) > 0 Then
            If WS1.Cells(j + 1, intStartClm).Text = "[Entity]" Or j + 1 = intLastGyo Then
           
               
              Set oShape = WS1.Shapes.AddShape(msoShapeRectangle, lLeft, TblStartTop - 20, lWidth, 30 + ECnt * (lHeight + 1))
              With oShape
                .Fill.Visible = msoFalse
                .Fill.Solid 'グラデーション等無し
                .Line.Visible = msoTrue
                .TextFrame.Characters.Font.Color = vbBlue
                .TextFrame.Characters.Text = TblTitle
                .TextFrame.Characters.Font.Size = 8
                .TextFrame.HorizontalAlignment = xlHAlignLeft
              End With
              'strShapes(ECnt) = oShape.Name
              'ActiveSheet.Shapes.Range(Array("""" & oShape.Name & """" & strShapes)).Select
              strShapes = strShapes & "," & oShape.Name
           
           
              Dim valShapes() As String
              valShapes = Split(strShapes, ",")
         
           
              'oShape.Select
              'Selection.ShapeRange.Group.Select
              WS1.Shapes.Range(valShapes).Group
               
                 '追加位置を右へずらす
                'lLeft = lLeft + lWidth + 5
                '追加位置を下へずらす
                Ltop = Ltop + 30 + ECnt * (lHeight + 1) + 10
         
            End If
            End If
            '------------------------------------------------------------
 
    Next

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


End Sub






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