advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 3685 for グラフ (0.002 sec.)
[[20191104143055]]
#score: 3272
@digest: e77a64de0153e30a31031c292150766c
@id: 81272
@mdate: 2019-11-06T08:25:26Z
@size: 69263
@type: text/plain
#keywords: 性列 (594244), 限規 (402795), 級幅 (334216), 級数 (311176), 列no (285377), 度数 (263268), フ. (256192), 特性 (248520), クmi (238355), 級表 (219429), 線mi (203508), 数級 (183453), 規格 (172820), 幅開 (169176), 性no (160245), 準グ (159285), 法線 (150528), 数変 (125620), 定桁 (107941), 幅設 (97772), 列グ (94353), 数_ (87586), 表. (86426), 下限 (76014), タ. (74220), 更. (66664), ヒス (63314), 測定 (62880), 数表 (62815), activechart (60408), 級の (55931), 示= (46133)
『コードと仕組みを解説してほしい』(める)
こんにちは。お世話になっております。 先日ヒストグラム作成マクロが正常に作動しない件でスレを建てましたが かなり間が空いてしまったので新しくトピックを作成させて頂きます。 工程能力を調べるために表に数値を打ち込みボタンを押すと ヒストグラムが作成されるマクロが組み込まれたエクセルファイルがあります 20年近く前に組まれたマクロなので作成者は定年退職しております office365になってからこのマクロが正常に作動しないということで 正常に作動するように直すよう頼まれました しかし私の技量をかなり上回った方が作成されたようで理解が追いつきません なんとなく、なのですがマクロ自体にそこまで問題はないものの 元となるグラフが何かおかしい状態のため、ヒストグラムの上限より上の数値が勝手に組み込まれた表になってしまうのかなと感じています しかしコードの何がどう作動しているのかかなり複雑で確証がありません そこで図々しいお願いなのですが何故ヒストグラムが正常に表示されないのか 原因を教えていただけないでしょうか Excelファイル https://1drv.ms/x/s!AiG7HQmAhNJPg1HMM8EtIS5s5tjU?e=YqG3Kj イメージ画像 https://1drv.ms/u/s!AiG7HQmAhNJPg1alPSov4MS_Xb39?e=SFp1gw よろしくお願いします < 使用 Excel:Office365、使用 OS:Windows10 > ---- 危険なものには手を出したくないです。 コードだけでもこちらに貼付できませんか? それと、過去のスレッドの番号を明記して下さい。 (γ) 2019/11/04(月) 15:07 ---- >正常に作動するように直すよう頼まれました 自分で直すことができないものをなぜ引き受けるのですか。 きっぱりと断りましょう。 URLを見て直してくださいというのはもってのほかです。 会社の情報を漏らしているようなものですよ。 () 2019/11/04(月) 15:22 ---- 以前のスレッドはこちらです [[20191017132931]] 『過去のエクセルファイルのマクロコードがVBAで表氏x(める) 確かにウイルス、あるいはマクロの誤作動によるクラッシュなど危険はありますもんね・・・ 長くなりますがご容赦下さい。 『』はシートに埋め込まれたコードです 【】内に書かれているのは標準モジュール下にあるモジュールの名前です 『Sheet6(データ)』 Private Sub BtnCp_Click() 工程能力 End Sub Private Sub BtnCp時系列_Click() 工程能力時系列 End Sub Private Sub Btn時系列グラフ_Click() 時系列グラフ End Sub 『Sheet9(基準グラフ)』 Private Sub Worksheet_BeforeDelete() End Sub Private Sub Worksheet_PivotTableBeforeDiscardChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long) End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 【Md0初期設定】 Option Explicit '-------名前の定義「データ表」の縦位置--- Public Const CdNo = 5, Cd品番 = 6, Cd品名 = 7, Cd特性 = 8, Cd規格 = 9 Public Const Cd規格上限 = 10, Cd規格下限 = 11, C実行 = 12 Public Const Cdデータ開始 = 14 '-------グラフ Public Const G記入開始行 = 5, G1No = 1, G1特性 = 2, G1グラフCp = 3, G1平均 = 4, G1σ = 5, G1Cp = 6, _ G1評価 = 7, G1備考 = 8 Public Const G2No = 1, G2特性 = 2, G2グラフ管理図 = 3, G2平均 = 4, G2σ = 5, G2Cp = 6, _ G2評価 = 7, G2備考 = 8 Public Const G3No = 1, G3特性 = 2, G3グラフ管理図 = 3, G3グラフCp = 4, G3平均 = 5, G3σ = 6, G3Cp = 7, _ G3評価 = 8, G3備考 = 9 '-------名前の定義「度数データ」の縦位置--- Public Const C度数品番 = 3, C度数品名 = 4, C度数特性 = 5, C度数規格 = 6, C度数上限 = 7, C度数下限 = 8, _ C度数N数 = 9, C度数平均値 = 10, C度数Cp = 11, C度数Cpk = 12, _ C度数標準偏差 = 13, C度数最大値 = 14, C度数最小値 = 15, C度数判定 = 16, C度数級幅開始 = 18 '-------------------------------------- Public Const C_MAX_級数 = 100 '級数の配列最大値 Public Const C_級文字数 = 3 '級の文字数が3以下の場合,○〜○表示 Public Const C_級文字数_多 = 5 '級の文字数が3以下の場合,○〜表示,6以上は中央値表示 Public Const CC行開始位置 = 5 '文字の縦側 貼り付け位置 '-------用紙の設定--------------- Public 横個数 As Integer 'グラグの横方向の貼り付け個数 Public 列位置(4) As Integer '文字の横側 貼り付け位置 '--------------------------------------- Public Shtデータ As Object Public Sht度数表 As Object Public Shtグラフ As Object Public Sht基準グラフ As Object Public グラフShtNo As Integer 'Cpグラフ:1 管理図グラフ:2 Cp管理図グラフ:3 Public Gf修正 As Integer 'グラフを貼り付けでなく、修正する場合「true Public PltエリアL As Single 'グラフの左位置 Public PltエリアW As Single 'グラフの幅 Public Plt_Y軸 As Single 'グラフのY軸位置 Public 矢平均位置Lft As Single 'グラフの平均値の矢印左位置 Public 矢平均位置Wdh As Single 'グラフの平均値の矢印右位置 Public Txt平均値Wdh As Single 'グラフの平均値の幅」 Public 済の有無 As Integer 'データ表に済がある時は修正モードにする '-------変数名--------------- Public 測定値() As Double '測定データ Public N数 As Integer '測定データ数 Public 最大値 '測定データ最大値 Public 最小値 '測定データ最小値 Public 平均値 '測定データ最小値 Public 標準偏差 '標準偏差 Public Cp '工程能力指数 Public Cpk '工程能力指数 Public 判定 As String Public 上限規格 '規格の上限値 Public 下限規格 '規格の下限値 Public 規格種別 As String '両:両側規格、上:上限規格、下:下限規格 Public 級数 As Integer '度数表の級数 Public 特性数 As Integer ' データの特性数 Public 特性No As Integer '現在処理中の特性項目 Public 特性列No As Integer '現在処理中の特性列No Public 特性列No2 As Integer Public 測定桁 As Integer '測定単位の桁数(マイナスは小数点) Public 実行 As String '実行済みのデータか 'Public is級幅Dlg As Boolean Public 列No As Integer Public 列特性 As Integer Public 列グラフ管理図 As Integer Public 列グラフCp As Integer Public 列平均 As Integer Public 列σ As Integer Public 列Cp As Integer Public 列評価 As Integer Public 列備考 As Integer Sub 選定Cpグラフ() グラフShtNo = 1 End Sub Sub 選定管理図グラフ() グラフShtNo = 2 End Sub Sub 選定Cp管理図グラフ() グラフShtNo = 3 End Sub Sub 初期設定() Set Shtデータ = Sheets("データ") Set Sht度数表 = Sheets("度数") Set Sht基準グラフ = Sheets("基準グラフ") Select Case グラフShtNo Case 1 Set Shtグラフ = Sheets("Cpグラフ") 列No = G1No 列特性 = G1特性 列グラフ管理図 = 0 列グラフCp = G1グラフCp 列平均 = G1平均 列σ = G1σ 列Cp = G1Cp 列評価 = G1評価 列備考 = G1備考 Case 2 Set Shtグラフ = Sheets("時系列グラフ") 列No = G2No 列特性 = G2特性 列グラフ管理図 = G2グラフ管理図 列グラフCp = 0 列平均 = G2平均 列σ = G2σ 列Cp = G2Cp 列評価 = G2評価 列備考 = G2備考 Case Else Set Shtグラフ = Sheets("Cp時系列グラフ") 列No = G3No 列特性 = G3特性 列グラフ管理図 = G3グラフ管理図 列グラフCp = G3グラフCp 列平均 = G3平均 列σ = G3σ 列Cp = G3Cp 列評価 = G3評価 列備考 = G3備考 End Select End Sub 【Md1メイン】 Sub クリアデータ() Dim 最終行 As Integer Dim 最終列 As Integer Set Shtデータ = Sheets("データ") 最終行 = Shtデータ.UsedRange.Rows.Count 最終列 = Shtデータ.UsedRange.Columns.Count Shtデータ.Range(Shtデータ.Cells(Cd品番, 3), Shtデータ.Cells(C実行, 最終列)).ClearContents Shtデータ.Range(Shtデータ.Cells(Cdデータ開始, 3), Shtデータ.Cells(最終行, 最終列)).ClearContents End Sub '========Sheetグラフの記入箇所をクリア Sub クリアグラフ() Dim 最終行 As Integer Shtグラフ.Select ActiveSheet.DrawingObjects.Delete 'グラフをクリア 最終行 = Shtグラフ.UsedRange.Rows.Count Range(Shtグラフ.Rows(G記入開始行), Shtグラフ.Rows(最終行)).ClearContents End Sub '========Sheetグラフの記入箇所をクリア Sub クリア度数() Dim 最終行 As Integer 最終行 = Sht度数表.UsedRange.Rows.Count Sht度数表.Range(Sht度数表.Rows(C度数級幅開始), Sht度数表.Rows(最終行)).ClearContents End Sub '======用紙選択 Sub 用紙() 横個数 = 1 If Shtデータ.OptionButtons("OptA4").Value = xlOn Then '用紙A4 Shtグラフ.Range(Shtグラフ.Columns(列No + 列備考), Shtグラフ.Columns(列備考 * 2)).ClearContents On Error Resume Next Shtグラフ.PageSetup.PaperSize = xlPaperA4 Else '用紙A3 Shtグラフ.Range(Shtグラフ.Columns(列No), Shtグラフ.Columns(列備考)).Select Selection.Copy Shtグラフ.Cells(1, 列No + 列備考).Select Shtグラフ.Paste Shtグラフ.Cells(1, 1).Select Shtグラフ.Cells(1, 列No + 1).Value = "" 横個数 = 2 On Error Resume Next Shtグラフ.PageSetup.PaperSize = xlPaperA3 End If On Error GoTo 0 End Sub 【Md2 工程能力メイン】 Option Explicit Dim response As Integer Dim MsgType As Integer Dim Msg As String Sub 工程能力メイン() Dim i As Integer Dim 最終行 As Integer 'Dim Dlg紙配置W As Single '*******95/9-2追加***** 'Dim Dlg紙配置H As Single '*******95/9-2追加***** '------初期化-------------- 'Shtデータ.Select Gf修正 = False 済の有無 = False Cpk = Empty 上限規格 = Empty 下限規格 = Empty '------データの有無-------------- i = 3 While (Shtデータ.Cells(Cdデータ開始, i).Value > " ") Or _ (Shtデータ.Cells(Cd規格上限, i).Value > " ") Or _ (Shtデータ.Cells(Cd規格下限, i).Value > " ") If Shtデータ.Cells(C実行, i).Value = "済" Then 済の有無 = True End If i = i + 1 Wend 特性数 = i - 3 '-----特性数0の場合のエラーメッセージ If 特性数 <= 0 Then Msg = "データがありません" MsgType = vbExclamation + vbOKOnly ' OK ボタン response = MsgBox(Msg, MsgType, "エラーメッセージ") End End If '-------修正でない場合…データ表に済がある時は修正モードにする---- If 済の有無 = False Then '修正でない場合 クリア度数 '----Sheetグラフの記入箇所をクリア クリアグラフ 用紙 '用紙の設定 Else If Shtデータ.OptionButtons("OptA4").Value = xlOn Then '用紙A4 横個数 = 1 Else 横個数 = 2 End If End If 'Sht基準グラフ.ChartObjects("GraphCpSTD").Chart.ChartArea.Copy '----各特性を順番に処理------ Shtデータ.Select For 特性No = 1 To 特性数 '-----処理する列No------ 特性列No = 特性No + 2 特性列No2 = (特性No - 1) * 2 + 3 実行 = Shtデータ.Cells(C実行, 特性列No).Value '済の確認 If 実行 <> "済" Then '-----初期値-------- Dlg級数変更.Opt級数変更最初.Visible = False 規格種別 = "" '-----データの読み込み------- 一般データ '規格の読み込み:モジュール「Mdl工程能力」 If 実行 <> "異常" Then データ入力 'データの読み込み:モジュール「Mdlデータ」 If 実行 <> "異常" Then 統計 '統計量の計算:モジュール「Mdl統計」 度数 '度数表の作成:モジュール「Mdl度数」 '------実行「済」の記入------- Shtデータ.Cells(C実行, 特性列No).Value = "済" Shtデータ.Cells(C実行, 特性列No).Font.ColorIndex = 5 End If End If End If Next End Sub '****************規格の読み込み************************ Sub 一般データ() '------規格の読み込みと処理------------ 上限規格 = Shtデータ.Cells(Cd規格上限, 特性列No).Value 下限規格 = Shtデータ.Cells(Cd規格下限, 特性列No).Value 'If (上限規格 = Empty) Or (上限規格 <= " ") Then If (上限規格 <= " ") Then 'If 下限規格 = Empty Then If 下限規格 <= " " Then Msg = "規格値がありません" + Chr(13) + Chr(10) Msg = Msg + "このデータの実行を中止します" MsgType = vbCritical + vbOKOnly ' OK と キャンセル ボタン response = MsgBox(Msg, MsgType, "表題") 実行 = "異常" Shtデータ.Cells(C実行, 特性列No).Value = 実行 Shtデータ.Cells(C実行, 特性列No).Font.ColorIndex = 3 Else 規格種別 = "下" '下限規格 上限規格 = 0 下限規格 = CDbl(下限規格) End If 'ElseIf (下限規格 = Empty) Or (下限規格 <= " ") Then ElseIf (下限規格 <= " ") Then 規格種別 = "上" '上限規格 下限規格 = 0 上限規格 = CDbl(上限規格) ElseIf (CDbl(上限規格) <= CDbl(下限規格)) Then Msg = "上限規格 < 下限規格 で異常値です" + Chr(13) + Chr(10) Msg = Msg + "このデータの実行を中止します" MsgType = vbCritical + vbOKOnly ' OK と キャンセル ボタン response = MsgBox(Msg, MsgType, "表題") 実行 = "異常" Shtデータ.Cells(C実行, 特性列No).Value = 実行 Shtデータ.Cells(C実行, 特性列No).Font.ColorIndex = 3 Else 規格種別 = "両" '両側規格 上限規格 = CDbl(上限規格) 下限規格 = CDbl(下限規格) End If End Sub 【Md3 データ】 Option Explicit '*********************************** 'データを読み込む 'データ数を求める…「N数」 'データの種類数を求める…「種類_N数」 Dim response As Integer Dim MsgType As Integer Dim Msg As String Sub データ入力() Dim i As Integer Dim N As Integer Dim j As Integer Dim 一致 As Integer '読みこんだデータは前と同一データか Dim 繰返し数 As Integer '繰返しの同一データ数 Dim Msg As String Dim response As Integer Dim データ数Max As Integer Dim 読みデータ ' '-----初期値------------ i = 0 'データNo N = 1 'データNo*データ数 '種類_N数 = 0 '測定データ種類数 測定桁 = 100 データ数Max = Shtデータ.UsedRange.Rows.Count - Cdデータ開始 + 1 ReDim 測定値(データ数Max) 'While Shtデータ.Cells(i + Cdデータ開始, 特性列No).Value > " " 2003/9/7 ' On Error GoTo Error読み込み ' 測定値(N) = CDbl(Shtデータ.Cells(i + Cdデータ開始, 特性列No).Value) ' On Error GoTo 0 ' 測定単位 N '測定単位を調べる:モジュール「Mdlデータ」 '-------------- 'N = N + 1 'Error読み込みJump: ' i = i + 1 ' Wend For i = 0 To データ数Max 読みデータ = Shtデータ.Cells(i + Cdデータ開始, 特性列No).Value If 読みデータ > " " Then On Error GoTo Error読み込み 測定値(N) = CDbl(Shtデータ.Cells(i + Cdデータ開始, 特性列No).Value) On Error GoTo 0 測定単位 N '測定単位を調べる:モジュール「Mdlデータ」 N = N + 1 End If Error読み込みJump: Next N数 = N - 1 If N数 <= 1 Then Msg = "データ数がN=1のため" + Chr(13) + Chr(10) Msg = Msg + "このデータの実行を中止します" MsgType = vbCritical + vbOKOnly ' OK と キャンセル ボタン response = MsgBox(Msg, MsgType, "表題") 実行 = "異常" Shtデータ.Cells(C実行, 特性列No).Value = 実行 Shtデータ.Cells(C実行, 特性列No).Font.ColorIndex = 3 End If '統計 '統計量の計算(モジュール「Mdl統計」) 'MsgBox "測定桁 =" + Str$(測定桁) 'MsgBox "N数 =" + Str$(N数) 'MsgBox "種類_N数 =" + Str$(種類_N数) Exit Sub Error読み込み: Shtデータ.Activate Shtデータ.Cells(i + Cdデータ開始, 特性列No).Select Selection.Interior.ColorIndex = 3 Msg = "==データが数字でありません==" + Chr(13) + Chr(13) Msg = Msg + "中止しますか?" + Chr(13) + Chr(13) Msg = Msg + "(「いいえ」の場合、データを飛ばし続行)" response = MsgBox(Msg, vbYesNo) If response = vbYes Then End End If Shtグラフ.Activate Resume Error読み込みJump '-----繰り返し数の読み込みエラー ------ Error読み込みN: '98/1/15 Shtデータ.Activate Shtデータ.Cells(i + Cdデータ開始, 特性列No + 1).Select Selection.Interior.ColorIndex = 3 Msg = "==データが正数でありません==" + Chr(13) + Chr(13) Msg = Msg + "中止しますか?" + Chr(13) + Chr(13) Msg = Msg + "(「いいえ」の場合、データを飛ばし続行)" response = MsgBox(Msg, vbYesNo) If response = vbYes Then End End If Shtグラフ.Activate Resume Error読み込みJump End Sub '*************************************** ' データの測定単位「測定桁」を求める '*************************************** Sub 測定単位(N As Integer) 'データが少数点の場合,測定桁がマイナス Dim i As Integer Dim 余り As Double Dim 数値 As Double If InStr(1, Str(測定値(N)), ".") = 0 Then '少数でない場合 i = 0 '-----測定単位を求める If 測定値(N) <> 0 Then Do i = i + 1 余り = 測定値(N) Mod 10 ^ i Loop Until Abs(余り) > 0 If 測定桁 > i - 1 Then 測定桁 = i - 1 End If 'Else '測定桁 = 0 End If Else '少数の場合 i = 0 '-----測定単位を求める Do i = i - 1 数値 = 測定値(N) / 10 ^ i 数値 = Application.Round(数値, 5) 余り = 測定値(N) - Int(数値) * 10 ^ i 余り = Application.Round(余り, 6) Loop Until 余り = 0 If 測定桁 > i Then 測定桁 = i End If End If End Sub 【Md4統計】 Option Explicit '****************************************** '統計量の計算 ' 平均値,Cp,Cpk,標準偏差,最大値,最小値 '****************************************** Dim 色 As Integer '判定の文字色 Dim isNg As Boolean Sub 統計() Dim i As Integer Dim 公差幅 As Single Dim 規格中心 Dim カタヨリ As Single Dim 最終行 As Integer 最終行 = Shtグラフ.UsedRange.Rows.Count Sht基準グラフ.Range(Sht基準グラフ.Cells(4, 1), Sht基準グラフ.Cells(最終行, 1)).ClearContents '-----データの書き込み----------- For i = 1 To N数 Sht基準グラフ.Cells(i + 3, 1).Value = 測定値(i) Next '-----統計値の計算------------- 最大値 = Application.Max(Sht基準グラフ.Range( _ Sht基準グラフ.Cells(4, 1), Sht基準グラフ.Cells(N数 + 3, 1))) 最大値 = Application.Round(最大値, (測定桁 * -1)) 最小値 = Application.Min(Sht基準グラフ.Range( _ Sht基準グラフ.Cells(4, 1), Sht基準グラフ.Cells(N数 + 3, 1))) 最小値 = Application.Round(最小値, (測定桁 * -1)) 平均値 = Application.Average(Sht基準グラフ.Range( _ Sht基準グラフ.Cells(4, 1), Sht基準グラフ.Cells(N数 + 3, 1))) 平均値 = Application.Round(平均値, (測定桁 * -1) + 2) 標準偏差 = Application.StDev(Sht基準グラフ.Range( _ Sht基準グラフ.Cells(4, 1), Sht基準グラフ.Cells(N数 + 3, 1))) 標準偏差 = Application.Round(標準偏差, (測定桁 * -1) + 2) '-----工程能力指数--------- isNg = False If 標準偏差 <> 0 Then Select Case 規格種別 Case "両" '両側規格の場合 If (上限規格 < 最大値) Or (下限規格 > 最小値) Then isNg = True End If 公差幅 = 上限規格 - 下限規格 規格中心 = 上限規格 + 下限規格 規格中心 = 規格中心 / 2 カタヨリ = Abs(規格中心 - 平均値) / 公差幅 * 2 Cp = 公差幅 / 6 / 標準偏差 Cpk = (1 - カタヨリ) * Cp If Cpk < 0 Then Cpk = 0 Call Cp判定(Cpk) 'Cpkの判定と文字表示色:モジュール「Mdl統計」 '-----Cpkの書き込み------------- Cpk = Application.Round(Cpk, 2) Sht度数表.Cells(C度数Cpk, 特性列No2).Font.ColorIndex = 色 Sht度数表.Cells(C度数Cp, 特性列No2).Font.ColorIndex = 1 '黒 Case "上" '上限規格の場合 If (上限規格 < 最大値) Then isNg = True End If Cp = (上限規格 - 平均値) / 3 / 標準偏差 If Cp < 0 Then Cp = 0 Call Cp判定(Cp) 'Cpの判定と文字表示色:モジュール「Mdl統計」 Sht度数表.Cells(C度数Cp, 特性列No2).Font.ColorIndex = 色 Cpk = Empty Case "下" '下限規格の場合 If (下限規格 > 最小値) Then isNg = True End If Cp = (平均値 - 下限規格) / 3 / 標準偏差 If Cp < 0 Then Cp = 0 Call Cp判定(Cp) 'Cpの判定と文字表示色:モジュール「Mdl統計」 Sht度数表.Cells(C度数Cp, 特性列No2).Font.ColorIndex = 色 Cpk = Empty End Select Else 実行 = "異常" End If '-----統計値の書き込み------------- Sht度数表.Select Sht度数表.Cells(C度数品番, 特性列No2).Formula = Shtデータ.Cells(Cd品番, 特性列No).Formula Sht度数表.Cells(C度数品名, 特性列No2).Formula = Shtデータ.Cells(Cd品名, 特性列No).Formula Sht度数表.Cells(C度数特性, 特性列No2).Formula = Shtデータ.Cells(Cd特性, 特性列No).Formula Sht度数表.Cells(C度数上限, 特性列No2).Formula = Shtデータ.Cells(Cd規格上限, 特性列No).Formula Sht度数表.Cells(C度数下限, 特性列No2).Formula = Shtデータ.Cells(Cd規格下限, 特性列No).Formula ' Sht度数表.Cells(C度数N数, 特性列No2).Value = N数 Sht度数表.Cells(C度数最大値, 特性列No2).Value = 最大値 Sht度数表.Cells(C度数最小値, 特性列No2).Value = 最小値 Sht度数表.Cells(C度数平均値, 特性列No2).Value = 平均値 Sht度数表.Cells(C度数標準偏差, 特性列No2).Value = 標準偏差 Cp = Application.Round(Cp, 2) Sht度数表.Cells(C度数Cp, 特性列No2).Value = Cp Sht度数表.Cells(C度数判定, 特性列No2).Value = 判定 Sht度数表.Cells(C度数判定, 特性列No2).Font.ColorIndex = 色 Sht度数表.Cells(C度数Cpk, 特性列No2).Value = Cpk End Sub '***********Cpの判定**************** Sub Cp判定(判定Cp) Select Case 判定Cp Case Is < 0.67 If isNg Then 判定 = "×" '"かなり不足" Else 判定 = "△" End If 色 = 3 '赤 Case Is < 1 If isNg Then 判定 = "×" '"やや不足" Else 判定 = "△" End If 色 = 3 '赤 Case Is < 1.33 判定 = "○" '"まあ十分" 色 = 1 '黒 Case Else 判定 = "◎" '"十分" 色 = 5 '青 End Select End Sub 【Md5度数】 Option Explicit '度数表とグラフの作成 '****************************************** Dim ランク(C_MAX_級数) 'As Single '級のランク Dim ランクMin_No As Integer '配列「ランク()」に入っている最小値No Dim ランクMax_No As Integer '配列「ランク()」に入っている最大値No Dim ランクMid_No As Integer '配列「ランク()」に入っている中央No Dim ランク最小, ランク最大 As Single 'ランク分けの最小値、最大値 Dim ランクMid As Single 'ランク分けの基準となる中央値 Dim 級の幅 As Single '級の幅 Dim ランク数 As Integer Dim 規格幅ランク数 As Integer '規格幅のランク数 Public GF変更せず As Boolean 'ダイヤログボックス「Dlg級変更」で変更しない時「TRUE」 Dim ボタンNo As Integer 'ダイヤログボックス「Dlg級変更」で押されたボタンNo Dim 級限界表示 As String '級の限界値の表示方法 Dim 級限界表示変更 As Boolean '級の限界値の表示方法の変更有無 Public Cmdキャンセル As Boolean 'キャンセルボタン Public Opt数値指定 As Boolean '級を数値指定するオプションボタン Public err級幅 As Boolean '級幅が0か '------項目データの記入開始位置------ Public 位置No As Integer Public 列_位置 As Integer Public 行位置 As Integer '****************************************** ' Sub 度数() '-------最初、度数を自動設定---- 級限界表示変更 = False Cmdキャンセル = False GF変更せず = True ' Call 級数の自動設定 '級の数を設定する:モジュール「Mdl度数」 Call 項目表示 'Cp等の項目表示:モジュール「Mdl度数」 Call データ表示 'データ表示:モジュール「Mdl度数」 If Shtデータ.CheckBoxes("Check級幅").Value = xlOn Then 自動度数_グラフ Else 手動度数_グラフ End If End Sub Sub 自動度数_グラフ() Dim 度数_N(C_MAX_級数) As Integer '度数 Dim i As Integer '度数 Call 級幅設定 '級の幅を設定する:モジュール「Mdl度数」 Call ランク分け '度数表のランク分け:モジュール「Mdl度数 Call 度数計算(度数_N()) Call 級表示(度数_N()) '度数ランクの表示:モジュール「Mdl度数」 Call セット小数点 Call グラフ作成 End Sub Sub 手動度数_グラフ() Dim 度数_N(C_MAX_級数) As Integer '度数 Dim i As Integer '度数 Opt数値指定 = False '級を数値指定するオプションボタン Do If Opt数値指定 = False Then Call 級幅設定 '級の幅を設定する:モジュール「Mdl度数」 End If Call ランク分け '度数表のランク分け:モジュール「Mdl度数」 Call 度数計算(度数_N()) Call 級表示(度数_N()) '度数ランクの表示:モジュール「Mdl度数」 Call セット小数点 Call グラフ作成 Call Dlg級変更処理(度数_N()) If GF変更せず = False Then For i = ランクMin_No To ランクMax_No 度数_N(i) = 0 Next End If Loop Until GF変更せず = True Unload Dlg級数変更 End Sub Sub セット小数点() Dim 文字 As String Dim 小数点位置 As Integer Dim 小数点 As Integer Dim 小数点Max As Integer Dim i As Integer '--------少数点の桁数を求める---------- 小数点Max = 0 i = 0 Do If Sht度数表.Cells(C度数級幅開始 + i, 特性列No2).Value <= " " Then Exit Do On Error GoTo エラー 文字 = Format(Sht度数表.Cells(C度数級幅開始 + i, 特性列No2).Value) 小数点位置 = InStr(1, 文字, ".", 1) If 小数点位置 > 0 Then 小数点 = Len(文字) - 小数点位置 If 小数点 > 小数点Max Then 小数点Max = 小数点 エラー戻り: i = i + 1 Loop On Error Resume Next '-------少数点の桁数を変更-------------- Select Case 小数点Max ' 変数 Number の評価. Case 1 Sht度数表.Range(Sht度数表.Cells(C度数級幅開始, 特性列No2), _ Sht度数表.Cells(C度数級幅開始 + i, 特性列No2)).NumberFormat = "0.0" Case 2 Sht度数表.Range(Sht度数表.Cells(C度数級幅開始, 特性列No2), _ Sht度数表.Cells(C度数級幅開始 + i, 特性列No2)).NumberFormat = "0.00" Case 3 Sht度数表.Range(Sht度数表.Cells(C度数級幅開始, 特性列No2), _ Sht度数表.Cells(C度数級幅開始 + i, 特性列No2)).NumberFormat = "0.000" Case 4 Sht度数表.Range(Sht度数表.Cells(C度数級幅開始, 特性列No2), _ Sht度数表.Cells(C度数級幅開始 + i, 特性列No2)).NumberFormat = "0.0000" Case 5 Sht度数表.Range(Sht度数表.Cells(C度数級幅開始, 特性列No2), _ Sht度数表.Cells(C度数級幅開始 + i, 特性列No2)).NumberFormat = "0.00000" Case Else Sht度数表.Range(Sht度数表.Cells(C度数級幅開始, 特性列No2), _ Sht度数表.Cells(C度数級幅開始 + i, 特性列No2)).NumberFormatLocal = "G/標準" End Select Exit Sub エラー: On Error Resume Next GoTo エラー戻り End Sub '********標準の級数******************** Sub 級数の自動設定() Dim 級幅設定MAX As Single Dim 級幅設定MIN As Single Select Case N数 Case Is < 30 級数 = 4 Case Is < 50 級数 = 5 Case Is < 100 級数 = 7 Case Is < 250 級数 = 9 Case Else 級数 = 15 End Select If Shtデータ.OptionButtons("Opt級幅規格").Value = xlOff Then 級の幅 = (最大値 - 最小値) / 級数 Else '*****規格幅から級幅を設定 級数 = 級数 + 3 Select Case 規格種別 Case "両" '両側規格の場合 If 上限規格 > 最大値 Then 級幅設定MAX = 上限規格 Else 級幅設定MAX = 最大値 End If If 下限規格 < 最小値 Then 級幅設定MIN = 下限規格 Else 級幅設定MIN = 最小値 End If Case "上" '上限規格の場合 If 上限規格 > 最大値 Then 級幅設定MAX = 上限規格 Else 級幅設定MAX = 最大値 End If If 級幅設定MAX < 2 * (級幅設定MAX - 最小値) Then 級幅設定MIN = 0 Else 級幅設定MIN = 最小値 End If Case "下" '下限規格の場合 If 下限規格 < 最小値 Then 級幅設定MIN = 下限規格 Else 級幅設定MIN = 最小値 End If 級幅設定MAX = 最大値 End Select 級の幅 = (級幅設定MAX - 級幅設定MIN) / 級数 End If End Sub '********級の幅とランク分け基準の中央値を設定****************** Sub 級幅設定() Dim i As Integer Dim Y, YY, 平均Mid '----級の幅を測定単位の整数倍にする---- i = CInt(級の幅 / 10 ^ 測定桁) If i = 0 Then i = 1 級の幅 = i * 10 ^ 測定桁 '-----平均値を中央にしてランク分け--- Y = 10 ^ (測定桁) / 2 YY = Application.Round(級の幅 / 2, (測定桁 * -1)) Y = YY - Y '------平均値を測定単位で四捨五入 平均Mid = Application.Round(平均値, (測定桁 * -1)) '------ランク分けの平均基準値 ランクMid = Application.Round(平均Mid - Y, (測定桁 * -1) + 1) End Sub ' ' '********度数表のランク分け******************** Sub ランク分け() Dim 増ランク数 As Integer 'ランク分け数が少ない場合、増ランク数*2増やす Dim i As Integer '------度数表のランク分け------ Select Case 規格種別 Case "両" '両側規格の場合 If 上限規格 > 最大値 Then ランク最大 = 上限規格 Else ランク最大 = 最大値 End If If 下限規格 < 最小値 Then ランク最小 = 下限規格 Else ランク最小 = 最小値 End If Case "上" '上限規格の場合 If 上限規格 > 最大値 Then ランク最大 = 上限規格 Else ランク最大 = 最大値 End If ランク最小 = 最小値 Case "下" '下限規格の場合 If 下限規格 < 最小値 Then ランク最小 = 下限規格 Else ランク最小 = 最小値 End If ランク最大 = 最大値 End Select '----ランク分け:平均値より下---- ランクMid_No = Int(C_MAX_級数 / 2) ランク(ランクMid_No) = ランクMid i = ランクMid_No - 1 If ランク(i + 1) > ランク最小 Then Do ランク(i) = ランクMid - 級の幅 * (ランクMid_No - i) ランク(i) = Application.Round(ランク(i), (測定桁 * -1) + 1) If i = 0 Then Exit Do i = i - 1 Loop Until ランク(i + 1) < ランク最小 - 級の幅 End If ランクMin_No = i + 1 '----ランク分け:平均値より上---- i = ランクMid_No + 1 If ランク(i - 1) < ランク最大 Then Do ランク(i) = ランクMid + 級の幅 * (i - ランクMid_No) ランク(i) = Application.Round(ランク(i), (測定桁 * -1) + 1) If i >= C_MAX_級数 Then Exit Do i = i + 1 Loop Until ランク(i - 1) > ランク最大 + 級の幅 End If ランクMax_No = i - 1 '------ランク分けの数が少ない場合表示を増やす---- ランク数 = ランクMax_No - ランクMin_No 規格幅ランク数 = ランク数 Select Case ランク数 Case Is < 2 増ランク数 = 3 Case Is < 4 増ランク数 = 2 Case Is < 6 増ランク数 = 1 End Select If 増ランク数 > 0 Then '----ランク分け:平均値より下---- For i = ランクMin_No - 1 To ランクMin_No - 増ランク数 Step -1 ランク(i) = ランク(i + 1) - 級の幅 ランク(i) = Application.Round(ランク(i), (測定桁 * -1) + 1) Next ランクMin_No = i + 1 '----ランク分け:平均値より上---- For i = ランクMax_No + 1 To ランクMax_No + 増ランク数 ランク(i) = ランク(i - 1) + 級の幅 ランク(i) = Application.Round(ランク(i), (測定桁 * -1) + 1) Next ランクMax_No = i - 1 End If ランク数 = ランクMax_No - ランクMin_No End Sub '********級数の表示******************** Sub 級表示(度数_N() As Integer) Dim i As Integer Dim j As Integer Dim Str級表示 As String Dim 級の文字数 As Integer 'ランク表示の文字数 Dim 級の文字数Max As Integer 'ランク表示の文字数 '------度数表をクリア------ Sht度数表.Select Sht度数表.Range(Sht度数表.Cells(C度数級幅開始, 特性列No2), _ Sht度数表.Cells(C度数級幅開始 + C_MAX_級数, 特性列No2 + 1)).ClearContents '---------級の最大値・最小値の文字数を調べる---- 級の文字数 = Len(LTrim(CStr(Application.Round _ (ランク(ランクMin_No), (測定桁 * -1) + 1)))) 級の文字数Max = Len(LTrim(CStr(Application.Round _ (ランク(ランクMax_No), (測定桁 * -1) + 1)))) If 級の文字数 < 級の文字数Max Then 級の文字数 = 級の文字数Max End If '-------級の限界値表示------- 'If 級限界表示変更 = False And Opt数値指定 = False Then ' If 級の文字数 <= C_級文字数 Then '級の文字数がC_級文字数以下の場合,○〜○表示 ' 級限界表示 = "両側" ' Else ' 級限界表示 = "中央" ' End If 'End If 級限界表示 = "中央" Call 級の限界値表示(級限界表示) '級の限界値表示:モジュール「Mdl度数」 '-------級の度数表示 ----- j = 0 For i = ランクMin_No To ランクMax_No - 1 Sht度数表.Cells(C度数級幅開始 + j, 特性列No2 + 1).Value = 度数_N(i) j = j + 1 Next End Sub '********度数の計算**************** Sub 度数計算(度数_N() As Integer) Dim i As Integer Dim j As Integer For i = 1 To N数 j = ランクMin_No - 1 Do If j >= C_MAX_級数 - 1 Then Exit Do j = j + 1 Loop Until ランク(j) <= 測定値(i) And 測定値(i) < ランク(j + 1) 度数_N(j) = 度数_N(j) + 1 Next End Sub '***********級の限界値を表示する****************** Sub 級の限界値表示(Opt級表示 As String) Dim i As Integer Dim j As Integer Dim Str級表示 As String Select Case Opt級表示 Case "両側" '級の文字数がC_級文字数以下の場合,○〜○表示 For i = ランクMin_No To ランクMax_No - 1 Str級表示 = LTrim(CStr(ランク(i))) Str級表示 = Str級表示 + "〜" Str級表示 = Str級表示 + LTrim(CStr(ランク(i + 1))) Sht度数表.Cells(C度数級幅開始 + j, 特性列No2).Value = Str級表示 j = j + 1 Next 級限界表示 = "両側" Case "片側" '級の文字数が C_級文字数+1 以上の場合,○〜表示 For i = ランクMin_No To ランクMax_No - 1 Str級表示 = LTrim(CStr(ランク(i))) Str級表示 = Str級表示 + "〜" Sht度数表.Cells(C度数級幅開始 + j, 特性列No2).Value = Str級表示 j = j + 1 Next 級限界表示 = "片側" Case "中央" '級の文字数が C_級文字数_多+1 以上の場合,中央値表示 For i = ランクMin_No To ランクMax_No - 1 Str級表示 = CStr(Application.Round _ ((ランク(i) + ランク(i + 1)) / 2, (測定桁 * -1) + 1)) Str級表示 = LTrim(Str級表示) Sht度数表.Cells(C度数級幅開始 + j, 特性列No2).Value = Str級表示 j = j + 1 Next 級限界表示 = "中央" End Select End Sub '********データ表示**************** Sub データ表示() 'Dim Y As Integer Dim S 'Y = 列_位置 + 1 'No Shtグラフ.Cells(行位置, 列No + (位置No - 1) * 列備考).Value = _ Chr(10) & Shtデータ.Cells(CdNo, 特性列No).Value S = Chr(10) & "品番:" & Shtデータ.Cells(Cd品番, 特性列No).Value S = S & Chr(10) & "品名:" & Shtデータ.Cells(Cd品名, 特性列No).Value S = S & Chr(10) & "特性:" & Shtデータ.Cells(Cd特性, 特性列No).Value S = S & Chr(10) & "規格:" & Shtデータ.Cells(Cd規格, 特性列No).Value S = S & " " & Shtデータ.Cells(Cd規格下限, 特性列No).Value S = S & "〜" & Shtデータ.Cells(Cd規格上限, 特性列No).Value S = S & Chr(10) & "n=" & Str(N数) Shtグラフ.Cells(行位置, 列特性 + (位置No - 1) * 列備考).Value = S Shtグラフ.Cells(行位置, 列平均 + (位置No - 1) * 列備考).Value = Chr(10) & 平均値 Shtグラフ.Cells(行位置, 列σ + (位置No - 1) * 列備考).Value = Chr(10) & 標準偏差 If 規格種別 = "両" Then S = Chr(10) & "Cpk=" & Chr(10) & " " & Cpk Else S = Chr(10) & "Cp=" & Chr(10) & " " & Cp End If Shtグラフ.Cells(行位置, 列Cp + (位置No - 1) * 列備考).Value = S Shtグラフ.Cells(行位置, 列評価 + (位置No - 1) * 列備考).Value = Chr(10) & 判定 Shtグラフ.Rows(行位置).RowHeight = 109.5 Shtグラフ.Rows(行位置).VerticalAlignment = xlTop End Sub '********項目表示**************** Sub 項目表示() '----行の位置----- 行位置 = Int(特性No / 横個数) '-----------記入するセルの位置決め----- 位置No = 特性No Mod 横個数 '特性N0を横個数で割った余り If 位置No = 0 Then 行位置 = 行位置 - 1 行位置 = G記入開始行 + 行位置 '---列の位置--------- If 位置No = 0 Then 位置No = 横個数 '列_位置 = 位置No '----------項目表示-------- End Sub '****************グラフの作成************ ' 基準となるグラフをコピー・貼り付けし,データ範囲を変える ' Sub グラフ作成() Dim Gfセル_T As Integer 'グラフを貼り付けるセル位置 Dim Gfセル_L As Integer 'グラフを貼り付けるセル位置 Dim Gfエリア, 表示Window As Object Dim Scr最大値 As Integer 'グラフのy軸スケール最大値 Dim Scr桁数 As Integer 'グラフのy軸スケール最大値の桁数 Dim 規格線Mid As Single '規格寸法線の中心 Dim 線平均位置 As Single '平均線の位置 Dim 矢平均位置 As Single '平均線の矢印位置 Dim Txt平均値 As Single '平均値の位置 Dim Len規格値 As Single '規格値のテキストの幅 Dim X目盛り As Single 'X軸:グラフのポイント・スケール/表示スケール Dim グラフ個別名 As String Dim 線Min位置 Dim 線Max位置 ' Set 表示Window = Application.ActiveWindow ' Sht度数表.Select Scr最大値 = Application.Max(Sht度数表.Range(Sht度数表.Cells(C度数級幅開始, 特性列No2 + 1), _ Sht度数表.Cells(C度数級幅開始 + ランク数 - 1, 特性列No2 + 1))) Set Gfエリア = Sht度数表.Range(Sht度数表.Cells(C度数級幅開始 - 1, 特性列No2), _ Sht度数表.Cells(C度数級幅開始 + ランク数 - 1, 特性列No2 + 1)) Shtグラフ.Select '-------'新規にグラフを書くか修正か--------- If Gf修正 = False Then '新規にグラフを書く場合 If 済の有無 = True Then '再度実行時の修正は新規グラフとする On Error Resume Next ActiveSheet.ChartObjects("ヒストグラム" & Str(1000 + 特性No)).Delete On Error GoTo 0 End If '-------グラフの位置を決める--------- Gfセル_T = 行位置 'グラフを貼り付けるセル位置 Gfセル_L = 列グラフCp + (位置No - 1) * 列備考 '-------基準となるグラフを貼り付け------ Sht基準グラフ.ChartObjects("GraphCpSTD").Chart.ChartArea.Copy Shtグラフ.Select Shtグラフ.Cells(Gfセル_T, Gfセル_L).Select ActiveSheet.Paste グラフ個別名 = ActiveChart.Parent.Name ActiveSheet.ChartObjects(グラフ個別名).Name = "ヒストグラム" & Str(1000 + 特性No) Else ActiveSheet.ChartObjects("ヒストグラム" & Str(1000 + 特性No)).Select End If '-------グラフの修正------ ActiveChart.ChartWizard Source:=Gfエリア 'データ範囲の修正 '----目盛りの変更------- Scr最大値 = Scr最大値 * 2 Scr桁数 = Int(Application.Log10(Scr最大値)) * (-1) Scr最大値 = Application.Round(Scr最大値, Scr桁数) ActiveSheet.ChartObjects("ヒストグラム" & Str(1000 + 特性No)).Activate ActiveChart.Axes(xlValue).MaximumScale = Scr最大値 '----規格線の変更------- If GF変更せず = True Then Gf_Y軸基準 End If X目盛り = ランク(ランクMax_No) - ランク(ランクMin_No) X目盛り = (PltエリアW - Plt_Y軸) / X目盛り 'X軸:グラフのポイント・スケール/表示スケール '---規格線の移動--- Select Case 規格種別 Case "両" '両側規格の場合 線Min位置 = (下限規格 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 線Max位置 = (上限規格 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 ActiveChart.Shapes("線Min").Left = 線Min位置 ActiveChart.Shapes("線Max").Left = 線Max位置 ActiveChart.Shapes("寸法線").Left = 線Min位置 ActiveChart.Shapes("寸法線").Width = 線Max位置 - 線Min位置 '----規格値の記入--- If Gf修正 = False Then '新規にグラフを書く場合 '規格値の記入 ActiveChart.Shapes("規格値").Select Selection.Characters.Text = "規格 " & _ LTrim(CStr(下限規格)) & "〜" & LTrim(CStr(上限規格)) End If Case "上" '上限規格の場合 線Min位置 = (最小値 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 線Max位置 = (上限規格 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 ActiveChart.Shapes("線Max").Left = 線Max位置 'ActiveChart.Shapes("寸法線").ArrowHeadStyle = xlOpen ActiveChart.Shapes("寸法線").Left = 線Min位置 ActiveChart.Shapes("寸法線").Width = 線Max位置 - 線Min位置 ActiveChart.Shapes("寸法線").Line.EndArrowheadStyle = msoArrowheadOpen ActiveChart.Shapes("寸法線").Line.BeginArrowheadStyle = msoArrowheadNone '----規格値の記入--- If Gf修正 = False Then '新規にグラフを書く場合 ActiveChart.Shapes("線Min").Delete '規格値の記入 ActiveChart.Shapes("規格値").Select Selection.Characters.Text = "規格 " & "〜" & LTrim(CStr(上限規格)) End If Case "下" '下限規格の場合 線Min位置 = (下限規格 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 線Max位置 = (最大値 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 ActiveChart.Shapes("線Min").Left = 線Min位置 'ActiveChart.Shapes("寸法線").Left = 線Max位置 ActiveChart.Shapes("寸法線").Left = 線Min位置 ActiveChart.Shapes("寸法線").Width = 線Max位置 - 線Min位置 ActiveChart.Shapes("寸法線").Line.EndArrowheadStyle = msoArrowheadNone ActiveChart.Shapes("寸法線").Line.BeginArrowheadStyle = msoArrowheadOpen '----規格値の記入--- If Gf修正 = False Then '新規にグラフを書く場合 ActiveChart.Shapes("線Max").Delete ActiveChart.Shapes("規格値").Select Selection.Characters.Text = "規格 " & LTrim(CStr(下限規格)) & "〜" End If End Select '------平均線の位置変更------ 線平均位置 = (平均値 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 ActiveChart.Shapes("線平均位置").Left = 線平均位置 '------テキストの位置を規格の中心にする 規格線Mid = (線Min位置 + 線Max位置) / 2 Len規格値 = ActiveChart.Shapes("規格値").Width ActiveChart.Shapes("規格値").Left = 規格線Mid - Len規格値 / 2 ActiveSheet.Shapes("ヒストグラム" & Str(1000 + 特性No)).IncrementTop 3# ActiveSheet.Shapes("ヒストグラム" & Str(1000 + 特性No)).IncrementLeft 4# '-----アクティブWindowを戻す------ ActiveWindow.Visible = False 表示Window.Activate ActiveWindow.ScrollRow = Cells(行位置, 列No + (位置No - 1) * 列備考).Row ActiveWindow.ScrollColumn = Cells(行位置, 列No + (位置No - 1) * 列備考).Column Shtグラフ.Cells(行位置, 列No + (位置No - 1) * 列備考).Select End Sub ' '********グラフエリアの基準取得****** ' Sub Gf_Y軸基準() PltエリアL = ActiveChart.PlotArea.Left 'グラフの左位置 PltエリアW = ActiveChart.PlotArea.Width 'グラフの幅 Plt_Y軸 = ActiveChart.Shapes("線Min").Left Plt_Y軸 = Plt_Y軸 + PltエリアL 'y軸の位置 'Txt平均値Wdh = ActiveChart.Shapes("Txt平均値").Width '矢平均位置Lft = ActiveChart.Shapes("矢平均位置").Left ' 矢平均位置Wdh = ActiveChart.Shapes("矢平均位置").Width End Sub '************************************** ' ダイヤログボックス「級変更」(Dlg級変更)時の処理 '*************************************** ' '*********ダイヤログボックス級数変更の処理***** Sub Dlg級変更処理(度数_N() As Integer) Dim i As Integer Dim j As Integer Dim Opt級表示 As String 'オプションボックスの表示は両側or片側 Dim Str級表示 As String '-----------級数の変更---------------------- 'Set Dlg級変更 = DialogSheets("Dlg級変更") '-----エディットに初期値の表示---- 'データ幅の級数を求める i = ランクMin_No - 1 Do i = i + 1 Loop Until 度数_N(i) > 0 級数 = i i = ランクMax_No + 1 Do i = i - 1 Loop Until 度数_N(i) > 0 級数 = i - 級数 Dlg級数変更.Edt級数変更Data.Text = Str(級数 + 1) Dlg級数変更.Edt級数変更規格.Text = Str(規格幅ランク数 - 2) '-----スピンをエディットの値に変更----- Dlg級数変更.Spn級数変更Data.Value = CInt(Dlg級数変更.Edt級数変更Data.Text) Dlg級数変更.Spn級数変更規格.Value = CInt(Dlg級数変更.Edt級数変更規格.Text) '----初期値の設定 'Dlg級数変更.Opt級数変更なし.Value = True Select Case 級限界表示 Case "両側" Dlg級数変更.Opt級表示両側.Value = True Case "片側" Dlg級数変更.Opt級表示片側.Value = True Case "中央" Dlg級数変更.Opt級表示中央.Value = True End Select '-----------中央値と級幅の表示---------------- Str級表示 = CStr(Application.Round _ ((ランク(ランクMid_No) + ランク(ランクMid_No + 1)) / 2, (測定桁 * -1) + 1)) Str級表示 = LTrim(Str級表示) Dlg級数変更.Edt中央値.Text = Str級表示 Dlg級数変更.Edt級幅.Text = LTrim(CStr(級の幅)) '------------------------------------------------- Dlg級数変更.Opt級数変更なし.Value = True err級幅 = False Dlg級数変更.UserForm_Activate Dlg級数変更.Left = 10 Do Dlg級数変更.Show Loop Until err級幅 = False If Cmdキャンセル = False Then 'キャセルボタンが押されていない '-----------級数の変更---------------------- '---データの幅で級数を指定---- If Dlg級数変更.Opt級数変更なし.Value Then GF変更せず = True Gf修正 = False 'グラフ修正を戻す Else If Dlg級数変更.Opt級数変更Data.Value Then 級数 = CInt(Dlg級数変更.Edt級数変更Data.Text) If 級数 < 2 Or 40 < 級数 Then MsgBox "級の数は 2〜40にして下さい" Dlg級数変更.Show Else 級の幅 = (最大値 - 最小値) / (級数 - 1) End If Else '---規格幅で級数を指定---- If Dlg級数変更.Opt級数変更規格.Value Then 級数 = CInt(Dlg級数変更.Edt級数変更規格.Text) If 級数 < 2 Or 40 < 級数 Then MsgBox "級の数は 2〜40にして下さい" Dlg級数変更.Show Else Select Case 規格種別 Case "両" '両側規格の場合 級の幅 = (上限規格 - 下限規格) / 級数 Case "上" '上限規格の場合 級の幅 = (上限規格 - 最小値) / 級数 Case "下" '下限規格の場合 級の幅 = (最大値 - 下限規格) / 級数 End Select End If Else If Dlg級数変更.Opt級数変更最初.Value Then Call 級数の自動設定 '級の数を設定する:モジュール「Mdl度数」 Else If Opt数値指定 = True Then 級の幅 = CDbl(Dlg級数変更.Edt級幅.Text) Str級表示 = CDbl(Dlg級数変更.Edt中央値.Text) ランクMid = Str級表示 - 級の幅 / 2 End If End If End If End If End If '---------級の限界値の表示変更------ Call 級表示取得(Opt級表示) If Opt級表示 <> 級限界表示 Then 級限界表示変更 = True If GF変更せず = True Then Sht度数表.Select Call 級の限界値表示(Opt級表示) Shtグラフ.Select Call Dlg級変更処理(度数_N()) Else 級限界表示 = Opt級表示 End If End If '--------------------------------- 'Dlg級数変更.Left = DlgLeft 'Dlg級数変更.Top = 100 Dlg級数変更.Opt級数変更最初.Visible = True End If End Sub '**********級の限界値の表示取得********* Sub 級表示取得(Opt級表示 As String) If Dlg級数変更.Opt級表示両側.Value Then Opt級表示 = "両側" Else If Dlg級数変更.Opt級表示片側.Value Then Opt級表示 = "片側" Else Opt級表示 = "中央" End If End If End Sub 【Md時系列グラフ】 Option Explicit Dim PltエリアH As Double 'Dim PltエリアB As Double Dim PltエリアT As Double Dim Plt_X軸 As Integer Sub 時系列グラフ単独() Dim i As Integer Dim Gfセル_T As Integer Dim Gfセル_L As Integer Dim グラフ個別名 As String 'If 済の有無 = False Then '修正でない場合 'クリア度数 '----Sheetグラフの記入箇所をクリア クリアグラフ 用紙 '用紙の設定 'End If '------データの有無-------------- i = 3 While Shtデータ.Cells(Cdデータ開始, i).Value > " " i = i + 1 Wend 特性数 = i - 3 '-------基準となるグラフを貼り付け------ 'Sht基準グラフ.ChartObjects("Graph管理図").Chart.ChartArea.Copy Shtグラフ.Select For 特性No = 1 To 特性数 特性列No = 特性No + 2 特性列No2 = (特性No - 1) * 2 + 3 データ入力 Call 一般データ '規格の読み込み:モジュール「Mdl工程能力」 Call 統計 If 実行 <> "異常" Then Call データ入力 '-------グラフの位置を決める--------- Call 項目表示 Call データ表示 Call 時系列グラフ作成 End If Next 列配置 End Sub Sub 時系列グラフ追加() Dim i As Integer Dim Gfセル_T As Integer Dim Gfセル_L As Integer Dim グラフ個別名 As String '------データの有無-------------- Shtグラフ.Select For 特性No = 1 To 特性数 特性列No = 特性No + 2 特性列No2 = (特性No - 1) * 2 + 3 Call データ入力 'Call 統計 Call 一般データ '規格の読み込み:モジュール「Mdl工程能力」 'Call データ入力 '-------グラフの位置を決める--------- Call 項目表示 'Call データ表示 Call 時系列グラフ作成 Next End Sub Sub 時系列グラフ作成() Dim Gfセル_T As Integer Dim Gfセル_L As Integer Dim グラフ個別名 As String Dim Scr最大値 As Double 'グラフのy軸スケール最大値 Dim Scr最小値 As Double Dim Scr桁数 As Integer Dim 下限, 上限, 目盛り Dim 規格位置 As Integer Dim 目盛り幅X As Double '-----グラフの貼付け Gfセル_T = 行位置 'グラフを貼り付けるセル位置 Gfセル_L = 列グラフ管理図 + (位置No - 1) * 列備考 If 済の有無 = True Then On Error Resume Next ActiveSheet.ChartObjects("時系列グラフ" & Str(1000 + 特性No)).Delete On Error GoTo 0 End If Sht基準グラフ.ChartObjects("Graph管理図").Chart.ChartArea.Copy Shtグラフ.Select Shtグラフ.Cells(Gfセル_T, Gfセル_L).Select Shtグラフ.Paste グラフ個別名 = ActiveChart.Parent.Name ActiveSheet.ChartObjects(グラフ個別名).Name = "時系列グラフ" & Str(1000 + 特性No) ActiveChart.SetSourceData Source:=Shtデータ.Range(Shtデータ.Cells(Cdデータ開始, 特性列No), _ Shtデータ.Cells(Cdデータ開始 + N数 - 1, 特性列No)) '----目盛り Scr最大値 = Sht度数表.Cells(C度数最大値, 特性列No2).Value 上限 = Sht度数表.Cells(C度数上限, 特性列No2).Value If 上限 > " " And Scr最大値 < 上限 Then Scr最大値 = 上限 End If 'Scr桁数 = Int(Application.Log10(Scr最大値)) 'Scr最大値 = Application.Round(Scr最大値, Scr桁数) 目盛り = ActiveChart.Axes(xlValue).MajorUnit Scr最大値 = 目盛り + Scr最大値 ActiveChart.Axes(xlValue).MaximumScale = Scr最大値 '--最小値 Scr最小値 = Sht度数表.Cells(C度数最小値, 特性列No2).Value 下限 = Sht度数表.Cells(C度数下限, 特性列No2).Value If 下限 > " " And Scr最小値 > 下限 Then Scr最小値 = 下限 End If If (Scr最小値 < 0) Or (Scr最小値 - 目盛り) > 0 Then Scr最小値 = Scr最小値 - 目盛り End If ActiveChart.Axes(xlValue).MinimumScale = Scr最小値 '----規格線の変更------- Gf_X軸基準 目盛り幅X = PltエリアH / (Scr最大値 - Scr最小値) If 上限 > " " Then 規格位置 = (Scr最大値 - 上限規格) * 目盛り幅X ActiveChart.Shapes("線SpecUp").Top = PltエリアT + 規格位置 Else ActiveChart.Shapes("線SpecUp").Visible = False End If If 下限 > " " Then 規格位置 = (Scr最大値 - 下限規格) * 目盛り幅X ActiveChart.Shapes("線SpecDown").Top = PltエリアT + 規格位置 Else ActiveChart.Shapes("線SpecDown").Visible = False End If ActiveSheet.Shapes("時系列グラフ" & Str(1000 + 特性No)).IncrementTop 3# ActiveSheet.Shapes("時系列グラフ" & Str(1000 + 特性No)).IncrementLeft 5# End Sub Sub Gf_X軸基準() PltエリアH = ActiveChart.PlotArea.InsideHeight 'グラフの高さ PltエリアT = ActiveChart.PlotArea.InsideTop 'PltエリアB = PltエリアT + PltエリアH 'グラフの下位置 'Plt_X軸 = Plt_X軸 + PltエリアH 'X軸の位置 End Sub 【Module Tmp】 Sub グラフ名変更() Sheets("基準グラフ").Select Sheets("基準グラフ").Shapes("グラフ 5").Name = "Graph管理図" End Sub 以上です (める) 2019/11/04(月) 15:36 ---- >かなり間が空いてしまったので新しくトピックを作成させて頂きます。 たいして間があいているわけでもないのに(3か月以上で、書き込みができなくなる) ここは、そういうのは容認してないですよ。 自分勝手な思い込みですね。 (自分勝手) 2019/11/04(月) 16:03 ---- こんにちは! すみません。回答ではありません。 結論からいいますと、、絶対とは言いませんが、このコードから原因を特定するのは無理だと思います。 先ず、 1.>20年近く前に組まれたマクロなので作成者は定年退職しております ということは算出された根拠とかも不確かなわけですよね? 大切なグラフなんでしょうけど、ここは割り切って新しく作られた方がいいと思います。 2.>office365になってからこのマクロが正常に作動しないということで >正常に作動するように直すよう頼まれました >なんとなく、なのですがマクロ自体にそこまで問題はないものの >元となるグラフが何かおかしい状態のため、ヒストグラムの上限より上の数値が勝手に組み込まれた表になってしまうのかなと感じています これはある程度、正解だと思います。一概には言えないかもしれませんがグラフなんてのは結果を表しているだけなので、 大体は軸の書式設定ぐらいで直るんじゃないかなとは思います。 これだけのコードを書ける方なのですからコード自体には問題はないんじゃないかなと思います。 結論 今回、仮にこの場面を乗り切れたとしてもいつかはまた行き詰ると思うのです。 これは、私自身にも同じことが言えるのですが、いつまでも務めているわけではないのですね。 いつかはその日がくるのですね。(永ちゃんみたい・・・(^^;)そうやって使われなくなったコードなんて山ほどあるわけです。 でも、結局、そうゆうコードというのは大したことないのだと思うのです。(ちょっと語弊があるかもしれませんねm(__)m) 今回がいい機会ですから、トピ主さんが主になって今回の反省を活かされて今後も継続される手法に置き換えられた方が得策ではないでしょうか? PDCAを回せ!ってゆうでしょ? 回答ではなくてすみません。一日も早く解決されることを願っております。 では、、では、、 (SoulMan) 2019/11/04(月) 16:17 ---- ありがとうございます。 やはり私もここまでのコードが何か不具合を起こしているとは思えないので 最初のグラフ設定の問題っぽいような気はしてるのですが、ここまで構築されたコードを 見たことがなかったので理解できれば自分も成長できるかと思いました office2016からはグラフの種類の中にヒストグラム追加されましたし 新しくマクロを組みなおして仕様書も残しておくのが一番の解決策でしょうか 私の技量ではシートにコードを書き込む方法しかわかりませんが ググったり掲示板でお力をお借りしながら似たような機能を持ったマクロを作っていければと思います 項目が未であれば計算し、算出して出力終わったら済に書き換える 項目が済なら再計算と整合性をとる 品番品名などなくても作動には影響しないように(多分IF関数のプロバティで) 値があればそれをグラフに反映させるというコードを見たとき そこまでVBで作成した方は本当にプロフェッショナルだったんだなと思いました 上の方で断らないのが悪いというお叱りを受けましたが挑戦と指導なくして成長もないと思います PDCAを回す、仰る通りです。使える状況にないという評価から改善しなくてはいけませんね できれば長く自分以外の人間でも理解できる仕様にしていけたらと思います ありがとうございました (める) 2019/11/04(月) 16:51 ---- コード提示ありがとうございます。 皆さんご指摘のように、質問掲示板で解決するような話じゃ無さそうですね。 ところで、 >元となるグラフが何かおかしい状態のため、 >ヒストグラムの上限より上の数値が勝手に >組み込まれた表になってしまうのかなと感じています とのこと。 元となるグラフが何かおかしい状態とは、どういうことでしょうか。 (γ) 2019/11/04(月) 21:07 ---- >Yさん コード的、あるいはエクセルファイルのシート的な推察ですが このマクロはヒストグラムの元となるグラフデータを別シートに一度作成し それを雛形として入力された値に合わせているような気がします 元グラフの文字の大きさを変えるとすべてのグラフの文字の大きさが変わりました なので、元となるグラフの設定あるいは書式の設定が多少ズレてヒストグラムの 上限下限値より外の数値が結果のグラフに差として出てしまうのかなと思っています (める) 2019/11/05(火) 09:34 ---- どんな風におかしいのか、今ひとつ、その説明ではわかりませんが、 じゃあ、その基準となるグラフを直したらすむじゃありませんか。 (γ) 2019/11/05(火) 09:41 ---- 約1.8Kstepもあるコードですね。 これは掲示板で尋ねるボリュームではないです。 プロに頼んでも、解析から修正まで1〜2ヶ月くらいかけて作業してもらってもおかしくないでしょう。 ざっと100万円くらいですかね? お金払って依頼するか、貴方自身が同じだけの時間をかけてやるか、しかないと思いますよ。 2,3日眺めて判らなくとも、データ内容を理解している貴方が1ヶ月かけて調べていけば、好きに直せるようになりませんか? 解析だけで1ヶ月かけても、全然長くないと思いますよ。 それに、丸ごと作り直す事を頼まれている訳では無く、Office365で正しく動作すれば良いのですよね? ステップ実行してみたり、計算結果を検算してみたり、調べるところは沢山あるのでは? まずは、同じデータで新旧のExcelで実行してみて、出力される結果がどう違うのか比べていくところからでしょうか。 何が違うのか。 どこが違うのか。 何故違うのか。 解析って、そうやって一歩一歩進めるものですよ。 (???) 2019/11/05(火) 14:15 ---- ???さん 返信ありがとうございます。 掲示板で尋ねるようなものではないことを質問した無礼をまずはお詫びします プロでも2か月かかるようなものですか・・・ 解析に1月かかっても遅くない、というお言葉ありがとうございます モジュールにコードを収納してシートには呼び出す記述のみという形式のマクロは 初めて触れるものでしたので、そこも学びながら少しづつ解析し一歩づつ進めていこうと思います 正しく印刷されたものが探せば現場のどこかにしまわれているかもしれませんので 本来の姿などを確認し、office2010などのバージョンでも正常に作動するか確認しながら 比較し進めようと思います。 ありがとうございました (める) 2019/11/05(火) 14:32 ---- yさん他、名無しで返信を頂いた皆様 助けを求める質問をしておいてこういう物言いをするのは我ながらどうかと 思うのですが言わずにはいられなかったので長文と乱文をお許し下さい 前スレでもコードを記述してしまい長くスクロールさせるのは申し訳ないと思い スレッドを分けましたがそれは自分勝手と罵られ コードを提示すればここで解決するようなことではないと言われ どんな風におかしいのか説明が難しいので画像もファイルも社内情報に繋がるものは削除して 私個人のonedriveに上げましたが、それをウイルスチェックも安全モードで見ることもせずに 「じゃぁグラフ直せば済む話じゃないか?」とは・・・ yさんは失礼ですが私にこれを命じた方々と同類のお人のようですね 「使わないと手作業になるから前使えたこのマクロ使えるようになんとかしろ」 言うなら誰でもできますがそれを解決するための相手の努力とか考えないのでしょうか? 以前のスレでは「マクロがあるのにコードが見えない」という現象の解決を目的にしてたので コードが見れている今、解決したと考えてます つまりヒストグラムのバグ取りが最終目標ではありますが前スレもこのスレも目的は別です 閲覧できるようになりコードを追っかけ、どうやらマクロ自体には問題はなさそうだと 判断したので最初のグラフの軸作成、書式設定の辺りのコードの仕組みが知りたかったのです 誰かに解説してもらいたい、教えて頂きたいと思いました 結局コードを羅列し長ったらしいページとしてしまったので意味なかったですけどね 技術がないのは勉強不足とは思いますが知りたい、調べたいと思う気持ちから 質問することがそんなに悪い事でしょうか? 自分の技量を超えたモノを何故引き受けるのかとも言われましたが 上司から言われて「自分にはわからないからできません」とその場で答える人間がいるでしょうか 「ちょっと見てみますね」と返事し調査をはじめるのではありませんか? その結果未知の領域であっただけであって最初はちょっと設定弄ればいいのかと思ってましたよ でもそれですぐ直らないから悪戦苦闘していて、助力を求めて質問させて頂いたわけです。 下手にコードを弄ればマクロ自体が作動しなくなりますからコピーして弄りつつ進めてますけど 暗闇を手探りで探すより導きとなる灯りが欲しいと思ったまでのことです ファイルを直せだなんて言ってません 現象を言葉で表現してもそもそも自分が認識できてない問題があるのであれば 何度説明をしても解決には至らないと思い画像にしたのです そして解決方法を知りたい、それを習得したいと思ったまでです 「エクセルの学校」というサイトの掲示板でありながら学ぶこともできないとは残念でなりません 大変お騒がせし、またマナーにも反する行動をしたことはお詫び致します。すみませんでした 直接の答えではありませんでしたが優しい回答をして下さった SoulManさん???さんには厚く御礼申し上げると共に 長乱文等々、マナーに反する行いを再度お詫び致します。 (める) 2019/11/05(火) 14:44 ---- > ファイルを直せだなんて言ってません そういう意味で書かれたものではないのでは? > コード的、あるいはエクセルファイルのシート的な推察ですが > このマクロはヒストグラムの元となるグラフデータを別シートに一度作成し > それを雛形として入力された値に合わせているような気がします > 元グラフの文字の大きさを変えるとすべてのグラフの文字の大きさが変わりました > なので、元となるグラフの設定あるいは書式の設定が多少ズレてヒストグラムの > 上限下限値より外の数値が結果のグラフに差として出てしまうのかなと思っています ↑のように分析されているのでしたら 修正に向けての作業は (1) 元グラフの文字の大きさの適正値の範囲(上限下限値)を探る【適正値に修正する】 (2) 元グラフからフォントサイズ等の情報を取得している部分を見つけて(上限下限値)に収まるようにコードを修正する という流れになると思いますが まずは(1)の作業(それでOKならそれを「変更するな」という指示ですますのもあり?) という意味ではないでしょうか? 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 火に注ぐ油として書いているのではありません。ご理解を。 (チオチモリン ) 2019/11/05(火) 18:15 ---- >「じゃぁグラフ直せば済む話じゃないか?」とは・・・ >yさんは失礼ですが私にこれを命じた方々と同類のお人のようですね えらい言われかたですな。 全体の話よりも、今問題になっているところに注力して解明していったらどうか という積もりだったんですがね。 チオチモリンさんがおっしゃっているようなアプローチを念頭に置いていました。 >グラフの設定あるいは書式の設定が多少ずれて というあたりを精査していくことで、 問題解明のキーが見えてくると思いました。 その点に限って事象をもう少し詳細に説明してもらえば、 議論が深まるかと思っていました。 なんて言うんですか、逆ギレとでもいうんですか、 せっかく助言したのに、残念なことでした。 そもそも質問のタイトルとなっている 「コードと仕組みを解説してほしい」いう点についても、 これだけの量のコードを提示されても無理です。 いくらボランティアといってもです。 何よりも、あなたのVBAのスキル水準にもよったものにする必要があるでしょう。 スキルのあるかたなら、コードを読んでいけるでしょう。 # ちょっと見ただけですが、きれいな構造をしたコード群だと思います。 # 動作確認していきながら、コードを読むことは可能な気がします。 VBAに慣れていない方には、負荷がかかるだけで、 マニュアルを作ったところで理解は進まないと思います。 こちらは議論を続ける用意はあるのですが、これで終了ということなら仕方ないですね。 (γ) 2019/11/05(火) 19:29 ---- ざっと拝見した感想を書く。 (1)checkboxなどがなくなっているので、そのOn,Offを使って判定している部分はエラーになる これは手元では問題ないのかもしれない。 (2)グラフがセル幅に収まらないケースがある。 これは、基準グラフと書込先の横幅の関係が、ExcelのVersionで違うことが原因と思われる。 もともと下記のような微調整を行っていたわけで、 ActiveSheet.Shapes("ヒストグラム" & Str(1000 + 特性No)).IncrementTop 3# ActiveSheet.Shapes("ヒストグラム" & Str(1000 + 特性No)).IncrementLeft 4# Excel365でも調整が必要。 書込先のCpグラフシートのC列の幅を広げて調整してはどうか。 (3)外れ値がある場合の、寸法線が正常位置にセットされないバグ。 (たぶん質問者さんはこのことを言っていたのか。不明だが) グラフ作成 procedureのなかで、寸法線を以下のとおり配置している。 '---規格線の移動--- Select Case 規格種別 Case "両" '両側規格の場合 線Min位置 = (下限規格 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 線Max位置 = (上限規格 - ランク(ランクMin_No)) * X目盛り + Plt_Y軸 ActiveChart.Shapes("線Min").Left = 線Min位置 ActiveChart.Shapes("線Max").Left = 線Max位置 ActiveChart.Shapes("寸法線").Left = 線Min位置 ActiveChart.Shapes("寸法線").Width = 線Max位置 - 線Min位置 のところで、最小値が大きくはずれていると、 寸法線の線Min位置は中央寄りになる。 しかし、基準グラフの寸法線の横幅が広いと、 Left位置を設定するときに、幅が変わらないので、 必要とされる位置までLeft位置を設定できなくなる。 --------------------> 本来やりたい設定 --------------------------> 基準グラフの寸法線 グラフエリアの限界上、これ以上右に動かせない。 従って最小値の位置がずれる。 ■これは、 ActiveChart.Shapes("寸法線").Width = 線Max位置 - 線Min位置 ActiveChart.Shapes("寸法線").Left = 線Min位置 と、操作を逆順にすればよい。(横幅を決めてからスタート位置を調整する) --------------------- 補足。 【ヒストグラムについて】 度数は、今なら「データ分析」ツールを使って度数分布を出すかもしれないが、 そこはあえて、今のものを変更する必要も無いと思われる。 あとは、普通に棒グラフにするだけだから、最新のヒストグラムを使っても そう簡単になるわけでもないだろう。 今のカスタマイズされたグラフの作りを、放棄する必要もない。 とりあえず、主力と思われる Sub 工程能力() 選定Cpグラフ 初期設定 工程能力メイン 列配置 If 実行 <> "異常" Then 罫線 End Sub の部分だけ、ざっと見た。 (γ) 2019/11/05(火) 23:23 ---- むろん、最新と思われるExcelバージョンで動作確認している。 (γ) 2019/11/05(火) 23:28 ---- チオチモリンさん >そういう意味で書かれたものではないのでは? 私としては2つ目のレスの >URLを見て直してくださいというのはもってのほかです。 という部分がまるで私がUPして誰か直してと丸投げしてるかのように受け取れました 何度も言うようですがとても長いコードでしたので全て記述するのは気が引けた故の行動ですが ボリュームが多すぎるのとそもそもそういう掲示板ではないということでしたので 私のマナー違反が招いたことと反省しております。 結果的にですが長々とコード記述していますし長いページになって 全てスクロールしなければいけなくなって申し訳なく思います Yさん >(3)外れ値がある場合の、寸法線が正常位置にセットされないバグ。 正にご指摘の部分が問題となっていると思います 寸法線が正常位置にセットされない、という表現をすればよかったのですね 元グラフを作るコードを直す道のりに一筋の光が差したように感じます 補足でも仰ってますがとても複雑ではあるものの非常に高度な技術を持った方が 作成なさった見やすいコードなので私個人としても会社としてもこのファイルを破棄してしまうのは とてももったいないですから何とか正常に作動するようにして運用していきたいです >じゃあ、その基準となるグラフを直したらすむじゃありませんか。 という部分に感傷的に反応したにも関わらず丁寧な解説をしていただきましたこと 厚く御礼申し上げます。 ようやく元グラフ作成の設定がおかしいのかもしれないと絞り込めてきた所だったので グラフがおかしいならグラフなおせばいいじゃんという表現を問題に取り組む際の フォーカス的な意味として受け取ることができませんでした。 感情的な物言いをしたにもかかわらずファイルを確認しコードを解析して下さった事 重ねて御礼申し上げます。ありがとうございました (める) 2019/11/06(水) 14:54 ---- office365以前は動作してたんでしょうかね。 () 2019/11/06(水) 16:36 ---- HNを書かないのはルール違反ですよ。 (半平太) 2019/11/06(水) 17:25 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/201911/20191104143055.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 96999 documents and 607826 words.

訪問者:カウンタValid HTML 4.01 Transitional