Attribute VB_Name = "fem" Option Explicit '有限要素法( Finite Element Method )データ構造定義 '節点 node Type FEM_NODE 'データファイル定義データ nNo As Integer '節点番号 sngX As Single 'x座標 sngY As Single 'y座標 End Type '特性 characteristic Type FEM_CHAR 'データファイル定義データ nNo As Integer '特性番号 sngA As Single '断面積 sectional area sngI As Single '断面二次モーメント moment of second order sngE As Single 'ヤング係数 Young's modulus sngG As Single 'ねじり剛性 torsional rigidity End Type '部材 member Type FEM_MEMBER 'データファイル定義データ nNo As Integer '部材番号 nNode1 As Integer '節点番号1 nNode2 As Integer '節点番号2 nChar As Integer '特性番号 '内部処理用データ nN1Index As Integer '節点データ配列における節点番号1(nNode1)のインデックス nN2Index As Integer '節点データ配列における節点番号2(nNode2)のインデックス nCIndex As Integer '特性データ配列における特性番号のインデックス End Type '荷重 load Type FEM_LOAD 'データファイル定義データ nNode As Integer '節点番号 sngFx As Single '水平荷重 sngFy As Single '鉛直荷重 sngM As Single 'モーメント '内部処理用データ nNIndex As Integer '節点データ配列における節点番号(nNode)のインデックス End Type '境界条件 boundary condition Type FEM_BOUNDARY 'データファイル定義データ nNode As Integer '節点番号 nD1 As Integer '変位 nD2 As Integer '変位 nD3 As Integer '変位 '内部処理用データ nNIndex As Integer '節点データ配列における節点番号(nNode)のインデックス End Type Public Const DATAFILE_NO = 1 Public Const WORKFILE1_NO = 2 Public Const WORKFILE2_NO = 3 Public Const OUTFILE_NO = 4 Public nNumOfNode, nNumOfChar, nNumOfMember, nNumOfLoad, nNumOfBoundary As Integer Public NodeData() As FEM_NODE Public CharData() As FEM_CHAR Public MemberData() As FEM_MEMBER Public LoadData() As FEM_LOAD Public BoundaryData() As FEM_BOUNDARY Public nMtrxSize As Integer Public GKMtrx() As Double '要素剛性マトリックス Public GFMtrx() As Double '荷重マトリックス Public GXMtrx() As Double '変位マトリックス Public dblDMax, dblNMax, dblQMax, dblMMax As Double Public file2 As String '[機能] 選択された解析モデル用のファイルを開き、解析用の構造体配列に展開 '[入力] strFileName : ファイル名 Public Function FEMReadData(strFileName As String) As Boolean On Error GoTo Err_Handle Dim Comment As String Dim i, j As Integer Dim nStart, nCutLen file2 = strFileName Open strFileName For Input As #DATAFILE_NO Line Input #DATAFILE_NO, Comment If Comment <> "FEMDATA" Then MsgBox ("ファイルタイプが不正です。本ソフト用のファイルであるか確認してください。") FEMReadData = False Exit Function End If Line Input #DATAFILE_NO, Comment Line Input #DATAFILE_NO, Comment Input #DATAFILE_NO, nNumOfNode, nNumOfChar, nNumOfMember, nNumOfLoad, nNumOfBoundary ReDim NodeData(nNumOfNode) ReDim CharData(nNumOfChar) ReDim MemberData(nNumOfMember) ReDim LoadData(nNumOfLoad) ReDim BoundaryData(nNumOfBoundary) '節点データ Line Input #DATAFILE_NO, Comment For i = 0 To (nNumOfNode - 1) Input #DATAFILE_NO, NodeData(i).nNo, NodeData(i).sngX, NodeData(i).sngY Next i '特性データ Line Input #DATAFILE_NO, Comment For i = 0 To (nNumOfChar - 1) Input #DATAFILE_NO, CharData(i).nNo, CharData(i).sngA, CharData(i).sngI, CharData(i).sngE Next i '部材データ Line Input #DATAFILE_NO, Comment For i = 0 To (nNumOfMember - 1) Input #DATAFILE_NO, MemberData(i).nNo, MemberData(i).nNode1, MemberData(i).nNode2, MemberData(i).nChar Next i '負荷データ Line Input #DATAFILE_NO, Comment For i = 0 To (nNumOfLoad - 1) Input #DATAFILE_NO, LoadData(i).nNode, LoadData(i).sngFx, LoadData(i).sngFy, LoadData(i).sngM Next i '境界データ Line Input #DATAFILE_NO, Comment For i = 0 To (nNumOfBoundary - 1) Input #DATAFILE_NO, BoundaryData(i).nNode, BoundaryData(i).nD1, BoundaryData(i).nD2, BoundaryData(i).nD3 Next i Close #DATAFILE_NO FEMReadData = True Exit Function Err_Handle: MsgBox ("解析モデルファイルの読み込みに失敗しました。データに不正がないか確認してください。") FEMReadData = False End Function '[機能] 解析モデルのデータ(解析用の構造体配列)を各々関連付ける Public Function FEMRelateData() As Boolean Dim MsgString As String Dim i, j As Integer For i = 0 To (nNumOfMember - 1) MemberData(i).nN1Index = -1 MemberData(i).nN2Index = -1 MemberData(i).nCIndex = -1 For j = 0 To (nNumOfNode - 1) If MemberData(i).nNode1 = NodeData(j).nNo Then MemberData(i).nN1Index = j Exit For End If Next j For j = 0 To (nNumOfNode - 1) If MemberData(i).nNode2 = NodeData(j).nNo Then MemberData(i).nN2Index = j Exit For End If Next j If (MemberData(i).nN1Index < 0) Or (MemberData(i).nN2Index < 0) Then MsgString = "部材データ定義において指定された節点データがありません。部材No=" & MemberData(i).nNo MsgBox (MsgString) FEMRelateData = False Exit Function End If For j = 0 To (nNumOfChar - 1) If MemberData(i).nChar = CharData(j).nNo Then MemberData(i).nCIndex = j Exit For End If Next j If MemberData(i).nCIndex < 0 Then MsgString = "部材データ定義において指定された特性データがありません。部材No=" & MemberData(i).nNo MsgBox (MsgString) FEMRelateData = False Exit Function End If Next i For i = 0 To (nNumOfLoad - 1) LoadData(i).nNIndex = -1 For j = 0 To (nNumOfNode - 1) If LoadData(i).nNode = NodeData(j).nNo Then LoadData(i).nNIndex = j Exit For End If Next j If LoadData(i).nNIndex < 0 Then MsgString = "負荷データ定義において指定された特性データがありません。" MsgBox (MsgString) FEMRelateData = False Exit Function End If Next i For i = 0 To (nNumOfBoundary - 1) BoundaryData(i).nNIndex = -1 For j = 0 To (nNumOfNode - 1) If BoundaryData(i).nNode = NodeData(j).nNo Then BoundaryData(i).nNIndex = j Exit For End If Next j If BoundaryData(i).nNIndex < 0 Then MsgString = "境界データ定義において指定された特性データがありません。" MsgBox (MsgString) FEMRelateData = False Exit Function End If Next i FEMRelateData = True End Function '[機能] 有限要素法による構造解析をおこなう Public Sub FEMCalculate() '連立方程式により変位を求めるために必要な領域を確保 nMtrxSize = nNumOfNode * 3 ReDim GKMtrx(nMtrxSize, nMtrxSize) ReDim GFMtrx(nMtrxSize) ReDim GXMtrx(nMtrxSize) '剛性マトリックス作成と座標変換 Call MakeGKMtrx_TrussFrame '荷重導入 Call IncludeLoad '境界条件導入 Call IncludeBoundary '変位計算 Call CalculateDisplacement '応力計算 Call CalculateStress 'データをファイルに出力 Call OutputData End Sub '[機能] 剛性マトリックス作成と座標変換 Private Sub MakeGKMtrx_TrussFrame() Dim m, i, j, k As Integer Dim sngDX, sngDY As Single Dim Node1 As FEM_NODE Dim Node2 As FEM_NODE Dim Char As FEM_CHAR Dim Member As FEM_MEMBER Dim dblL, dblA, dblE, dblI, dblSin, dblCos As Double Dim dblG1, dblG2, dblG3, dblG4, dblG5 As Double Dim strWorkFile1 As String strWorkFile1 = App.Path & "\work1.txt" ' strWorkFile1 = ActiveWorkbook.Path & "\work1.txt" Open strWorkFile1 For Output As #WORKFILE1_NO '部材数分ループ */ For m = 0 To (nNumOfMember - 1) '構成部材を順番に取得 Member = MemberData(m) '部材の節点、特性を取得 Node1 = NodeData(Member.nN1Index) Node2 = NodeData(Member.nN2Index) Char = CharData(Member.nCIndex) '部材のx成分、y成分 sngDX = Node2.sngX - Node1.sngX sngDY = Node2.sngY - Node1.sngY '部材長 dblL = Sqr(sngDX ^ 2 + sngDY ^ 2) '部材のCos、Sin dblCos = sngDX / dblL dblSin = sngDY / dblL '断面積、断面二次モーメント、ヤング係数 dblA = Char.sngA dblI = Char.sngI dblE = Char.sngE dblG1 = dblE * dblA / dblL dblG2 = 2 * dblE * dblI / dblL dblG3 = 4 * dblE * dblI / dblL dblG4 = 6 * dblE * dblI / dblL ^ 2 dblG5 = 12 * dblE * dblI / dblL ^ 3 '部材座標での要素剛性マトリックス 'KMtrx = ' ┌ dblG1, 0, 0, -dblG1, 0, 0 ┐ ' │ 0, dblG5, dblG4, 0, -dblG5, dblG4 │ ' │ 0, dblG4, dblG3, 0, -dblG4, dblG2 │ ' │ -dblG1, 0, 0, dblG1, 0, 0 │ ' │ 0, -dblG5, -dblG4, 0, dblG5, -dblG4 │ ' └ 0, dblG4, dblG2, 0, -dblG4, dblG3 ┘ Dim KMtrx(6, 6) As Double KMtrx(0, 0) = dblG1: KMtrx(0, 3) = -dblG1 KMtrx(3, 0) = -dblG1: KMtrx(3, 3) = dblG1 KMtrx(2, 5) = dblG2: KMtrx(5, 2) = dblG2 KMtrx(2, 2) = dblG3: KMtrx(5, 5) = dblG3 KMtrx(1, 2) = dblG4: KMtrx(1, 5) = dblG4 KMtrx(2, 1) = dblG4: KMtrx(2, 4) = -dblG4 KMtrx(4, 2) = -dblG4: KMtrx(4, 5) = -dblG4 KMtrx(5, 1) = dblG4: KMtrx(5, 4) = -dblG4 KMtrx(1, 1) = dblG5: KMtrx(1, 4) = -dblG5 KMtrx(4, 1) = -dblG5: KMtrx(4, 4) = dblG5 '座標変換マトリックス 'TMtrx = ' ┌ dblCos, dblSin, 0, 0, 0, 0 ┐ ' │ -dblSin, dblCos, 0, 0, 0, 0 │ ' │ 0, 0, 1, 0, 0, 0 │ ' │ 0, 0, 0, dblCos, dblSin, 0 │ ' │ 0, 0, 0, -dblSin, dblCos, 0 │ ' └ 0, 0, 0, 0, 0, 1 ┘ Dim TMtrx(6, 6) As Double TMtrx(0, 0) = dblCos: TMtrx(1, 1) = dblCos TMtrx(0, 1) = dblSin: TMtrx(1, 0) = -dblSin TMtrx(3, 3) = dblCos: TMtrx(4, 4) = dblCos TMtrx(3, 4) = dblSin: TMtrx(4, 3) = -dblSin TMtrx(2, 2) = 1: TMtrx(5, 5) = 1 '座標変換マトリックスの逆行列 'TIMtrx = ' ┌ dblCos, -dblSin, 0, 0, 0, 0 ┐ ' │ dblSin, dblCos, 0, 0, 0, 0 │ ' │ 0, 0, 1, 0, 0, 0 │ ' │ 0, 0, 0, dblCos, -dblSin, 0 │ ' │ 0, 0, 0, dblSin, dblCos, 0 │ ' └ 0, 0, 0, 0, 0, 1 ┘ Dim TIMtrx(6, 6) As Double TIMtrx(0, 0) = dblCos: TIMtrx(1, 1) = dblCos TIMtrx(0, 1) = -dblSin: TIMtrx(1, 0) = dblSin TIMtrx(3, 3) = dblCos: TIMtrx(4, 4) = dblCos TIMtrx(3, 4) = -dblSin: TIMtrx(4, 3) = dblSin TIMtrx(2, 2) = 1: TIMtrx(5, 5) = 1 '作業用マトリックス Dim KTMtrx(6, 6) As Double For i = 0 To 5 For j = 0 To 5 KTMtrx(i, j) = 0 For k = 0 To 5 KTMtrx(i, j) = KTMtrx(i, j) + (KMtrx(i, k) * TMtrx(k, j)) Next k '作業用ファイルへこのマトリクスの値を書き込む Print #WORKFILE1_NO, CStr(KTMtrx(i, j)) Next j Next i Dim Index(6) As Integer Index(0) = Member.nN1Index * 3 Index(1) = Member.nN1Index * 3 + 1 Index(2) = Member.nN1Index * 3 + 2 Index(3) = Member.nN2Index * 3 Index(4) = Member.nN2Index * 3 + 1 Index(5) = Member.nN2Index * 3 + 2 Dim dblWork As Double For i = 0 To 5 For j = 0 To 5 dblWork = 0 For k = 0 To 5 dblWork = dblWork + TIMtrx(i, k) * KTMtrx(k, j) Next k GKMtrx(Index(i), Index(j)) = GKMtrx(Index(i), Index(j)) + dblWork Next j Next i Next m Close #WORKFILE1_NO End Sub '[機能] 荷重導入 Private Sub IncludeLoad() Dim i As Integer Dim Load As FEM_LOAD For i = 0 To (nNumOfLoad - 1) Load = LoadData(i) GFMtrx(Load.nNIndex * 3) = Load.sngFx GFMtrx(Load.nNIndex * 3 + 1) = Load.sngFy GFMtrx(Load.nNIndex * 3 + 2) = Load.sngM Next i End Sub '[機能] 境界条件導入 Private Sub IncludeBoundary() Dim i, k As Integer Dim Boundary As FEM_BOUNDARY For i = 0 To (nNumOfBoundary - 1) Boundary = BoundaryData(i) If Boundary.nD1 <> 0 Then For k = 0 To (nMtrxSize - 1) GKMtrx(Boundary.nNIndex * 3, k) = 0 GKMtrx(k, Boundary.nNIndex * 3) = 0 Next k GKMtrx(Boundary.nNIndex * 3, Boundary.nNIndex * 3) = 1 GFMtrx(Boundary.nNIndex * 3) = 0 End If If Boundary.nD2 <> 0 Then For k = 0 To (nMtrxSize - 1) GKMtrx(Boundary.nNIndex * 3 + 1, k) = 0 GKMtrx(k, Boundary.nNIndex * 3 + 1) = 0 Next k GKMtrx(Boundary.nNIndex * 3 + 1, Boundary.nNIndex * 3 + 1) = 1 GFMtrx(Boundary.nNIndex * 3 + 1) = 0 End If If Boundary.nD3 <> 0 Then For k = 0 To (nMtrxSize - 1) GKMtrx(Boundary.nNIndex * 3 + 2, k) = 0 GKMtrx(k, Boundary.nNIndex * 3 + 2) = 0 Next k GKMtrx(Boundary.nNIndex * 3 + 2, Boundary.nNIndex * 3 + 2) = 1 GFMtrx(Boundary.nNIndex * 3 + 2) = 0 End If Next i End Sub '[機能] 変位計算 Private Sub CalculateDisplacement() Call NCLSetData(nMtrxSize, GKMtrx, GFMtrx) Call NCLCalculate Call NCLGetData(nMtrxSize, GXMtrx) End Sub '[機能] 応力計算 Private Sub CalculateStress() Dim m, i, j, k As Integer Dim Member As FEM_MEMBER Dim strWorkFile1, strWorkFile2 As String strWorkFile1 = App.Path & "\work1.txt" ' strWorkFile1 = ActiveWorkbook.Path & "\work1.txt" Open strWorkFile1 For Input As #WORKFILE1_NO strWorkFile2 = App.Path & "\work2.txt" ' strWorkFile2 = ActiveWorkbook.Path & "\work2.txt" Open strWorkFile2 For Output As #WORKFILE2_NO '最大変位、最大応力を初期化 dblDMax = 0 dblNMax = 0 dblQMax = 0 dblMMax = 0 '部材数分ループ */ For m = 0 To (nNumOfMember - 1) '構成部材を順番に取得 Member = MemberData(m) Dim XMtrx(6) As Double XMtrx(0) = GXMtrx(Member.nN1Index * 3) XMtrx(1) = GXMtrx(Member.nN1Index * 3 + 1) XMtrx(2) = GXMtrx(Member.nN1Index * 3 + 2) XMtrx(3) = GXMtrx(Member.nN2Index * 3) XMtrx(4) = GXMtrx(Member.nN2Index * 3 + 1) XMtrx(5) = GXMtrx(Member.nN2Index * 3 + 2) '最大変位検索 If dblDMax < Abs(XMtrx(0)) Then dblDMax = Abs(XMtrx(0)) End If If dblDMax < Abs(XMtrx(3)) Then dblDMax = Abs(XMtrx(3)) End If If dblDMax < Abs(XMtrx(1)) Then dblDMax = Abs(XMtrx(1)) End If If dblDMax < Abs(XMtrx(4)) Then dblDMax = Abs(XMtrx(4)) End If '作業用ファイルからマトリクスの値を読み込む Dim KTMtrx(6, 6) As Double For i = 0 To 5 For j = 0 To 5 Input #WORKFILE1_NO, KTMtrx(i, j) Next j Next i Dim FMtrx(6) As Double For i = 0 To 5 FMtrx(i) = 0 For k = 0 To 5 FMtrx(i) = FMtrx(i) + KTMtrx(i, k) * XMtrx(k) Next k FMtrx(i) = FMtrx(i) / 1000 Print #WORKFILE2_NO, FMtrx(i) Next i '最大応力検索 If dblNMax < Abs(FMtrx(3)) Then dblNMax = Abs(FMtrx(3)) End If If dblQMax < Abs(FMtrx(1)) Then dblQMax = Abs(FMtrx(1)) End If If dblMMax < Abs(FMtrx(2)) Then dblMMax = Abs(FMtrx(2)) End If If dblMMax < Abs(FMtrx(5)) Then dblMMax = Abs(FMtrx(5)) End If Next m Close #WORKFILE1_NO Close #WORKFILE2_NO End Sub Private Sub OutputData() Dim i, k As Integer Dim Node As FEM_NODE Dim Char As FEM_CHAR Dim Member As FEM_MEMBER Dim Load As FEM_LOAD Dim Boundary As FEM_BOUNDARY Dim strWorkFile2, strOutFile, strLineData As String 'Dim file2 As String Dim ret As Integer ret = Len(file2) strOutFile = Left(file2, ret - 4) & "_res.txt" strWorkFile2 = App.Path & "\work2.txt" ' strWorkFile2 = ActiveWorkbook.Path & "\work2.txt" Open strWorkFile2 For Input As #WORKFILE2_NO 'strOutFile = App.Path & "\fembegr.txt" ' strOutFile = ActiveWorkbook.Path & "\fembegr.txt" Open strOutFile For Output As #OUTFILE_NO Print #OUTFILE_NO, "有限要素法による構造解析" Print #OUTFILE_NO, "" Print #OUTFILE_NO, "■ 節 点 座 標 ■" Print #OUTFILE_NO, "節点No." & Chr(44) & Chr(9) & "x[p]" & Chr(44) & Chr(9) & "y[cm]" For i = 0 To (nNumOfNode - 1) Node = NodeData(i) strLineData = Node.nNo & Chr(44) & Chr(9) & Node.sngX & Chr(44) & Chr(9) & Node.sngY Print #OUTFILE_NO, strLineData Next i Print #OUTFILE_NO, "" Print #OUTFILE_NO, "■ 断 面 特 性 ■" Print #OUTFILE_NO, "断面特性No." & Chr(44) & Chr(9) & "断面積[p2]" & Chr(44) & Chr(9) & "断面二次[p4]" & Chr(44) & Chr(9) & "ヤング係数[s/p2]" For i = 0 To (nNumOfChar - 1) Char = CharData(i) strLineData = Char.nNo & Chr(44) & Chr(9) & Char.sngA & Chr(44) & Chr(9) & Char.sngI & Chr(44) & Chr(9) & Char.sngE Print #OUTFILE_NO, strLineData Next i Print #OUTFILE_NO, "" Print #OUTFILE_NO, "■ 部 材 ■" Print #OUTFILE_NO, "部材No." & Chr(44) & Chr(9) & "節点1" & Chr(44) & Chr(9) & "節点2" & Chr(44) & Chr(9) & "断面特性" For i = 0 To (nNumOfMember - 1) Member = MemberData(i) strLineData = Member.nNo & Chr(44) & Chr(9) & Member.nNode1 & Chr(44) & Chr(9) & Member.nNode2 & Chr(44) & Chr(9) & Member.nChar Print #OUTFILE_NO, strLineData Next i Print #OUTFILE_NO, "" Print #OUTFILE_NO, "■ 節 点 荷 重 ■" Print #OUTFILE_NO, "節点" & Chr(44) & Chr(9) & "Fx[s]" & Chr(44) & Chr(9) & "Fy[s]" & Chr(44) & Chr(9) & "M[s・p]" For i = 0 To (nNumOfLoad - 1) Load = LoadData(i) strLineData = Load.nNode & Chr(44) & Chr(9) & Load.sngFx & Chr(44) & Chr(9) & Load.sngFy & Chr(44) & Chr(9) & Load.sngM Print #OUTFILE_NO, strLineData Next i Print #OUTFILE_NO, "" Print #OUTFILE_NO, "■ 境 界 条 件 ■" Print #OUTFILE_NO, "節点" & Chr(44) & Chr(9) & "u" & Chr(44) & Chr(9) & "v" & Chr(44) & Chr(9) & "θ (0:自由,1:拘束)" For i = 0 To (nNumOfBoundary - 1) Boundary = BoundaryData(i) strLineData = Boundary.nNode & Chr(44) & Chr(9) & Boundary.nD1 & Chr(44) & Chr(9) & Boundary.nD2 & Chr(44) & Chr(9) & Boundary.nD3 Print #OUTFILE_NO, strLineData Next i Print #OUTFILE_NO, "" Print #OUTFILE_NO, "= 変 位 =" Print #OUTFILE_NO, "節点No." & Chr(44) & Chr(9) & "変位u[p]" & Chr(44) & Chr(9) & "変位v[p]" & Chr(44) & Chr(9) & "回転変位θ[rad.]" For i = 0 To (nMtrxSize - 1) Step 3 Node = NodeData(i / 3) strLineData = Node.nNo & Chr(44) & Chr(9) strLineData = strLineData & Format(GXMtrx(i), "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(GXMtrx(i + 1), "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(GXMtrx(i + 2), "0.00000") Print #OUTFILE_NO, strLineData Next i Print #OUTFILE_NO, "" Print #OUTFILE_NO, "= 部 材 応 力 =" Print #OUTFILE_NO, "部材No." & Chr(44) & Chr(9) & "節点1No." & Chr(44) & Chr(9) & "節点2No." & Chr(44) & Chr(9) & "N1[t]" & Chr(44) & Chr(9) & "Q1[t]" & Chr(44) & Chr(9) & "M1[t・m]" & Chr(44) & Chr(9) & "N2[t]" & Chr(44) & Chr(9) & "Q2[t]" & Chr(44) & Chr(9) & "M2[t・m]" For i = 0 To (nNumOfMember - 1) Member = MemberData(i) Dim FMtrx(6) As Double For k = 0 To 5 Input #WORKFILE2_NO, FMtrx(k) Next k strLineData = Member.nNo & Chr(44) & Chr(9) & Member.nNode1 & Chr(44) & Chr(9) & Member.nNode2 & Chr(44) & Chr(9) strLineData = strLineData & Format(FMtrx(0), "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(FMtrx(1), "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(FMtrx(2) / 100, "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(FMtrx(3), "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(FMtrx(4), "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(FMtrx(5) / 100, "0.00000") Print #OUTFILE_NO, strLineData Next i Print #OUTFILE_NO, "" Print #OUTFILE_NO, "= 解 析 最 大 値 =" Print #OUTFILE_NO, "δ[p]" & Chr(44) & Chr(9) & "M[t・m]" & Chr(44) & Chr(9) & "Q[t]" & Chr(44) & Chr(9) & "N[t]" strLineData = Format(dblDMax, "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(dblMMax / 100, "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(dblQMax, "0.00000") & Chr(44) & Chr(9) strLineData = strLineData & Format(dblNMax, "0.00000") Print #OUTFILE_NO, strLineData Close #OUTFILE_NO Close #WORKFILE2_NO End Sub