ここから質問投稿すると、最大10000ポイント当たる!!!! >>

現在、Excel2003を使用し折れ線グラフを作成しようと考えています。

そこで皆さんに教えて頂きたいのですが、
Excelに、
--------------------------------
○セル番号L・M・N(セルを結合して中央揃え)
○セル番号LMNの5行~10行目にそれぞれ計6個、2から-2ぐらいの変動幅でリアルタイムに数字が表示。
--------------------------------
このようなデータを外部データリンクから取得しています。

そこでこの6個の数値の動きをそれぞれ30分おきぐらいに折れ線グラフに反映させ、一ヶ月くらいの数値の動きを見たいのですが、このようにリアルタイムに動くグラフ(株のチャートのようなもの)は作成可能でしょうか。

どなたか分かる方、知恵をお借りいただける方、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>作成可能でしょうか。


VBA+アルファに熟達する人なら、可能でしょう。
もっと本格的には金を払ってプロにやらせる課題かと思う。
ただVBAの普通の解説書の範囲を超えていますので、勉強が必要です。
この程度になると、このように丸投げで、コードの回答依頼はダメでしょう。
タイマーのような仕組みを入れて、30分経過ごとにプログラム(グラフの再描画)を実行させればよいとおもう。
ーーーー
WEBで「VBA 時間経過後」などで照会し、調べて取っ掛かりにしてはどうでしょう。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBでリアルタイムにグラフを書きたいのですが。

この度EXCELに入ってくるCSVデータをリアルタイムで折れ線グラフに変換することになりました。
何とかVBAで出来そうだ・・・まではわかったのですが、初めてVBの画面を開いた私ですので
命令語の意味すらわからず大変困っています。

・約0.5秒に1回セルA1とB1にデータが入ってくる。
・それを別々に折れ線グラフに表示する。
・表示後、セルA1とB1の内容をクリアする。
以上の繰り返しで行いたいと思っています。

どなたか詳しい方がいらっしゃいましたらどのようなプログラムに
なるのか教えて頂けませんでしょうか?
どうかよろしくお願い致します。
OSはXP、Officeは2000を使用しております。

Aベストアンサー

1,2
3,4
5,6,
7,8
9,10
11,12
13,14
15,16
17,18
19,20

こういう<Test.csv>を0.5秒間隔で呼び込んで折れ線グラフにするということですか?
Excel は、操作したこともない門外漢ですが、出来そうな気がします。

まず、0.5秒間隔で休止する関数とCSVを読み込む関数を標準モジュールに追加。

Public Sub Pause(ByVal PauseTime As Single)
  Dim Finish As Single
  
  Finish = Timer + PauseTime
  Do
    DoEvents
  Loop Until Timer > Finish
End Sub

Public Function FileRead(ByVal FileName As String, Optional isStop As Boolean = False) As String
On Error GoTo Err_FileRead
  Static isOpen As Boolean
  Static fso  As FileSystemObject
  Static fil  As File
  Static txs  As TextStream
  
  If Not isOpen Then
    isOpen = True
    Set fso = New FileSystemObject
    Set fil = fso.GetFile(FileName)
    Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)
  End If
  FileRead = txs.ReadLine
Exit_FileRead:
  If Len(FileRead) = 0 Or isStop Then
    isOpen = False
    Set txs = Nothing
    Set fil = Nothing
    Set fso = Nothing
  End If
  Exit Function
Err_FileRead:
  Resume Exit_FileRead
End Function

※Microsft Runtime Scripting を参照するように設定!

次に、グラフを用意しコマンドボタンを配置しCSVを読み込んでみる。

Private Sub CommandButton1_Click()
  Dim N    As Integer
  Dim Data  As String
  Dim Datas() As String
  
  Do
    Data = FileRead("C:\Temp\Test.csv")
    Datas() = Split(Data, ",")
    N = UBound(Datas())
    If N = 1 Then
      Me.Cells(1, 1) = Datas(0)
      Me.Cells(1, 2) = Datas(1)
    End If
    ' Worksheets("Sheet1").ChartObjects(1).Chart.Refresh
    Pause 0.5
  Loop Until Data = ""
End Sub

Chart.Refresh は、あってもなくてもグラフは変化するようです。
もちろん、エクセルのグラフはエクセルデータを反映するもんだから、セルの更新を先にしている。

こんなんでどうでしょうか?
生まれて初めて挑んだんで最適解かどうかはかなり怪しいですが・・・。

1,2
3,4
5,6,
7,8
9,10
11,12
13,14
15,16
17,18
19,20

