Excel VBA質問箱 IV

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

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


5627 / 13645 ツリー ←次へ | 前へ→

【49729】NCプログラムの一部を表記したいのですが おやじvba若葉マーク 07/6/18(月) 23:28 質問[未読]
【49732】Re:NCプログラムの一部を表記したいのですが ウッシ 07/6/19(火) 0:07 発言[未読]
【49734】Re:NCプログラムの一部を表記したいのですが おやじvba若葉マーク 07/6/19(火) 0:43 発言[未読]
【49737】Re:NCプログラムの一部を表記したいのですが ウッシ 07/6/19(火) 9:00 発言[未読]
【49766】Re:NCプログラムの一部を表記したいのですが おやじvba若葉マーク 07/6/20(水) 23:50 お礼[未読]
【49752】Re:NCプログラムの一部を表記したいのですが Hirofumi 07/6/19(火) 19:35 回答[未読]
【49767】Re:NCプログラムの一部を表記したいのですが おやじvba若葉マーク 07/6/20(水) 23:52 お礼[未読]

【49729】NCプログラムの一部を表記したいのですが
質問  おやじvba若葉マーク E-MAIL  - 07/6/18(月) 23:28 -

引用なし
パスワード
   エクセルシート
セルA   セルB  セルC    セルD  セルE  セルF
加工部位  刃先R  面の大きさ  角度   径    Z位置
2       0.2    0.300     60    20.000  12.500


Sub 外径面取4()
Dim 行番号 As Integer
Dim A As Integer
Dim B As Double
Dim C As Double
Dim D As Double
Dim E As Double
Dim F As Double
Dim H As Double
Dim I As Double

A = 1
B = 2
C = 3
D = 4
E = 5
F = 6
H = 8
I = 9
kakudo = 0.01745329252

With ActiveSheet
For 行番号 = 2 To 9999
If .Cells(行番号, B).Value = "" Then
  Exit For
  Else
  .Cells(行番号 + 3, H).Value = "G3" & "X" & Round(.Cells(行番号, E).Value, 3) & "Z" & _
  Round((.Cells(行番号, F).Value - .Cells(行番号, C).Value * Tan(.Cells(行番号, D).Value * kakudo) _
  * Tan((90 - .Cells(行番号, D).Value) * kakudo) - .Cells(行番号, B).Value), 3) & "R" & Cells(行番号, B).Value
 End If
 Next 行番号
End With
End Sub


これでVBAを実行すると。結果が
G3X20Z12R0.2
となりましたが
G3X20.Z12.R0.2
と表記するにはどうしたらよいのでしょうか?どなたか教えてください。よろしくお願いします。

【49732】Re:NCプログラムの一部を表記したいので...
発言  ウッシ  - 07/6/19(火) 0:07 -

引用なし
パスワード
   こんばんは

その追加された二つのピリオドの意味を書かないと、
誰も答えられないと思いますよ。

ただ付け加えればいいのなら、式の途中の
"Z"を".Z"
"R"を".R"
にするだけですけど。

【49734】Re:NCプログラムの一部を表記したいので...
発言  おやじvba若葉マーク E-MAIL  - 07/6/19(火) 0:43 -

引用なし
パスワード
   ▼ウッシ さん:
>こんばんは
>
>その追加された二つのピリオドの意味を書かないと、
>誰も答えられないと思いますよ。
>
>ただ付け加えればいいのなら、式の途中の
>"Z"を".Z"
>"R"を".R"
>にするだけですけど。

すみません。
計算結果に小数点以下の値があるとX20.123というように表示されるのですが計算結果に小数点以下に値がない場合はX20というようになってしまいます。
ピリオドの意味は小数点です。
自分がいま扱っているNC旋盤ではプログラムを組む際にX座標値やZ座標値に小数点以下の値がない場合、例えばX座標の値が20ミリならばX20.としないでX20にすると20ミリのとこまで動くはずのものが0.02みりのところまで動いてしまって大変な事になってしまうんです。

【49737】Re:NCプログラムの一部を表記したいので...
発言  ウッシ  - 07/6/19(火) 9:00 -

引用なし
パスワード
   こんにちは

結局、小数点以下があるかないか判定してピリオドを付けるか付けないかすれば
いいと思います。

