|
SOURCE CODE |
|
Sub
CopyPasteColumn() |
| '
Macro1 Macro |
| '
マクロ記録日
: 2007/10/4 ユーザー名
: Ryu&You |
| ' |
|
Dim Row,
RowN
,
Col
, N As Integer |
|
Dim BB As String |
| ' |
|
Row
= ActiveCell.Row |
|
Col
= ActiveCell.Column |
|
RowN = Selection.Rows.Count '選択行数 |
| 'Debug.Print
Row,
Col
, BB, CC, RowN: End |
| ' |
|
For N = Row To Row + RowN - 1 |
| 'BB="I"&
N |
|
ActiveWindow.SmallScroll Down:=1
'行の一段下げ |
|
Cells(N,
Col
).Select
'セルの選択 |
| ' |
|
Selection.Copy |
|
ActiveSheet.Past |
| 'Debug.Print
N, BB |
| ' |
|
Next N ': End |
| ' |
| End
Sub |
|
|
| . |
| 7. 不連続範囲の一発選択 |
| . |
| 不連続な範囲を選択(して、その後コピー状態に)する場合は Ctrl-Key を使わねばならず、両手作業となる。 マウスだけの片手だけで不連続な範囲を選択するために下記マクロを作成した。 |
| 本マクロは 不連続な同一長さの2列を選択し、コピー状態まで行うためのマクロで、 適当な1列にマウスで必要長さ(行数)を選択しておけば ニコチャンマークをクリックするだけで 平行方向のその長さの2列(G列AA:BB、I列CC:DD)を選択し、コピー状態にする。 下記マクロを参考に Unionメソッド を使えば多数の範囲選択が出来る。 |
| . |
|
SOURCE CODE |
| Sub
Multi_RangeSelect() |
| ' |
|
Dim
Row,
RowN
,
Col
As Integer |
| Dim
AA, BB, CC, DD As String |
| ' |
|
Row
= ActiveCell.Row |
| Col
= ActiveCell.Column |
| RowN
= Selection.Rows.Count
'適当な一列長さ(選択行数) |
| AA
= "G" & Row: BB = "G"
& Row + RowN - 1 |
| CC
= "I" & Row: DD = "I"
& Row + RowN - 1 |
| 'Debug.Print
Row,
Col
, AA, BB, CC, DD, RowN ': End |
| ' |
|
'Range(AA,
BB).Select |
| 'Range(CC,
DD).Select |
|
Union(Range(AA, BB), Range(CC, DD)).Select '多数の範囲選択 |
| Selection.Copy
'コピー状態 |
| ' |
| End
Sub |
|
|
| . |
| 8. カーソルの指定シートの指定セルへの移動 |
| . |
| ブック内のあるシートから指定シートの指定セルへカーソルをマクロにより移動させる。 移動先カーソルはウインドウ枠を固定した指定シートの左上に位置させる。 |
| Book01の「GG〜AA」の各シートから対応するSheet1の「C309〜C3」へカーソルを移動させる。 現在のカーソルがどの「GG〜AA」シートにあるかシート名を読み取って対応するSheet1の「C309〜C3」に移動する。 あらかじめSheet1の指定セルにはブックマークを付けてリンクを張り#F6(A310)からC258へ飛ぶようにしておく。 理由はSheet1に張付けられた表を左上に揃えたいからこの様な方法をとったが、他の方法もある。 #G7、E5〜#A1も同様にする。 実際組んだマクロがシートの 終わり→初め に作業するように作ったので本サンプルもそのままにしているが、必要なら 初め→終わり に作業を進めるよう修正願いたい。 |
| If 文は2分岐では If Then Else End If でも書けるが、実プログラムは3分岐もあるのでこの様な書き方とした。 |
|
Book01の内容については左記 Book01.htm をクリックしてください。 |
|
| . |
|
SOURCE CODE |
|
Sub
SheetCellMove() |
| ' |
| Dim
WS As String |
| WS
= ActiveCell.Worksheet.Name
'シート名読み取り |
| 'Debug.Print
WS: End |
| ' |
| Select
Case WS 'シート名により分岐 |
|
| Case
"GG" |
| If
ActiveCell.Row >= 54 Then GoTo 100 '最初カーソルはGGの54行以降に |
| If
52 >= ActiveCell.Row Then GoTo 101 '置き、次は52行以内置く |
| 100
Worksheets("Sheet1").Select |
| Worksheets("Sheet1").Range("A361").Select |
| Selection.Hyperlinks(1).Follow
NewWindow:=False, AddHistory:=True: GoTo 102 |
| 101
Worksheets("Sheet1").Select |
| Worksheets("Sheet1").Range("A310").Select |
| Selection.Hyperlinks(1).Follow
NewWindow:=False, AddHistory:=True: GoTo 102 |
| 102 |
| ' |
|
Case
"FF" 'カーソル位置はFF内のどこでも
|
| Worksheets("Sheet1").Select '良い EE〜BBも同様 |
| Worksheets("Sheet1").Range("A259").Select |
| Selection.Hyperlinks(1).Follow
NewWindow:=False, AddHistory:=True |
| ' |
| ' |
| '
Case
"EE" Case "DD" Case
"CC" は省略 |
| ' A206
A157
A106 |
| ' |
|
Case
"BB"
|
| Worksheets("Sheet1").Select |
| Worksheets("Sheet1").Range("A55").Select |
| Selection.Hyperlinks(1).Follow
NewWindow:=False, AddHistory:=True |
| ' |
| End
Select |
| ' |
| End
Sub |
|
|
| . |
| 次回は No−8,4,7 を組み合わせて
ホームページ上の表データをコピー状態にしておき、GG〜AAシート上からSheet1の指定位置に貼り付け、貼り付けた表データの必要部分を選択し、選択部分をコピー状態にする までの一連のマクロを3個のプロシジャーで構成して実行させる統合マクロを作成する。 選択部分はコピー状態にあるため GG〜AA のシートに戻って そのシートの必要位置に簡単に貼り付けられる。 ホームページ上の必要データをパソコンに取り込み、時系列的に並べる作業が軽減される。 |
| . |
| 9. 表データの貼付とデータの選択 |
| . |
| 上段をメイン、中段をサブ1、下段をサブ2呼ぶと プログラムの動きはメインの Paste_DelLine01 でサブ1へ、サブ1から RangeSelectCopy01 でサブ2へ飛ぶ。 |
| ホームページ上の表データをコピー状態にしておき、最初のカーソルを GGシートの54行以降に置いておいて、ニコチャンマークをクリックすると 表データがSheet1のGG枠内に張付けられて A−5、A−7 列が選択され、コピー状態となる。 |
| コピー状態になったSheet1のデータを
GGシート
に戻って、時系列的にデータを入れたい場所
G3
にカーソルを置いて、EXCELの貼付のアイコンをクリックすれば
G,H にデータが挿入できる。 |
|
|
SOURCE CODE |
| Sub
DataPaste_Select()
'
各シートからSheet1の指定場所へカーソル移動
Dim WS As String
WS = ActiveCell.Worksheet.Name
'Debug.Print WS: End
Select Case WS
Case "GG"
If ActiveCell.Row >= 54 Then GoTo 100
If 52 >= ActiveCell.Row Then GoTo 101
100 Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("A361").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True: GoTo
102
101 Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("A310").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True: GoTo
102
102 Paste_DelLine01
Case "FF"
Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("A55").Select
Selection.Hyperlinks(1).Follow NewWindow:=False,
AddHistory:=True
Paste_DelLine0
Case
"EE" Case "DD" Case
"CC" は省略
A206
A157
A106
Case "BB"
Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("A55").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
Paste_DelLine01
End Select
End Sub |
Sub Paste_DelLine01() 'Sheet1の移動カーソル位置に表データを貼付、掛線削除
ActiveSheet.Paste
Selection.Borders().LineStyle = xlNone
Sheets("Sheet1").Select
RangeSelectCopy01
End Sub |
Sub RangeSelectCopy01() '表データの G,I
列Row行を選択し、コピー状態にする
Dim Row, RowN, Col, N As Integer
Dim AA, BB, CC, DD As String
Row = ActiveCell.Row
Col = ActiveCell.Column
RowN = Selection.Rows.Count
AA = "G" & Row: BB = "G" & Row + RowN - 1
CC = "I" & Row: DD = "I" & Row + RowN - 1
' Debug.Print Row, Col, AA, BB, CC, DD, RowN ': End
'Range(AA, BB).Select
'Range(CC, DD).Select
Union(Range(AA, BB), Range(CC, DD)).Select
Selection.Copy
End Sub |
|
| . |
| 10. 追加データの別表への取得 |
| . |
| Sheet1のデータをGGシートへ張付ける時に、Sheet1のデータの追加L列データをGGシートの別表に挿入するマクロを次に記述する。 GGシートのG3にカーソルを置きニコチャンマークをクリックして下記のマクロを実行すれば G,H と Sheet1の
L のデータがGGシートの 別表G列
に取得できる。 Book2に表とデータの関連を示す、 |
| 1.リンク方式数式データの貼付 と 2.直接方式データの貼付 の両方をコードに書き込んである。 1.リンク方式はリンクを貼る手間はかかるが、プログラムが簡単だ。 2.直接方式は EachRangeSelect02 のサブルーティンが必要となる。 |
|
Book02の内容については左記 Book02.htm をクリックしてください。 |
| . |
| |
Sub Paste_DataGet()
'
' Macro1 Macro
' マクロ記録日 : 2007/10/10 ユーザー名 :
Ryu&You
'
ActiveSheet.Paste 'Sheet1選択セルの貼付
Dim AA, BB, WSS As String '追加データの範囲選択とコピー/貼付
Dim M, N As Integer
M = ActiveCell.Column
N = ActiveCell.Row
' Debug.Print M: End
'(1.リンク方式数式データの貼付)
Range("L309:L358").Select 'リンク先数式データ範囲設定とコピー状態に
Selection.Copy
ActiveWindow.SmallScroll Down:=-50 '指定先G71にカーソルを移動
ActiveWindow.SmallScroll ToRight:=M - 5
Cells(71, M).Select
ActiveSheet.Paste '指定先に数式貼付により数式データ挿入
Range(Cells(71, M), Cells(120, M)).Select
'挿入数式データの数値化
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'WSS = ActiveCell.Worksheet.Name '(2.直接方式データの貼付 :6行)
'EachRangeSelect02
'Selection.Copy
'Sheets(WSS).Select
'Cells(801, M).Select
'ActiveSheet.Paste
Selection.Font.ColorIndex = 5 '数値化フォントの青へ色替え
Application.CutCopyMode = False 'コピー状態解除
Application.Wait (Now() + TimeValue("00:00:03")) '3秒間停止タイマー:データ
'確認のため挿入
Cells(3, M).Select 'カーソルを戻す
End Sub |
Sub EachRangeSelect02()
Dim WS As String
WS = ActiveCell.Worksheet.Name
Debug.Print WS: End
Select Case WS
Case "GG"
If ActiveCell.Row = 3 Then
Worksheets("Sheet1").Select
Range("L309:L358").Select
Else
End If
Case "FF"
If ActiveCell.Row = 3 Then
Worksheets("Sheet1").Select
Range("L258:L307").Select
Else
End If
Case "EE" Case "DD" Case "CC" Case "BB" '省略
Case "AA"
If ActiveCell.Row = 3 Then
Worksheets("Sheet1").Select
Range("L3:L52").Select
Else
End If
End Select
End Sub
|
|
| . |
|
シート名取得、アクティブ範囲行列数取得、カーソルの位置取得と移動方法、範囲選定に変数の使用方法等をマスターすれば Book内へデータの取り込みまたはデータの移動が自由に出来る。 |
| データが時系列的に並べば 後はEXCELのグラフ機能を使って簡単に好きな形式のグラフを作ることが出来てデータの変動が一目で分かる。 |
| . |
| ここに記載の全マクロは実際に使用しているが、No−8,9,10
はモデル化に当たってバグ(シート名、セル番号等、コードは実マクロからのコピーのためバグはないと思う)があるかもしれないので その時は修正願いたい。 |
| . |
| 11. インボリュート逆関数 と 転位歯車の基本計算 |
| . |
| 御年67才、転位歯車の諸元を基本計算することになり インボリュート関数 なんてチンプンカンプン、NET (http://www.nc-net.or.jp/morilog/m120353.html)のお世話になって ヤット 理解できるようになる。 投稿者には感謝。 プログラム、エクセルマクロ登録、使用方法が 解かりにくかったので ここで 簡単に利用できるように 説明した。 |
|
.
|
|
プログラム |
Function INV(α) ’インボリュート関数定義
INV = Tan(α) - α
End Function
Function AINV(invα) ’インボリュート逆関数の計算 ニュートン法による解
B = 1.5706
Do
S = B
B = S - (Tan(S) - S - invα) / (Tan(S) ^ 2)
Loop Until Abs(B - S) < 0.000000001
AINV = B
End Function
|
|
|
.
|
| EXSAMPLE |
転位平歯車の基本計算 |
(出典:KHK歯車大学より) |
|
|
|
|
pinion 1 |
gear 2 |
| m:モジュール |
|
|
3 |
| α:圧力角 |
|
|
|
20 |
| z:歯数 |
|
|
|
12 |
24 |
| x:転位係数 |
|
|
|
0.6 |
0.36 |
| invα’ |
2・tanα・(x1+x2)/(z1+z2)+invα |
0.034316195
|
|
inv20.0= |
0.0149044 |
|
|
|
|
inv14.5= |
0.0055448 |
|
|
|
| α’:圧力角 |
|
0.455332 |
rad |
26.08851807 |
| y:距離係数 |
(z1+z2)/2・(cosα/cosα’-1) |
0.833286828 |
| a:中心距離 |
((z1+z2)/2+y)・m |
|
56.49986048
|
| d:基準円 |
|
z・m |
|
36 |
72 |
| db:基準円 |
|
d・cosα |
|
33.82892 |
67.6578486 |
| d':噛合部PCD |
db/cosα’ |
37.66657 |
75.33314731 |
| ha1:歯末の丈 |
(1+y-x2)・m |
4.41986 |
|
| ha2:歯末の丈 |
(1+y-x1)・m |
|
3.699860485 |
| h:歯丈 |
|
(2.25+y-(x1+x2))・m |
6.369860485
|
| da:歯先円直径 |
d+2・ha |
|
44.83972 |
79.39972097 |
| df:歯底円直径 |
da-2・h |
|
32.1 |
66.66 |
|
| invα’=0.0034316195 の場合 α’=0.455332rad=26.08851807°
となる。 |
| (註)プログラムの α は 基本計算の α’ と同じ。 |
| . |
| エクセルマクロへの登録( Function は エクセル自作関数 の定義コード) |
| 1.歯車の諸元を計算しているエクセルブックの 「ツール」→「マクロ」→「Visual
Basic Editor」
クリックしてエディター画面を開く。 |
| 2.画面左の「VBAProject」を左クリックして 「挿入」から「標準モジュール」をクリックすると プロジェクト内に「標準モジュール」(Module1)が追加され 右にModule1ウインドウが開く。 ここに上記プログラムをコピーする。 |
| 3.上書きしてエクセルブックに戻る。 ブック内でインボリュート逆関数が利用可能となる。 |
| エクセルブックでの使用方法 |
| 1.セル(A,5)に 角度α(radian)値が あるとしよう。 セル(A,7)にインボリュート逆関数を表示させようとすれば セル(A,7)に ”=AINV(A,5)” と記述すれば 逆関数がradianで求められる。 |
| 2.他のブックで使用したい場合は 計算しようとするブックに 上記と同様にコピーして使用することになります。 どのブックでも使える PERSONAL.EXL と Function関数 との違いとなります。 |
| . |
| 12. インボリュート歯車の歯形作図
( 前 11.と関連 ) |
| . |
| 大口径歯車(m=22、θ=20°、N=13x109)メンテに携わっているが、摩耗が進行してきたので、歯の計測を始めた。 オリジナル歯形寸法を知るために歯形作図に挑戦した。 簡単にするため エクセルの表計算とグラフ機能 を使用する。 インボリュート関数、座標変換等インターネットで探し グラフ化出来た。 転位歯車であるためか 計算と理論 どうりでは どうも 実際の歯形(歯厚)と異なるようなので 手入力で修正系数を入れて 実際の歯形 に近くなるようにした。 お分かりの方に 正しい方法をアドバイス願えれば幸いです。 |
| エクセルブック は 下記ファイル名 クリック して DL 願いたい。 |
| . |
|
ファイル名 : Shape
Drawing for Shifted Gear Tooth |
| . |
|
転位平歯車 の 歯厚計算 (出典:KHK歯車大学より) |
|
pinion 1 |
|
|
|
|
| m |
22 |
|
ha |
=m
+ mx |
22 |
| α |
20 |
|
|
|
|
| z |
13 |
|
歯厚 |
s= |
34.5576 |
| x |
0 |
|
=(π/2+2・tanα)・m |
| ha |
=m
+ mx |
|
歯厚半径 |
ψ= |
6.9230769 |
| |
|
|
=90/z+(360・tanα)/(π・z) |
| PCD= |
286 |
|
弦歯厚 |
ss |
34.473571 |
| b= |
85 |
|
=z・m・sinψ |
|
| |
|
|
弦高さ |
hha |
23.042636 |
| |
|
|
=z・m(1-cosψ)/2+ha |
|
gear 2 |
|
|
|
|
| m |
22 |
|
ha |
=m
+ mx |
44 |
| α |
20 |
|
|
|
|
| z |
109 |
|
歯厚 |
s= |
50.572331 |
| x |
1 |
|
=(π/2+2・tanα)m |
|
| ha |
=m
+ mx |
|
歯厚半径 |
ψ= |
1.2083296 |
| |
|
|
=90/z+(360・tanα)/(π・z) |
| PCD= |
2398 |
|
弦歯厚 |
ss |
50.568582 |
| b= |
90 |
|
=z・m・sinψ |
|
| |
|
|
弦高さ |
hha |
44.266625 |
| |
|
|
=z・m(1-cosψ)/2+ha |
|
|
転位平歯車 の 基礎計算 (出典:KHK歯車大学より) |
|
|
|
|
pinion 1 |
gear 2 |
| m:モジュール |
|
|
|
22 |
| α:圧力角 |
|
|
|
20 |
| z:歯数 |
|
|
|
13 |
109 |
| x:転位係数 |
|
|
|
0 |
1 |
| インボリュートα’ |
2・tanα・(x1+x2)/(z1+z2)+inv α |
0.020871232
|
|
inv
α’
|
|
|
|
|
|
|
inv
α=
|
Tan
α - α |
0.014904492 |
|
|
|
|
AINV(inv α’)
|
( 前 11.プログラム使用) |
| α’:圧力角 |
|
0.38891 |
rad |
22.28282225 |
| y:距離係数 |
(z1+z2)/2・(cosα/cosα’-1) |
0.947262616 |
| a:中心距離 |
((z1+z2)/2+y)・m |
|
1362.839778 |
| d:基準円 |
z・m |
|
|
286 |
2398 |
| db:基準円 |
d・cosα |
|
|
268.752 |
2253.3822 |
| d':噛合部PCD |
db/cosα’ |
|
290.4413 |
2435.2383 |
| ha1:歯末の丈 |
(1+y-x2)・m |
|
20.83978 |
|
| ha2:歯末の丈 |
(1+y-x1)・m |
|
|
42.839778 |
| h:歯丈 |
(2.25+y-(x1+x2))・m |
|
48.33977756
|
| da:歯先円直径 |
d+2・ha |
|
|
327.6796 |
2483.6796 |
| df:歯底円直径 |
da-2・h |
|
|
231 |
2387 |
|
|
. |
| 13. 平歯車の強度計算 ( 前 12.と関連 ) |
| . |
| 前 12.転位平歯車の強度計算を KHK歯車大学 の計算式に基づき エクセルの表計算を利用して 少ない入力(数値表を新たに作成し、極力自動入力とした)で 入力(Kw)に対して、歯車曲げ強度(Kw)及び面圧強度(Kw)が十分であるかどうかを 「OK
or NO」 で判定するプログラム作成した。 参考として KHK歯車大学の計算式のオリジナル を添付してあります。 歯車設計等については 実経験ないため 計算式の解釈等に間違いあれば アドバイスいただき、修正を加えて行くことにしたい。 |
| . |
|
ファイル名 : Check
of Gear Tooth_Strength |
|
. |
|
プログラム詳細内容については 上記ファイルを 開くか又は保存して確認、試用してください。 参考になれば幸いである。 |
| . |
| . |