こういう<Test.csv>を0.5秒間隔で呼び込んで折れ線グラフにするということですか?
Excel は、操作したこともない門外漢ですが、出来そうな気がします。

まず、0.5秒間隔で休止する関数とCSVを読み込む関数を標準モジュールに追加。

Public Sub Pause(ByVal PauseTime As Single)
  Dim Finish As Single
  
  Finish = Timer + PauseTime
  Do
    DoEvents
  Loop Until Timer > Finish
End Sub

Public Funct...続きを読む

QVBAでリアルタイムで計算結果をグラフに表示

Excel2010でVBAを使っています。


30分くらいかかる計算があるのですが、
計算が終了するまで待っていたのでは、計算結果がどのようなものになるのか分からないため
リアルタイムで計算結果をグラフに表示してくれるプログラムを書きたいと考えています。


検索したところ、
http://www.johoka.net/vbsin.htm
VBの場合には、Picture1.Line を使えば、うまくいきそうだということが分かりました。
同様のことをVBA上でやりたいのですが、
http://pasokoma.jp/xp_bto/a_333563
のページにはVBAにはそのような機能はないと書かれています。

本当にユーザーフォーム上でグラフを表示させることはVBAではできないのでしょうか?


http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9d92.html
そのほか、シート上でのグラフを画像として表示させるという方法も見つかりました。
この方法でリアルタイムで計算結果を表示させるにはどうしたら良いですか?

Aベストアンサー

#3です。
下記の様なコードで普通にグラフは書き換わりますので、何が問題なのかわかりかねます。

☆ワークシートモジュールに記載、コマンドボタンを2個もうけている。
Dim stopFlag As Boolean

Private Sub CommandButton1_Click()
Dim i As Long
Dim j As Double

stopFlag = False
i = 1
Do While Not stopFlag
j = i ^ 2 + 3 * i + 4
  ’グラフのデータ範囲のセル一個だけ変更している
Me.Range("B3").Value = j
i = i + 1
DoEvents: DoEvents: DoEvents
Loop

End Sub

Private Sub CommandButton2_Click()
stopFlag = True
End Sub

QアニメーションするExcelのグラフ

エクセルで、ある2種類の(x,y)グラフの値の一覧を入力した以下のようなものを作りました。

  グラフ1  グラフ2
  X  Y   X  Y
0 100 200  103 201
1 101 201  102 198
2 102 202  102 199
3 103 203  104 200
:  :  :   :  :

これを行番号ごとに連動させてアニメーションさせたグラフを作りたいのですが
Excel内、もしくはその他アプリケーションでそういったことをすることは可能でしょうか?

上の説明だと分かりにくいかもしれませんのでアニメーションの補足説明
行番号0のグラフ1の(100,200)とグラフ2の(103,201)の点が表示される
座標間0→1に線分が引かれる
行番号1のグラフ1の(101,201)とグラフ2の(102,198)の点が表示される
座標間1→2に線分が引かれる
以降繰り返し

というような感じで行番号に連動して同じ時間軸の点が表示されるというのです

Aベストアンサー

外しているかもしれませんが、下記のように考えてみました。
グラフ1のX値データはC3以下、グラフ2のY値データはE3以下E列以下にあると仮定しています。
グラフは1つ、系列も1つ、データ範囲は1行毎に移動

Dim myTime As Variant
Dim rng As Range
Dim c As Range

Set rng = Range("B3", Cells(Rows.Count, 2).End(xlUp))

With ActiveChart.SeriesCollection(1)
For Each c In rng
.XValues = "{" & c.Value & "," & c.Offset(, 2).Value & "}"
.Values = "{" & c.Offset(, 1).Value & "," & c.Offset(, 3).Value & "}"
.ChartType = xlXYScatter

myTime = Now + TimeValue("00:00:01")
Do While Now < myTime
DoEvents
Loop

.ChartType = xlXYScatterLines

myTime = Now + TimeValue("00:00:02")
Do While Now < myTime
DoEvents
Loop
Next c
End With

外しているかもしれませんが、下記のように考えてみました。
グラフ1のX値データはC3以下、グラフ2のY値データはE3以下E列以下にあると仮定しています。
グラフは1つ、系列も1つ、データ範囲は1行毎に移動

Dim myTime As Variant
Dim rng As Range
Dim c As Range

Set rng = Range("B3", Cells(Rows.Count, 2).End(xlUp))