Sub 外径面取5()
  Dim 行番号 As Long
  Dim A   As Long
  Dim B   As Long
  Dim C   As Long
  Dim D   As Long
  Dim E   As Long
  Dim F   As Long
  Dim H   As Long
  Dim I   As Long
  Dim kakudo As Double
  Dim R   As String
  Dim Z   As String
  Dim tmpD1 As Double
  Dim tmpD2 As Double
  
  A = 1
  B = 2
  C = 3
  D = 4
  E = 5
  F = 6
  H = 8
  I = 9
  kakudo = 0.01745329252

  With ActiveSheet
    For 行番号 = 2 To 9999
      If .Cells(行番号, B).Value = "" Then
        Exit For
      Else
        tmpD1 = WorksheetFunction.Round(.Cells(行番号, E).Value, 3)
        tmpD2 = WorksheetFunction.Round((.Cells(行番号, F).Value - _
          .Cells(行番号, C).Value * Tan(.Cells(行番号, D).Value * kakudo) _
          * Tan((90 - .Cells(行番号, D).Value) * kakudo) - _
          .Cells(行番号, B).Value), 3)
        Z = IIf(tmpD1 = Int(tmpD1), ".Z", "Z")
        R = IIf(tmpD2 = Int(tmpD2), ".R", "R")
        .Cells(行番号 + 3, H).Value = _
          "G3" & "X" & tmpD1 & Z & tmpD2 & R & Cells(行番号, B).Value
      End If
    Next 行番号
  End With
End Sub

【49752】Re:NCプログラムの一部を表記したいので...
回答  Hirofumi  - 07/6/19(火) 19:35 -

引用なし
パスワード
   こんなで善かったかな?
善く確かめて下さい

確か"."が入るか、入ら無いかとでは、
ミリ単位と受けるか?、ミクロン単位で受けるか?が違うのでしたよね?
後、"."の前の0は要りましたっけ? 0.2 → .2

Option Explicit

Public Sub Sample()

  '◆Listのデータ列数(A列〜F列)
  Const clngColumns As Long = 6
  '表示書式
  Const cstrForm As String = "0.###"
  
  Dim i As Long
  Dim lngRows As Long
  Dim rngList As Range
  Dim strResult As String
  Dim vntData As Variant
  Dim dblResult As Double
  Dim dblPai As Double
  Dim strProm As String

  'πの値を取得
  dblPai = Application.WorksheetFunction.Pi
  
  '◆Listの先頭セル位置を基準とする(A列の列見出しのセル位置)
  Set rngList = ActiveSheet.Cells(1, "A")

  With rngList
    '行数の取得
    lngRows = .Offset(Rows.Count - .Row, 1).End(xlUp).Row - .Row
    If lngRows <= 0 Then
      strProm = "データが有りません"
      GoTo Wayout
    End If
  End With
  
  '画面更新を停止
  Application.ScreenUpdating = False

  With Application.WorksheetFunction
    For i = 1 To lngRows
      'A〜F列までの値を配列に取得
      vntData = rngList.Offset(i).Resize(, clngColumns).Value
      '出力用文字列を作成
      strResult = "G3X" & Format(.Round(vntData(1, 5), 3), cstrForm) & "Z"
      dblResult = vntData(1, 6) - vntData(1, 3) _
            * Tan(vntData(1, 4) * dblPai / 180) _
            * Tan((90 - vntData(1, 4)) _
            * dblPai / 180) - vntData(1, 2)
      strResult = strResult & Format(.Round(dblResult, 3), cstrForm)
      strResult = strResult & "R" & Format(.Round(vntData(1, 2), 3), cstrForm)
      '文字列を出力
      rngList.Offset(i + 3, clngColumns + 1).Value = strResult
    Next i
  End With
  
  strProm = "処理が完了しました"
   
Wayout:

  '画面更新を再開
  Application.ScreenUpdating = True
  
  Set rngList = Nothing
   
  MsgBox strProm, vbInformation
     
End Sub

【49766】Re:NCプログラムの一部を表記したいので...
お礼  おやじvba若葉マーク E-MAIL  - 07/6/20(水) 23:50 -

引用なし
パスワード
   ▼ウッシ さん:
ありがとうございました。
助かりました。

【49767】Re:NCプログラムの一部を表記したいので...
お礼  おやじvba若葉マーク E-MAIL  - 07/6/20(水) 23:52 -

引用なし
パスワード
   ▼Hirofumi さん:
ありがとうございました。
私の頭では難しすぎて理解できないです。
すみません。

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