Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


74 / 3841 ページ ←次へ | 前へ→

【80997】Re:エクセル2016ですがクラッシュします
質問  goushi  - 19/7/5(金) 17:19 -

引用なし
パスワード
   新しいブックで確認したところ以下のコードが原因のようでした
イベントプロシージャの部分の
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Call 小計
End Sub

それを以下のように変更すると
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Call 小計
End Sub

クラッシュしなくなりました
エクセル2013だと問題なく動くようなのですが
よろしければお教えいただけないでしょうか
・ツリー全体表示

【80996】VBAによる電圧自動測定
質問  ムズロウ E-MAIL  - 19/7/5(金) 0:18 -

引用なし
パスワード
   Agilent Technologies社の6 1/2 Degit Multimeter2台による電圧自動測定で、エラー9が出てしまい困っています。
コードの概略としましては1測定温度に対し、2出力の電圧を500回測定し、その平均を出しSheet1に記述していくというものです。

以下コード

Private Sub let_mesurement_Click()
  Dim i As Integer
  Dim j As Integer
  Dim DATA As Variant
  Dim TOTAL As Single
  Dim AVERAGE As Single
  Dim temp As Integer
  Dim count As Integer
  
  count = Sheet1.Cells(5, 11)
  
  temp = InputBox("測定温度は何℃ですか?", "温度確認")
  
  Dim new_Worksheets As Variant
  Set new_Worksheets = Worksheets.Add()
  new_Worksheets.Name = Str(temp) & "℃"
  
  Worksheets(new_Worksheets.Name).Cells(1, 1) = temp & "℃"
  Worksheets(new_Worksheets.Name).Cells(2, 3) = "平均出力電圧[V]"
  Worksheets(new_Worksheets.Name).Cells(1, 4) = "電圧1"
  Worksheets(new_Worksheets.Name).Cells(1, 5) = "電圧2"

  Dim RM As New VisaComLib.ResourceManager
  Dim DMM As New VisaComLib.FormattedIO488
    
  For i = 23 To 24
  
    Set DMM.IO = RM.Open("GPIB0::" & i & "::INSTR") '入力されたVISAアド                        レスにてセッションオープン
  
    DMM.IO.Timeout = 120000   'タイムアウト時間120秒に設定
    TOTAL = 0
    AVERAGE = 0
  
    With DMM
      .WriteString "*RST;*CLS" 'リセット、クリア
      .WriteString "CONF:VOLT:DC AUTO" ', 1E-5"  'DCV測定
      .WriteString "SENS:VOLT:DC:NPLC 0.5"  '積分時間を0.5PPLに設定
      .WriteString "TRIG:COUN 500"  'トリガカウント500回 34401Aの                       内部メモリの限界512回
      .WriteString "INIT"   '測定開始
      .WriteString "*OPC?"  '動作完了確認(ここでは測定の完了を確                       認)
      .ReadString        '測定が完了すると1 が返る
      .WriteString "FETC?"
      
      DATA = .ReadList(ASCIIType_R4, ",")
  
      For j = 0 To 499
       Worksheets(new_Worksheets.Name).Cells(j + 4, i - 19) = DATA(j)
        TOTAL = TOTAL + DATA(j)
      Next j
  
      .IO.Close
  
  End With
  
  Set DMM = Nothing
  Set RM = Nothing
  
  AVERAGE = TOTAL / 500
    
  Worksheets(new_Worksheets.Name).Cells(2, i - 19) = AVERAGE
  
  Next i
  
  Sheet1.Cells(count + 2, 1) = temp
  
  Sheet1.Cells(count + 2, 2) = Worksheets(new_Worksheets.Name).Cells(2, 4)
  Sheet1.Cells(count + 2, 3) = Worksheets(new_Worksheets.Name).Cells(2, 5)
  
  Sheet1.Cells(5, 11) = count + 1
  
  Set new_Worksheets = Nothing
  
  MsgBox "測定完了!"
  
End Sub

コード以上

変数iはGPIBのアドレスです
Worksheets(new_Worksheets.Name).Cells(j + 4, i - 19) = DATA(j)
の部分でエラーが出るようですが、うまく機能するときもあり原因が分かりません
当方VBAの知識はあまりなくコード自体も元あったものを少し書き換えた形になります。自分の勉強不足ではありますが、こちらに質問したほうが早いかと思い投稿させていただいた次第です。
自分でも調べてみますがどうぞよろしくお願いします。
・ツリー全体表示