With ActiveChart.SeriesCollection(1)
For Each c In rng
.XValues = "{" & c.Value & "," & c.Offset(, 2).Value & "}"
...続きを読む

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Qエクセルで定期的(30分おき)にマクロを実行させる方法は?

エクセルにて刻一刻変る外部データ(株価)を表示させています。それを自動で30分置きにデータ蓄積させる方法はありませんか?

現在は自分で作ったキーボードマクロで 時計を見ながらボタンを押し、データを取り込ん出る始末です。

その簡単マクロに「30分置きに実行させる」と云う記述を付け足す程度で自動実行させる事は可能でしょうか? 
当方キーボードマクロでの自動書き込みしか出来ない素人ですが、少々複雑な物であっても頑張ってみるつもりですので、どなたかご教授下さい。

Aベストアンサー

えーー。。実際に使うなら、zap35 さんのように、OnTime で実行したマクロ
の中で再度 OnTime を登録する方が良いと思います。

この方式だと、OnTime で登録されるのは常に一つだから管理し易いです。
これに未実行の予約を破棄できる仕組みを組み込めばベストだと思います。

今更こんな事言うのは、#6 の大げさなコードを見て、「また、やっちまった...」
と反省しているからです。が、#6 をアップしてしまった以上、それなりに
まとめておきました。こちらは、一括登録方式です。

コードのままだと、午前10時~午後6時まで30分間隔で Macro1 を実行します。
変更点は、

 ・ブッククローズをトラップした
 ・進捗状況をステータスバーに表示するようにした
 ・その他しょうもないこと

です。

このままコピペで使えると思いますが、試される場合は、MACRO1 はご自分の
用途に合わせて適切に修正して下さい。


Option Explicit

Dim mcolTask As Collection

Sub 実行予約()

  Dim i      As Date
  Dim strProcName As String
  Dim datBigin  As Date
  Dim datEnd   As Date
  Dim datInterval As Date
  Dim datTimeout As Date
  Dim blnJustTime As Boolean

  ' Setting-------------------------------------------------------

  datBigin = TimeValue("10:00:00")  ' 開始時刻
  datEnd = TimeValue("18:00:00")   ' 終了時刻
  datInterval = TimeValue("00:30:00") ' 実行間隔(少なくとも数秒以上で)
  datTimeout = TimeValue("00:02:00") ' 実行待機タイムアウト
  blnJustTime = True         ' datInterval で丸めるか
  strProcName = "MACRO1"       ' 実行するマクロ名

  '---------------------------------------------------------------

  ' 既に実行予約されているか確認
  If mcolTask Is Nothing Then

    ' 日付シリアル値を加算
    datBigin = datBigin + Date
    datEnd = datEnd + Date
    ' 終了時刻が開始時刻より小さければ日をまたぐので補正
    If datEnd < datBigin Then datEnd = datEnd + 1
    ' 現在時刻が既に終了時刻を過ぎている場合
    If datEnd < Now() Then
      MsgBox "終了時刻を過ぎているため予約できません。", vbCritical, "終了"
      Exit Sub
    End If
    ' 現在時刻が開始時刻を過ぎていれば補正
    If datBigin < Now() Then
      ' 開始時刻を datInterval で指定された値で丸めるか
      If blnJustTime Then
        datBigin = Application.Floor(Now() + datInterval, datInterval)
      Else
        datBigin = Now() + datInterval
      End If
    End If

    ' 初期化
    Set mcolTask = New Collection

    ' メイン部分
    For i = datBigin To datEnd Step datInterval
      ' 後から取り消せるようにコレクションに退避
      mcolTask.Add CStr(i) & "," & strProcName
      ' Application.Ontime で実行予約を行う
      Application.OnTime EarliestTime:=i, _
                Procedure:=strProcName, _
                LatestTime:=i + datTimeout, _
                Schedule:=True
    Next i
  Else
    MsgBox "既に実行中です", vbInformation
  End If

End Sub

Sub 未実行予約強制解除()
 
  Dim i  As Long
  Dim vntS As Variant
 
  On Error Resume Next
  Application.StatusBar = "タスク破棄中... "
  For i = 1 To mcolTask.Count
    vntS = Split(mcolTask.Item(i), ",")
    Application.OnTime CDate(vntS(0)), CStr(vntS(1)), Schedule:=False
  Next i
  Application.StatusBar = ""
  Set mcolTask = Nothing

End Sub

' タスク管理用
Private Sub RemoveTask()
  
  On Error Resume Next
  mcolTask.Remove (1)
  Application.StatusBar = "待機中のタスク... " & mcolTask.Count
  DoEvents
  Beep
  If mcolTask.Count = 0 Then
    Application.StatusBar = ""
    Set mcolTask = Nothing
  End If

