• ベストアンサー

正弦波DATAの各サイクルでの位相を求めるプログラムについて

kunkun_129の回答

回答No.9

ごめんなさい。よく考えてみると、ADボードからデータを採っているのでは なかったのですね。勘違いしておりました。深く謝ります。 オシロが自動的にADデータをフロッピーに落とすタイプのを使っているのですね。 プログラムでは、そのデータを読んでいるだけだったのです。 僕は、てっきりパソコンでADデータを採って、後から解析しているのだと思って いました。 オシロが採集したADデータでもいかないのなら、また話は別かも。 でも、理論的には、あのプログラムでいくはずです。そうでないと、世の中の数式が すべて通らなくなる事になります。 なぜ、生データに問題があるのか、わかりません。オシロの性能によるものかもしれません。 高機能なタイプでないといけないとか?。そういえば、ADのデータって、0.02secの周期 だから、丁度50Hzですね。一体なんのデータなんですか。参考までに聞かして頂ければ 幸いです。今後の私の勉強の為にも。 あの、その生データを1000個づつ分けて、1000ファイルに落とし、適当に抜き打ちで ランダムな任意の30個ほどのファイルを一度エクセルでグラフを描いたらどうです。 そこそこ、綺麗な正弦波形をなしているのか確認するもの方法です。 それか、VBで1000個づつ、読んで連続れグラフを描くプログラムを作成すれば。 20ステプもあればできます。マウスをクリックする度に、1000個ずつ読んでグラフを 描かすのです。 そうすれば、なにか手がかりがつかめるかも?。

