|
---------------------------------------------------------------------
選択されたセル位置に縦直線を引くサブルーチン
Sub LVLineDrow()
「LLineDrow」と同じですので解説を省略します。
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1, x1, y1 + y2).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BeginArrowheadStyle = msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadNone
End Sub
---------------------------------------------------------------------
選択されたセル位置に斜め下がり直線を引くサブルーチン
Sub LLineDrow下がり()
「LLineDrow」と同じですので解説を省略します。
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1, x1 + x2, y1 + y2).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BeginArrowheadStyle = msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadNone
End Sub
---------------------------------------------------------------------
選択されたセル位置に斜め上がり直線を引くサブルーチン
Sub LLineDrow上がり()
「LLineDrow」と同じですので解説を省略します。
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1 + y2, x1 + x2, y1).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BeginArrowheadStyle = msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadNone
End Sub
---------------------------------------------------------------------
選択されたセル位置に両矢印の縦直線を引くサブルーチン
Sub 矢印縦線引き()
'
' 矢印縦線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1, x1, y1 + y2).Select
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
If UForm1.OptionButton1 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
Selection.ShapeRange.Line.Weight = 0.5
' 透明度の設定(不透明)
Selection.ShapeRange.Line.Transparency = 0#
透明度は、0(不透明) ~ 1(透明)
Selection.ShapeRange.Line.Visible = msoTrue <-- 表示をする設定
線の始点と終点の処理
始点側 : 矢印の長さ 中
Selection.ShapeRange.Line.BeginArrowheadWidth = _
msoArrowheadWidthMedium
始点側 : 開いた矢印
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadOpen
終点側 : 矢印の長さ 中
Selection.ShapeRange.Line.EndArrowheadWidth = _
msoArrowheadWidthMedium
終点側 : 開いた矢印
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadOpen
End Sub
---------------------------------------------------------------------
選択されたセル位置に両矢印の横直線を引くサブルーチン
「矢印縦線引き」と同じですので解説を省略します。
Sub 矢印横線引き()
'
' 矢印横線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1 + y2, x1 + x2, y1 + y2).Select
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
If UForm1.OptionButton1 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
Selection.ShapeRange.Line.Weight = 0.5
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.BeginArrowheadWidth = _
msoArrowheadWidthMedium
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadOpen
Selection.ShapeRange.Line.EndArrowheadWidth = _
msoArrowheadWidthMedium
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadOpen
End Sub
---------------------------------------------------------------------
選択されたセル位置に片矢印の縦直線を引くサブルーチン
Sub 引出線引き()
'
' 引出線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1, x1, y1 + y2).Select
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
If UForm1.OptionButton1 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
Selection.ShapeRange.Line.Weight = 0.5
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
始点は、矢印なし
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
終点は、三角矢印
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadTriangle
終点側 : 矢印の幅 中
Selection.ShapeRange.Line.EndArrowheadWidth = _
msoArrowheadWidthMedium
終点側 : 矢印の長さ 中
Selection.ShapeRange.Line.EndArrowheadLength = _
msoArrowheadLengthMedium
End Sub
---------------------- ここから module2のコード -----------------
選択された図形の座標位置を表示するサブルーチン
このマクロは、「マクロの実行」から実行できます。
Sub a図形位置サイズ()
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
MsgBox Format(x1, "#,##0") + " " + Format(y1, "#,##0") + " "
End Sub
---------------------------------------------------------------------
ページ内のすべての図形を消去するサブルーチン
このマクロは、「マクロの実行」から実行できます。
Sub a図形消去()
Dim Lx1 As Long
On Error Resume Next
Lx1 = ActiveSheet.Shapes.Count <-- 図形の数を取得する。
'
If Lx1 = 0 Then Exit Sub <-- 図形が無い時は、終了する。
For x1 = 0 To Lx1
ActiveSheet.Shapes(x1).Delete <-- x1番目の図形を消去する。
Next x1
End Sub
---------------------------------------------------------------------
選択されたセル位置に写真を張付けるサブルーチン
Sub S写真選択()
'
On Error GoTo errorend0:
Dim LN As Single
Dim Xichi1, Xhaba, Yichi1, Yhaba, Xichi, Yichi As Single
Dim Zom As Long
Dim myFname, Gname, Tname As String
Dim F_array As Variant
Dim A_cnt, C_cnt, L_cnt As Integer
ADir = Workbooks(AAname).Worksheets(BBname).Cells(4, 1).Value
If ADir <> "" Then
If Left(ADir, 2) = "\\" Then
' ネットワークドライブの参照
Call SetCurrentDirectory(ADir) <-- ネットワークドライブの参照
Else
ChDrive Left(ADir, 2) <-- PC内ドライブの参照
ChDir ADir
End If
End If
写真選択のダイヤログを表示し、張付ける写真を指定してもらう。
myFname = Application.GetOpenFilename("写真ファイル _
(*.JPG;*.BMP;*.GIF;*.WMF;*.TIF),*.JPG;*.BMP;*.GIF;*.WMF;*.TIF")
If myFname = False Then Exit Sub <---- 何も選択されない時の処理
'
'-------------------------------------------------------------------
' 次読込の為のパスを記録する。
' 次読込の為のパスを記録する。
AAA = myFname
nn = Len(AAA): XX = 1
パス設定AA:
N = InStr(XX, AAA, "\")
If N <> 0 Then M = N: XX = N + 1: GoTo パス設定AA:
N = M
' 読込側のパス設定
Workbooks(AAname).Worksheets(BBname).Cells(4, 1).Value = _
Left(AAA, N - 1)
'-------------------------------------------------------------------
' 2019.02.05 写真貼り付け方法を改良( 簡素化出来ました )
' 下記マクロが、アクティブセルに張り付く事に注目しました。
' Left:=Selection.Left, Top:=Selection.Top でアクティブセルに貼付
' width:=Xhaba, height:=Yhaba で貼付サイズ指定
'-------------------------------------------------------------------
写真を貼付けるセルのサイズデータ( 幅・高さ )を取得する。
With Selection
Xhaba = .Width
Yhaba = .Height
End With
Set objShape = ActiveSheet.Shapes.AddPicture( _
filename:=myFname, _ <-- 挿入する写真ファイル名を
パス付きで指定
LinkToFile:=False, _ <-- False で独立した写真としての指定
True で元のファイルとのリンクを設定
SaveWithDocument:=True, _ <-- True で Excelファイルと共に保存
False でリンク情報だけを保存
Left:=Selection.Left, _ <-- アクティブセルの左端位置を指定
Top:=Selection.Top, _ <-- アクティブセルの上端位置を指定
Width:=Xhaba, _ <-- 張付け写真の横幅を指定
Height:=Yhaba) <-- 張付け写真の高さを指定
写真表面に文字・図形が描けるように、表示順序を最背面にする。
objShape.ZOrder msoSendToBack
Exit Sub
errorend0:
'N = Err.Number
'If N = 76 Then MsgBox ("デフォルトパスに移動します。")
保存されている参照パスが、無効の時にはデフォルトパスのにする。
ADir = Application.DefaultFilePath: GoTo S写真選択00:
End Sub
---------------------------------------------------------------------
された選択図形をTextBox1の値分回転するサブルーチン
Sub 図形回転()
On Error GoTo 図形回転end: <-- エラーの時のジャンプ先を
指定する。
kakudo = Val(UForm1.TextBox1.Value) <-- TextBox1の設定値を
取得し、数値に変換する。
Selection.ShapeRange.Rotation = kakudo <-- 選択された図形を
回転する。
図形回転end:
End Sub
---------------------------------------------------------------------
テキストボックスで文字を表示するサブルーチン
Sub アート文字3()
Dim Msize, Wsize, LN As Single
On Error GoTo アート文字3end: <-- エラーの時のジャンプ先を指定する。
文字を表示する位置の座標値を取得する。
With Selection
x1 = .Left
y1 = .Top
End With
オプションボタンの選択状況から文字の大きさを決める。
' 文字サイズ 標準
If UForm1.OptionButton6 = True Then Msize = 7: Wsize = 20
' 文字サイズ 中
If UForm1.OptionButton7 = True Then Msize = 10: Wsize = 30
' 文字サイズ 大
If UForm1.OptionButton8 = True Then Msize = 14: Wsize = 40
ss = InputBox("文字を入力して下さい。") <-- 表示する文字の入力。
表示する文字数からテキストボックスのサイズを計算する。
LN = Len(ss): LN = 10 + LN * 8.5
テキストボックスを表示する。
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
x1, y1, LN, Wsize).Select
テキストボックスの文字サイズを設定する。
Selection.ShapeRange.TextFrame2.TextRange.Font.Size = Msize
If UForm1.OpB2 = True Then <--- 文字色 黒の時の処理
With Selection.ShapeRange.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue <--- 文字表示する
.ForeColor.RGB = RGB(0, 0, 0) <--- 文字色 黒
文字の色をRGBの三原色の配列で指定する方法です。
.Transparency = 0 <--- 文字の透明度(不透明)
.Solid
End With
End If
If UForm1.OpB1 = True Then <--- 文字色 赤の時の処理
With Selection.ShapeRange.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0) <--- 文字色 赤
.Transparency = 0
.Solid
End With
End If
テキストボックスの文字を設定する。
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = ss
Selection.ShapeRange.Line.Visible = msoFalse
' 背景の透明度の設定(透明)
Selection.ShapeRange.Fill.Transparency = 1
透明度は、0(不透明) ~ 1(透明)
アート文字3end:
End Sub
---------------------------------------------------------------------
テキストボックスで文字(横向き縦方向)を表示するサブルーチン
Sub アート文字4()
アート文字3
アート文字3で表示した文字を 270度回転する。
Selection.ShapeRange.Rotation = 270#
アート文字4end:
End Sub
---------------------------------------------------------------------
ワードアートで文字(横文字)を表示するサブルーチン
Sub アート文字31()
Dim Msize, Wsize As Single
On Error GoTo アート文字31end: <--- エラーの時のジャンプ先を指定
文字を表示する位置の座標値を取得する。
With Selection
x1 = .Left
y1 = .Top
End With
オプションボタンの選択状況から文字の大きさを決める。
' 文字サイズ 標準
If UForm1.OptionButton6 = True Then Msize = 5.4: Wsize = 6
' 文字サイズ 中
If UForm1.OptionButton7 = True Then Msize = 7: Wsize = 9
' 文字サイズ 大
If UForm1.OptionButton8 = True Then Msize = 10: Wsize = 11
ss = InputBox("文字を入力して下さい。") <-- 表示する文字の入力。
入力された文字でワードアートで文字を表示する。
ActiveSheet.Shapes.AddTextEffect(msoTextEffect1, ss, _
"MS Pゴシック", Wsize, msoFalse, msoFalse, x1, y1).Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 <-- 文字色 赤
「文字の色」の文字色オプションボタンの黒が、選択された時、黒にする。
If UForm1.OpB2 = True Then _
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.Visible = msoFalse <-- 文字表示設定
msoFalse を設定すると、サイズを変更するときに
図形の高さと幅を個別に変更できます。
msoTrue を設定すると、指定した図形のサイズを変更しても
元の比率が保持されます。
Selection.ShapeRange.LockAspectRatio = _
msoFalse <-- 文字サイズ変更可に設定
Selection.ShapeRange.Height = Msize <-- 文字高さの設定
アート文字31end:
End Sub
---------------------------------------------------------------------
ワードアートで文字(横向き縦方向)を表示するサブルーチン
Sub アート文字41()
Dim Msize, Wsize As Single
On Error GoTo アート文字41end: <--- エラーの時のジャンプ先を指定
With Selection
x1 = .Left
y1 = .Top
End With
If UForm1.OptionButton6 = True Then Msize = 5.4: Wsize = 6
If UForm1.OptionButton7 = True Then Msize = 7: Wsize = 9
If UForm1.OptionButton8 = True Then Msize = 10: Wsize = 11
ss = InputBox("文字(縦書き)を入力して下さい。")
ActiveSheet.Shapes.AddTextEffect(msoTextEffect1, ss, _
"MS Pゴシック", Wsize, msoFalse, msoFalse, x1, y1).Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
If UForm1.OpB2 = True _
Then Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.Visible = msoFalse
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = Msize
アート文字31で表示した文字を 270度回転する。
Selection.ShapeRange.Rotation = 270#
アート文字41end:
End Sub
---------------------------------------------------------------------
横の一点鎖線を引くサブルーチン
「矢印縦線引き」とほぼ同じですので解説を省略します。
Sub LineDrow()
'
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1 + y2, x1 + x2, y1 + y2).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
線種を一点鎖線にする。
Selection.ShapeRange.Line.DashStyle = msoLineLongDashDot
End Sub
---------------------------------------------------------------------
縦の一点鎖線を引くサブルーチン
「矢印縦線引き」とほぼ同じですので解説を省略します。
Sub VLineDrow()
'
' 直線線引き Macro
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1, x1, y1 + y2).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.DashStyle = msoLineLongDashDot
End Sub
---------------------------------------------------------------------
右下がりの一点鎖線を引くサブルーチン
「矢印縦線引き」とほぼ同じですので解説を省略します。
Sub LineDrow下がり()
'
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1, x1 + x2, y1 + y2).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.DashStyle = msoLineLongDashDot
End Sub
---------------------------------------------------------------------
右上がりの一点鎖線を引くサブルーチン
「矢印縦線引き」とほぼ同じですので解説を省略します。
Sub LineDrow上がり()
'
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1 + y2, x1 + x2, y1).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.DashStyle = msoLineLongDashDot
End Sub
---------------------------------------------------------------------
横の点線を引くサブルーチン
「矢印縦線引き」とほぼ同じですので解説を省略します。
Sub TLineDrow()
'
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1 + y2, x1 + x2, y1 + y2).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
線種を点線にする。
Selection.ShapeRange.Line.DashStyle = msoLineDash
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
End Sub
---------------------------------------------------------------------
縦の点線を引くサブルーチン
「矢印縦線引き」とほぼ同じですので解説を省略します。
Sub TVLineDrow()
'
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1, x1, y1 + y2).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.DashStyle = msoLineDash
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
End Sub
---------------------------------------------------------------------
右下がりの点線を引くサブルーチン
「矢印縦線引き」とほぼ同じですので解説を省略します。
Sub TLineDrow下がり()
'
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1, x1 + x2, y1 + y2).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.DashStyle = msoLineDash
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
End Sub
---------------------------------------------------------------------
右上がりの点線を引くサブルーチン
「矢印縦線引き」とほぼ同じですので解説を省略します。
Sub TLineDrow上がり()
'
' 直線線引き Macro
'
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
End With
ActiveSheet.Shapes.AddLine(x1, y1 + y2, x1 + x2, y1).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.DashStyle = msoLineDash
Selection.ShapeRange.Line.BeginArrowheadStyle =
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
End Sub
---------------------------------------------------------------------
縮尺した横の直線を引くサブルーチン
Sub 横幅()
Dim Sizu As Single
m単位の長さの入力。
If UForm1.CheckBox1 = False Then mm = _
Application.InputBox("横幅(m)を入力")
1間単位の長さの入力。
If UForm1.CheckBox1 = True Then mm = _
Application.InputBox("横幅(1間単位)を入力")
縮尺計算をする。標準は、1/100としています。
nn = 1 / ((UForm1.TextBox2) / 100)
縮尺補正値を「マクロの表紙」から取得する。
hosei = Workbooks(AAname).Worksheets(BBname).Cells(15, 1).Value
1間単位の表示長を計算する。
If UForm1.CheckBox1 = False Then mm = mm * 28.4 * nn * hosei
m単位の表示長を計算する。。
If UForm1.CheckBox1 = True _
Then mm = mm * 28.4 * nn * 1.818 * hosei
線を表示するセル位置の座標値を取得する。。
With Selection
x = .Left
y = .Top
End With
ActiveSheet.Shapes.AddLine(x, y, x + mm, y).Select
' 線種 直線を指定する。
Selection.ShapeRange.Line.Style = msoLineSingle
線を太さを決定する。。
If UForm1.OptionButton3 = True Then Sizu = 0.75 <-- 細い線
If UForm1.OptionButton4 = True Then Sizu = 1.5 <-- 少し太い線
If UForm1.OptionButton5 = True Then Sizu = 3: _ <-- 間取りの線
Selection.ShapeRange.Line.Style = msoLineThinThin
Selection.ShapeRange.Line.Weight = Sizu <-- 線種 直線を指定
Selection.ShapeRange.Line.Visible = msoTrue <-- 線種 直線を指定
表示する線の表示順序を指定する。
msoBringToFront …最前面に移動する。
msoSendToBack …最背面に移動する。
msoBringForward …前面に移動する。
msoSendBackward …背面に移動する。
Selection.ShapeRange.ZOrder msoSendToBack <-- 最背面に移動
線の両端 矢印なしに設定する。
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
' 影を表示しないを指定する。
Selection.ShapeRange.Shadow.Visible = msoFalse
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
End Sub
---------------------------------------------------------------------
縮尺した縦の直線を引くサブルーチン
「横幅」とほぼ同じですので解説を省略します。
Sub 縦幅()
Dim Sizu As Single
If UForm1.CheckBox1 = False Then mm = _
Application.InputBox("縦幅(m)を入力")
If UForm1.CheckBox1 = True Then mm = _
Application.InputBox("縦幅(1間単位)を入力")
nn = 1 / ((UForm1.TextBox2) / 100)
hosei = Workbooks(AAname).Worksheets(BBname).Cells(15, 1).Value
If UForm1.CheckBox1 = False Then mm = mm * 28.4 * nn * hosei
If UForm1.CheckBox1 = True Then _
mm = mm * 28.4 * nn * 1.818 * hosei
With Selection
x = .Left
y = .Top
End With
ActiveSheet.Shapes.AddLine(x, y, x, y + mm).Select
Selection.ShapeRange.Line.Style = msoLineSingle
If UForm1.OptionButton3 = True Then Sizu = 0.75
If UForm1.OptionButton4 = True Then Sizu = 1.5
If UForm1.OptionButton5 = True Then Sizu = 3: _
Selection.ShapeRange.Line.Style = msoLineThinThin
Selection.ShapeRange.Line.Weight = Sizu
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Shadow.Visible = msoFalse
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
End Sub
------------------------ ここから module3のコード -------------
任意角度の直線を引くサブルーチン
Dim CF As Long
'-------------------------------------
Sub 任意角度直線(CCF As Variant)
Dim DDeg As Variant
ドラック範囲の座標値を取得する。
With Selection
x1 = .Left
y1 = .Top
x2 = .Width
y2 = .Height
y1 =y1 - y2 <--- 座標値の起点がセルの左上なので左下に移動
End With
既設の水平線を回転か?
If CCF = 1 Then
水平線かチェックする。
If y2 <> 0 Then Exit Sub <--- 水平線でない時には、強制終了
Selection.ShapeRange.Delete <--- 元の線は、消去
End If
'
InData = UForm1.TextBox3.Text
文字列 「度-分-秒」を度(360進表示)に変換する
Atext_deg InData, textdeg
エラー処理 データ未設定時には、強制終了
If textdeg = "" Then Exit Sub
直角方向は、特別処理をする。
If textdeg = 90 Or textdeg = -90 Or textdeg = 180 Or _
textdeg = 270 Then
If textdeg = 180 Then x2 = -x2: y2 = 0
If textdeg = 90 Then y2 = x2: x2 = 0
If textdeg = -90 Or textdeg = 270 Then y2 = -x2: x2 = 0
Else
PI = 3.14159265358979
DDeg = textdeg * PI / 180 <--- 度(360進)をラジアン値にする。
基準位置からの、高さ(y2)と底辺長(x2)を求める。
y2 = x2 * Sin(DDeg): x2 = x2 * Cos(DDeg)
End If
ドラック位置を基準に直線を引く
ActiveSheet.Shapes.AddLine(x1, y1, x1 + x2, y1 - y2).Select
'
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
線の色 赤指定か?
If UForm1.OptionButton2 = True Then _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BeginArrowheadStyle = _
msoArrowheadNone
Selection.ShapeRange.Line.EndArrowheadStyle = _
msoArrowheadNone
'
With UForm1
一点鎖線
If .OptionButton9 = True Then _
Selection.ShapeRange.Line.DashStyle = msoLineLongDashDot
点線
If .OptionButton10 = True Then _
Selection.ShapeRange.Line.DashStyle = msoLineDash
以外は、直線
End With
End Sub
---------------------------------------------------------------------
文字列 「度-分-秒」を度(360進表示)に変換するくサブルーチン
" 10-20-30" ----> 10.34166667
引 数 : InData(度-分-秒) As Variant
戻り値 : textdeg(度) As Variant
Sub Atext_deg(InData, textdeg As Variant)
Dim MPt As Long
Dim MS As String
角度はマイナスか?(先頭に"-"有るかをチェック)
CF = 0: N = Len(InData)
先頭に"-"有るときは、フラグをONにして、"-"取り去る。
If Left(InData, 1) = "-" Then CF = 1: InData = Mid(InData, 2, N - 1)
'------------------------------------------
データ未設定 エラー処理
If InData = "" Then textdeg = "": Exit Sub
MPt = InStr(InData, "-") <--- 分の区切り"-"位置検出
MPt=0 --> 度のみ
MPt<>0 --> 度-分のみ
度のみの処理
If MPt = 0 Then AAA = InData: BBB = "0": CCC = "0": _
GoTo text_deg00:
'------------------------------------------
N = Len(InData) <--- 文字数
AAA = Left(InData, MPt - 1) <--- 度のデータ抽出
BBB = Mid(InData, MPt + 1, N - MPt) <--- 分-秒データのみにする。
MPt = InStr(BBB, "-") <--- 秒の区切り"-"位置検出
MPt=0 --> 度-分のみ
MPt<>0 --> 度-分-秒
If MPt = 0 Then
度-分のみの処理
CCC = "0"
Else
度-分-秒の処理
DDD = BBB
N = Len(DDD)
BBB = Left(DDD, MPt - 1) <--- 分のデータ抽出
CCC = Mid(DDD, MPt + 1, N - MPt) <--- 秒のデータ抽出
End If
'------------------------------------------
text_deg00:
度(AAA)・分(BBB)・秒(CCC)の文字列を角度(360進)の数値に変換する。
textdeg = Val(AAA) + Val(BBB) / 60 + Val(CCC) / 3600
角度を -360 <= 角度 <=360 に変換する
If textdeg > 360 Then AM360 InData, DEG: textdeg = DEG
元データが、マイナス時には、マイナスにする。
If CF = 1 Then textdeg = -textdeg
End Sub
---------------------------------------------------------------------
角度を -360 <= 角度 <=360にするサブルーチン
引 数 : InData(度.分秒 or 度) As Variant
戻り値 : PM360 (度.分秒 or 度) As Variant
Sub AM360(InData, PM360 As Variant)
データ未設定 エラー処理
If InData = "" Then PM360 = "": Exit Sub
Else
CF = 0
角度はマイナスか?
マイナスとの時には、絶対値を取りプラスの値にする。
If InData < 0 Then CF = 1: InData = Abs(InData) <-- 絶対値を取る。
360より大きい時には、360以内にする。
(元データ)÷360の整数値に、360を掛けて引く
If InData > 360 Then InData = InData - Int(InData / 360) * 360
元データが、マイナス時には、マイナスにする
If CF = 1 Then InData = -InData
PM360 = InData <--- 変換結果を設定する。
End If
End Sub |
|