End Sub

Sub Auto_Close()

  Dim intRes As Integer
  If Not mcolTask Is Nothing Then
    intRes = MsgBox( _
        Prompt:="待機中のタスクが " & mcolTask.Count & " 件あります。" & vbLf _
           & "破棄して終了しますか?", _
        Buttons:=vbOKCancel + vbDefaultButton2 + vbExclamation, _
        Title:="問い合わせ")
    If intRes = vbOK Then
      Call 未実行予約強制解除
    Else
      ' ブッククローズをキャンセル
      Application.ExecuteExcel4Macro ("Halt(True)")
    End If
  End If

End Sub

' 呼び出すマクロ--> Application.Ontime のマクロ名と一致させて下さい
Sub MACRO1()

  Dim lngRow As Long
  With ThisWorkbook.Sheets("Sheet1")
    lngRow = .Range("V65536").End(xlUp).Offset(1).Row
    .Cells(lngRow, "V").Resize(1, 3).Value = .Range("Q12:S12").Value
    .Cells(lngRow, "Y").Value = Now()
  End With

  ' ご自分のマクロの最後に次の一行を追加しておいて下さい
  Call RemoveTask

End Sub

えーー。。実際に使うなら、zap35 さんのように、OnTime で実行したマクロ
の中で再度 OnTime を登録する方が良いと思います。

この方式だと、OnTime で登録されるのは常に一つだから管理し易いです。
これに未実行の予約を破棄できる仕組みを組み込めばベストだと思います。

今更こんな事言うのは、#6 の大げさなコードを見て、「また、やっちまった...」
と反省しているからです。が、#6 をアップしてしまった以上、それなりに
まとめておきました。こちらは、一括登録方式です。

コードのままだと...続きを読む

QExcel VBAで「プログラム実行」ボタンと「プログラム停止」ボタンをつけたい

ExcelでVBAを使いアプリをつくっています。
プログラムを実行させるボタンはもちろんつくれるのですが、
プログラムを停止させるボタンをつくるにはどうしたら良いのかと悩んでいます。

ボタンに登録できるのはひとつのプロシージャですよね。
とすると「他のプロシージャを止める」プロシージャをつくらねばならないのでしょうか。とするとどうやって・・・?

Aベストアンサー

s_husky です。

状況が判明したので再回答!

Public StopNow As Boolean

Public Sub Test()
  Do Until StopNow
    Sheets(1).Cells(1, 1) = Sheets(1).Cells(1, 1) + 1
    Pause 10
  Loop
  If StopNow Then
    MsgBox "Test の実行をストップしました。"
  End If
End Sub

Public Sub Pause(ByVal PauseTime As Single)
  Dim Finish As Single
  
  Finish = Timer + PauseTime
  Do
    DoEvents
  Loop Until Timer > Finish
End Sub

Private Sub CommandButton2_Click()
  StopNow = True
End Sub

Private Sub CommandButton1_Click()
  Test
End Sub

起動したプロシージャを止める必要があるということはループ処理と理解。
ならば、ループの条件を操作すれば宜しいかと。
CommandButton1 で起動した Test は CommandButton1 で止めれます。

Application.OnTime TimeValue("16:30:00"), "Test"

で起動しようと同じ理屈。

Application.OnTime は、一種の起動ツール。
当然に停止機能もあるが、停止を制御するには上記のような仕掛けが必要と思います。

s_husky です。

状況が判明したので再回答!

Public StopNow As Boolean

Public Sub Test()
  Do Until StopNow
    Sheets(1).Cells(1, 1) = Sheets(1).Cells(1, 1) + 1
    Pause 10
  Loop
  If StopNow Then
    MsgBox "Test の実行をストップしました。"
  End If
End Sub

Public Sub Pause(ByVal PauseTime As Single)
  Dim Finish As Single
  
  Finish = Timer + PauseTime
  Do
    DoEvents
  Loop Until Timer > Finish
End Sub

P...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Qエクセル 0や空白のセルをグラフに反映させない方法

以下の点でどなたかお教えください。

H18.1~H20.12までの毎月の売上高を表に記載し、その表を元にグラフを作成しています。グラフに反映させる表の範囲はH18.1~H20.12の全てです。
そのためまだ経過していない期間のセルが空白になり、そこがグラフに反映され見づらくなります。
データを入力する都度グラフの範囲を変更すればいいのですが、うまく算式や設定等で空白や0円となっているセルをグラフに反映させない方法はありますか?