【80995】Re:エクセル2016ですがクラッシュします
お礼  goushi  - 19/7/4(木) 23:07 -

引用なし
パスワード
   ありがとうございます
とりあえず新しいブックで再確認してみます
・ツリー全体表示

【80994】Re:エクセル2016ですがクラッシュします
発言  γ  - 19/7/4(木) 22:25 -

引用なし
パスワード
   そのコードがクラッシュの原因とは思えないですね。
その他のイベントプロシージャとか動いていませんか?
また、新しいブックで同じことをしても、クラッシュが再現しますか?
そのあたりを検討してみてはどうでしょうか。
・ツリー全体表示

【80993】エクセル2016ですがクラッシュします
質問  goushi  - 19/7/4(木) 18:05 -

引用なし
パスワード
   セルに数式を記入し隣のセルに答えが出るマクロをデータとしていただいたのですが最近答えが出てしばらくするとエクセルがクラッシュするようになりました。マクロ初心者ですのでどこが問題かわかりません。よろしくお願いいたします

Dim NowR As Integer
Dim NowC As Integer
Dim siki

Sub 小計()

 NowR = ActiveCell.Row
 NowC = ActiveCell.Column
 rr = Cells(NowR - 1, 4).Value
 If NowC = 4 And IsEmpty(Cells(NowR - 1, 4)) = False And rr <> "計" Then
  siki = Cells(NowR - 1, 4).Value
  Cells(NowR - 1, 5).Formula = "=ROUND(" & siki & ",2)"
 End If

End Sub
・ツリー全体表示

【80992】Re:数字の表示形式について
発言  マナ  - 19/7/2(火) 22:35 -

引用なし
パスワード
   ▼mikky さん:
>ご回答ありがとうございました。
>Round関数で四捨五入させて、それから表示形式を変えれば良いのですね。

そんな2度手間しなくても
γさんの回答の
表示形式を0".00"
でよいですよ。

表示形式、0 で四捨五入されるので、
その結果に固定の文字列、".00"を付加です。

頭の固いわたしには、思いつきませんでした。
・ツリー全体表示

【80991】Re:数字の表示形式について
お礼  mikky  - 19/7/2(火) 22:19 -

引用なし
パスワード
   ご回答ありがとうございました。
Round関数で四捨五入させて、それから表示形式を変えれば良いのですね。

444.6→445.00と変換しないといけないような特殊な入力箇所がありましたので
質問させていただきました。

ありがとうございました。

▼γ さん:
>▼マナ さん:
>>初めてみました。
>>勉強になります。
>> 
>
>そうですよねえ。普通こういう表示はしないですもん。
>
>444.6 → (変換)445.00とするのは反則技です。
>どうみても、445.00という表示は、
>444.995〜445.00499...の範囲の数値を表すと予測させますから、
>ミスリードさせる間違った使い方と言ってよいのではないでしょうか。
・ツリー全体表示

【80990】Re:数字の表示形式について
発言  γ  - 19/7/2(火) 21:14 -

引用なし
パスワード
   ▼マナ さん:
>初めてみました。
>勉強になります。
> 

そうですよねえ。普通こういう表示はしないですもん。

444.6 → (変換)445.00とするのは反則技です。
どうみても、445.00という表示は、
444.995〜445.00499...の範囲の数値を表すと予測させますから、
ミスリードさせる間違った使い方と言ってよいのではないでしょうか。
・ツリー全体表示

【80989】Re:数字の表示形式について
お礼  マナ  - 19/7/2(火) 20:56 -

引用なし
パスワード
   ▼γ さん:
>表示形式
>0".00"

初めてみました。
勉強になります。
 
・ツリー全体表示

【80988】Re:数字の表示形式について
回答  γ  - 19/7/2(火) 20:43 -

引用なし
パスワード
   表示形式
0".00"
でよいかも。

こちらはVBA質問箱であって、
ExelとVBAの質問箱じゃないですよ、
・ツリー全体表示

【80987】Re:数字の表示形式について
発言  マナ  - 19/7/2(火) 20:35 -

引用なし
パスワード
   ▼mikky さん:

ここはExcel VBA(マクロ)の質問掲示板です。

ROUND関数で四捨五入して
セルの書式設定で表示形式を、0.00
・ツリー全体表示

【80986】数字の表示形式について
質問  mikky  - 19/7/2(火) 18:59 -