関連するQ&A

  • VBAで統計プログラムを作成しています。

    現在VBA(Excel)にて統計のプログラムを作成しています。 Sheet2に統計表 統計対象のシートはシートタブの色が赤色(枚数不特定) 統計表の縦軸には、B4~15に4~3(1年度の月)。横軸にはF~J4に1~5。 統計対象シートの構成は同じで セルE4に1~5の数字のどれか セルE24には1~12の数字のどれかが入ります 統計表イメージ A    B    C    D 1    1    2    3 2 4月 3 5月 4 6月 5 7月 入力画面(シート名部分赤シート) E4 ←1~5のどれか E24 ←1~12のどれか この場合において、たとえばE4が"1"、E24が"4"だった場合 統計表のB2にカウントされるというプログラムが作りたいのですが、 Option Explicit Private Sub CommandButton2_Click() Dim Ws As Worksheet Dim cnt As Variant Dim grade() As Variant 'grade = grd = 学年 grade = Array("1", "2", "3", "4", "5") Dim month() As Variant 'month = mnt = 月 month = Array("4", "5", "6", "7", "8", "9", "10", "11", "12", "1", "2", "3") Dim grd As Integer '各変数宣言 Dim mnt As Integer Dim set1 As Integer Dim set2 As Integer Dim 月ー所 As Worksheet For grd = 1 To 5 If Cells(4, 5).Value = grade(grd - 1) Then cnt = 0 set1 = grd + 5 End If For mnt = 1 To 12 If Cells(24, 5).Value = month(mnt - 1) Then set2 = mnt + 3 End If   For Each Ws In Worksheets If Ws.Tab.ColorIndex = red Then cnt = cnt + 1 End If Next Worksheets("月ー所").Cells(set2, set1).Value = cnt ←この行でエラー1004 Next mnt Next grd MsgBox "統計しました。" End Sub 矢印で示した行のエラー1004の解除方法が分からず悩んでいます どうかよろしくお願いいたします。

  • VBA どこでもセル選択

    教えて頂いたVBAなのですがもう一つ Sub Macro1() Dim Ws01 As Worksheet Dim Counter As Long, i As Long, j As Long Dim INP As String Set wS = Worksheets("Sheet4") wS.Cells.ClearContents For i = 3 To ActiveSheet.UsedRange.Rows.Count INP = "" For j = Selection(1).Column To Selection(Selection.Count).Column If Cells(i, j) = 1 Then INP = INP & Cells(2, j) & "," End If Next j Counter = Counter + 1 If INP <> "" Then wS.Cells(Counter, "A") = Left(INP, Len(INP) - 1) End If Next i End Sub -------------------------------------------------------------- For i = 3 のところを3としないでどのセル(行)にも対応させたいのですが どうすればいいでしょうか?

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

  • マクロが思うように動きません

    エクセル2007です。 初心者です。 マクロが思うように動きません。 指定のセルが空白の場合、msgboxを表示して、処理を抜ける 空白でない場合は、処理をつつける。 と言う事をしたいです。 with~の後が問題だと思うのですが・・ Sub 受注履歴書き込み() Dim ws01 As Worksheet, ws02 As Worksheet Dim r As Long, c As Integer, tmp As Long Set ws01 = Worksheets("受注書") Set ws02 = Worksheets("受注履歴") ws01.Activate With ws01 If .Range("C2").Value = "" _ And .Range("M2").Value = "" _ And .Range("M11").Value = "" _ And Worksheets("粗利報告書").Range("D3").Value = "" Then MsgBox "受注Noが空白です。処理を中止します。" Exit Sub ws02.Cells(r, 1).Value = .Range("C2").Value ' 受注No ws02.Cells(r, 9).Value = .Range("A40").Value ' 備考 ws02.Activate End If End With End Sub 採点願えますでしょうか? 宜しくお願い致します。

  • このプログラムの問題点を教えてください。

    Public Cass test1 Private mBool As Boolean <Browsable(False)> _ Public Property Bool() As Boolean Get Return mBool End Get Set(ByVal value As Boolean) mBool = value End Set End Property Private GetNo(ByVal No As Integer, ByVal count As Integer) As Integer Dim intNewNo As Integer = 0 If (No + count) > 99999 Then mBool = True Else mBool = False inNewNo = No + count End If Return intNewNo End Function ※このプロパティを別のクラスで使用しました。 Public Class test2 Public sub Handan() Dim Han As test1 = New test1 If Han.Bool = True Then MsgBox("Yes") Else MsgBox("No") End If End Sub 多少端折りましたが、以上のようなプログラムを書きました。 Getnoメソッドは、test2クラスの別のメソッドで使われていたのですが、 Getnoの値によって処理を変えたかっただめ、test1にプロパティを作って 判断できるようにしました。 このコードをレビューしてもらったところ、なにか問題があったようなのですが (プロパティの意味がないとか、そういう趣旨の) レビューした本人と連絡がとれないため、どこがおかしいのかわからず困っています。 このBoolプロパティの使い方、問題がありましたら、教えてください。

  • シート名をループに

    質問を簡単にする為に以下のマクロがあるとします。 シート名が1~31とあるのですが、これをfor loopで 使うにはinteger等の定義が違うのでしょうか。 Sub bbb() Dim ws As Worksheet Dim 曜日 As String Dim i As Integer For Each ws In Worksheets For i = 1 To 31 If ws.Name = i Then  <----------ここでエラー  (コマンド) End If Next i Next End Sub

  • 休日を除いた日数の計算

    今個人的に、エクセルのVBAを勉強しているものです。 以下のソースを考えていづまっています。 よろしかったらいいアドバイスお願いします。 Sub 実際の日数() Dim POWPOS As Integer '休日の情報が入っているセル縦 Dim COLPOS As Integer '休日の情報が入っているセル横 Dim POWPOS2 As Integer ’日数が入っているセル縦 Dim COLPOS2 As Integer ’日数が入っているセル横 Dim NUM As Integer Dim NO As Integer Dim FLG As String '休日であればYが入っています Dim KIKAN As Integer Set WS = Worksheets("Sheet1") '計算 POWPOS = 1 COLPOS = 2 POWPOS2 = 1 COLPOS2 = 3 KIKAN = 0 FLG = WS.Cells(POWPOS, COLPOS) 'Y NO = WS.Cells(POWPOS2, COLPOS2) '30 Do If WS.Cells(POWPOS, COLPOS) = Y Then KIKAN = KIKAN + 1 Else KIKAN = KIKAN + 1 NO = NO - 1 End If POWPOS = POWPOS + 1 Loop Until NO = 0 COLPOS2 = COLPOS2 + 1 WS.Cells(POWPOS2, COLPOS2) = KIKAN End Sub

  • 小数点以下表示

    averageで計算した値を表示したところ、 勝手に四捨五入されてしまいました 小数点第二位まで表示したいので どなたかよろしくお願いいたします<m(__)m> Option Explicit Public Sub 平均() Const SH_NAME As String = "VBA" Dim art As String Dim i Dim ws As Worksheet Dim endrow As Long Dim msg As String Dim writerow As Integer Dim target As Range Dim ActCell As Variant Dim Result As Integer Set ws = ThisWorkbook.Worksheets(SH_NAME) writerow = 2 art = InputBox("日付を入力してください") With ws endrow = .Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To endrow If art = .Range("A" & i) Then If target Is Nothing Then Set target = Range("D" & i) Else Set target = Union(target, Range("D" & i)) End If Else If InStr(msg, .Range("A" & i)) = 0 Then msg = msg & .Range("A" & i) & vbCrLf End If End If Next i If msg <> "" Then MsgBox msg End If target.Select ActCell = Selection.Address Result = Application.WorksheetFunction.Average(.Range(ActCell)) Range("F39").Value = Result Range("F39").NumberFormatLocal = "0.00" End With End Sub

  • プログラムのイベント処理中断方法

    VB2008のイベンド中止処理についてお教え頂けませんでしょうか。 Formにボタンが1つあり、クリックするとCSVファイルが出力される処理をしたいです。 やりたい処理: 1. 「CSVファイル出力しますか?」というメッセージを出す。YESなら処理続行。Noなら処理中止。 2. CSVファイル出力処理。 3. 「CSVファイルを出力しました。」 (プログラム自体を終了したいわけではありません) VBAだと下記のようなコードを書きたいです。 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end end if 'CSV出力処理~~~ end sub VBにendというステートメントがあれば、良いのですが無さそうです・・・ 何か上手な処理はあるでしょうか?VBAのコードになってしまいますが、下記のような処理方法しかないでしょうか? '''''''''''''''''1 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end else 'CSV出力処理~~~ end if end sub ''''''''''''''''2 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then goto here end if 'CSV出力処理~~~ here: end sub

  • 最終セルまでデータを反映させるマクロ

    あるサイトからの利用コードです。 それをアレンジしようとしましたが、つまずきました。 マクロコードをご教示ください。 あるフォルダに複数のエクセルファイルがあります。 構成が同じシート(名前は同じ。仮に "各シート")を、 別ブック(仮に "まとめ")の一つのシートに纏めます。 その時、複数ファイルの D4のデータだけは "まとめ"ブックのL列に反映させたいのですが、 下記コードを使用すると、どこにどのようなコードを入れたら良いのでしょうか? 因みに複数ファイルの8行目からコピーされ、 複数ファイルのCからM列は まとめブックのAからK列に反映されるようになってます。 (まとめブックの1行目は見出し) Dim i As Integer Dim strPath As String Dim strFileName As String Dim WB1 As Workbook Dim WS1 As Worksheet Dim WS2 As Worksheet Dim lngRowCount As Long Set WS2 = Sheets("まとめ") strPath = ThisWorkbook.Path strFileName = Dir(strPath & "\*.xls*") Do While strFileName <> "" If strFileName <> ThisWorkbook.Name Then Set WB1 = Workbooks.Open(strPath & "\" & strFileName) Set WS1 = WB1.Sheets("各シート") With WS1.Range("C7") lngRowCount = .Worksheet.Cells(.Worksheet.Rows.Count, .Column).End(xlUp).Row - .Row If lngRowCount >= 1 Then With .Resize(lngRowCount, 11).Offset(1) .Copy WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1) End With End If End With _____ここで つまずく_____    With WS1.Range("D4")     .Copy WS2.Range("L" & WS2.Rows.Count).End(xlUp).Offset(1)     WS2.Range("L" & WS2.Rows.Count).End(xlUp).AutoFill Destination = Range("E1048576").End(xlUp).Row _____ここまで つまずく_____ WB1.Close False End If strFileName = Dir Loop End Sub エクセル2013です。 宜しくお願い致します。