お手数ですが、よろしくお願いいたします。

Aベストアンサー

売上高のセルは数式で求められているのですよね?
それなら
=IF(現在の数式=0,NA(),現在の数式)
としてみてください。
つまり、0の場合はN/Aエラーにしてしまうんです。N/Aエラーはグラフに反映されません。

QNをkgに換算するには?

ある試験片に40kgの重りをつけた時の荷重は何Nをかけてあげると、重り40kgをつけたときの荷重と同等になるのでしょうか?一応断面積は40mm^2です。
1N=9.8kgfなので、「40kg=N×0.98」でいいのでしょうか?
ただ、式の意味がイマイチ理解できないので解説付きでご回答頂けると幸いです。
どなたか、わかる方よろしくお願いします。

Aベストアンサー

こんにちは。

kgfはSI単位ではないですが、質量の数値をそのまま重さとして考えることができるのがメリットですね。


>>>
ある試験片に40kgの重りをつけた時の荷重は何Nをかけてあげると、重り40kgをつけたときの荷重と同等になるのでしょうか?

なんか、日本語が変ですね。
「ある試験片に40kgの重りをつけた時の引っ張りの力は何Nの力で引っ張るのと同じですか?」
ということですか?

・・・であるとして、回答します。

40kgのおもりなので、「おもりにかかる重力」は40kgfです。

重力は万有引力の一種ですから、おもりにも試験片にも、地球からの重力はかかります。
しかし、試験片の片方が固定されているため、見かけ、無重力で、試験片だけに40kgfの力だけがかかっているのと同じ状況になります。

試験片にかかる引っ張り力は、

40kgf = 40kg×重力加速度
 = 40kg×9.8m/s^2
 = だいたい400N

あるいは、
102グラム(0.102kg)の物体にかかる重力が1Nなので、
40kg ÷ 0.102kg/N = だいたい400N


>>>1N=9.8kgfなので、「40kg=N×0.98」でいいのでしょうか?

いえ。
1kgf = 9.8N
ですね。


>>>一応断面積は40mm^2です。

力だけでなく、引っ張り応力を求めたいのでしょうか。
そうであれば、400Nを断面積で割るだけです。
400N/40mm^2 = 10N/mm^2 = 10^7 N/m^2
1N/m^2 の応力、圧力を1Pa(パスカル)と言いますから、
10^7 Pa (1千万パスカル) ですね。

こんにちは。

kgfはSI単位ではないですが、質量の数値をそのまま重さとして考えることができるのがメリットですね。


>>>
ある試験片に40kgの重りをつけた時の荷重は何Nをかけてあげると、重り40kgをつけたときの荷重と同等になるのでしょうか?

なんか、日本語が変ですね。
「ある試験片に40kgの重りをつけた時の引っ張りの力は何Nの力で引っ張るのと同じですか?」
ということですか?

・・・であるとして、回答します。

40kgのおもりなので、「おもりにかかる重力」は40kg...続きを読む

QExcelで動的なグラフを作成したい 月ごとに変化

添付画像のようなデータが、シート上に並んでいます。
上下には、2009以前、2012以降が並びます。

今月を含む過去5ヶ月間のグラフを作成したいのです。
それだけだったらすぐ出来るわけですが、
月ごとにグラフデータの範囲をずらしたいと思っています。
具体的には
2011.02月の範囲:2010.10 - 2011.02
2011.03月の範囲:2010.11 - 2011.03

こんな感じで、当月を含む過去5ヶ月のデータを拾って
グラフ化したいと思っています。

コレは可能でしょうか。どうぞ、よろしくお願いします。

Aベストアンサー

横の評だと見にくいので縦の表にしてグラフを作成してみました。
年月の欄は「2010年1月」と入力して下方向にオートフィルします。

データ範囲を選択して棒グラフを作成します。

「数式」「名前の定義」で、以下の名前を定義し参照範囲に以下の数式を入力します。

「年月」
=OFFSET(Sheet1!$A$2,MATCH(TODAY(),Sheet1!$A$3:$A$26,1)-4,0,5,1)

「データ」
=OFFSET(Sheet1!$B$2,MATCH(TODAY(),Sheet1!$A$3:$A$26,1)-4,0,5,1)

棒グラフの系列を選択し、数式バーの数式を以下のように変更します。

=SERIES(Sheet1!$B$2,Sheet1!年月,Sheet1!データ,1)


人気Q&Aランキング