引用なし
パスワード
   数字の表示形式を、四捨五入かつ小数点以下は第2位まで00と変換したいのですが、その場合はどのような構文を使えばよいのでしょうか。

(例)
444.6 → (変換)445.00
394.44→ (変換)394.00
578.4→ (変換)578.00

恐れ入りますがご教授願います。
・ツリー全体表示

【80985】Re:2回に1回エラーが出る
お礼  さと  - 19/7/1(月) 12:36 -

引用なし
パスワード
   よろずやさん、γさん

ありがとうございました。
原因が分かってすっきりしました。
・ツリー全体表示

【80984】Re:application.runでのマクロの呼び出し...
お礼  初心者  - 19/6/30(日) 17:29 -

引用なし
パスワード
   なるほど、&でつなげばよかったのですね!

無事に動かすことができました!

ありがとうございます!
・ツリー全体表示

【80983】Re:application.runでのマクロの呼び出し...
発言  マナ  - 19/6/30(日) 16:17 -

引用なし
パスワード
   ▼初心者 さん:

>application.run x!y

application.run x & "!" & y

では?
変数は & でつなぎます。
・ツリー全体表示

【80982】application.runでのマクロの呼び出しに...
質問  初心者  - 19/6/30(日) 15:19 -

引用なし
パスワード
   for i = 1 to sheets(1).cells(rows.count,1).end(xlup).row

set book = workbooks.open(thisworkbook.path & "\" sheets(1).cells(i,1) & ".xlsm")

application.run 質問部分

book.close savechanges:=true

というマクロを作ったのですが、質問部分が ブック名!マクロ名 になるとは思うのですが、それらをセルを参照して取得することは可能でしょうか?

例えば

x = cells(i,1)
y = cells(i,2)

application.run x!y

になるのかと思ってやってみたのですが動かなかったので、もし可能ならばご教授頂けると幸いです。
・ツリー全体表示

【80981】Re:対応した2つのセル選択を同時に繰り...
発言  ピンク  - 19/6/28(金) 13:59 -

引用なし
パスワード
   参考になりますかな?
Sub Test()
  Dim dt As Range, n As Long
  
  n = 3
  For Each dt In Range("C4,C12,C25")
    MsgBox dt.Address & " の時は" & vbCrLf & _
      Sheets("rawdata").Range(dt.Address).Offset(-n).Address(External:=True)
    n = n + 4
  Next
End Sub
・ツリー全体表示

【80980】Re:対応した2つのセル選択を同時に繰り...
回答  よろずや  - 19/6/28(金) 9:55 -

引用なし
パスワード
   Sub Test()
  Dim i As Long
  For i = 0 To 2
    Sheets("Sheet1").Range(Split("C4,C12,C25", ",")(i)).Copy
    Sheets("Sheet2").Range(Split("C1,C5,C14", ",")(i)).PasteSpecial xlPasteValues
  Next i
End Sub

みたいな感じ。
・ツリー全体表示

【80979】対応した2つのセル選択を同時に繰り返す...
質問  KH  - 19/6/27(木) 23:46 -

引用なし
パスワード
   以下のコードでfor eachで繰り返し処理をしています(C4,C12,C25)。
次にHlookupの中のrange("C1")も繰り返し処理を同時にしたいです(違うシートのC1,C5,C14)。
つまり、C4の時はC1、C12の時はC5、C25の時はC14というように対応したもので繰り返しを行いたいです。

説明が下手で申し訳ありません。

分かる方、教えていただければと思います。


Sub 生データ貼り付け()
  Application.ScreenUpdating = False
  Dim dt As Range
  For Each dt In Range("C4,C12,C25")
    Dim i As Long
    i = 0
    dt.Select
    Do
      Selection.Value = WorksheetFunction _
      .HLookup(ActiveCell.Offset(-1, 0), Sheets("rawdata").Range("C1").CurrentRegion, 2, 0)
      i = i + 1
      Selection.Offset(0, 1).Select
    Loop While ActiveCell.Offset(-1, 0).Value <> ""
  Next
End Sub
・ツリー全体表示

【80978】Re:選択セルのみ変更して繰り返す
お礼  KH  - 19/6/27(木) 23:19 -

引用なし
パスワード
   ▼ピンク さん:

そっちにいれれば良いんですね!
色々とありがとうございました
・ツリー全体表示

74 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free