カテゴリー
ruby 仕事

Ruby 処理

#条件分岐
if 条件1 then
	1成立時の処理
elsif 条件2 then
	2成立時の処理
else
	不成立時の処理
end

#if後置
処理 if 条件

case 変数
	when 値1,値2
		処理
	when 値3,値4
		処理
	else
		処理
end

case 変数
	when 値1,値2 : 処理
	when 値3,値4 : 処理
	else           : 処理
end
#繰り返し

while 条件 do
	処理
end

for 変数 in リスト do
	処理
end

loop do
	処理
end

数値.times do |変数|
	処理
	変数は0から数値-1
end

配列.each do |変数|
	処理
end

配列.each_with_index do |要素,インデックス|
	処理
	インデックスは0開始
end
カテゴリー
ruby 仕事

Ruby 基本

変数の宣言は不要。 行末のセミコロンも不要。

#実行
ruby ***.rb
ruby -e '***'
irb
#コメント

#コメント

=begin
コメント
=end
#組み込み定数
ARGV
ENV
RUBY_VERSION
RUBY_PLATFORM
STDIN
STDOUT
STDERR
#出力
puts "aaa"	#改行付き
print "bbb"	#改行無し

x = "ccc"
print("変数の値は#{x}です。\n")
#配列
#文字列と数値の混在可

配列名 = ["要素1","要素2","要素3"]
配列名 = %w(要素1 要素2 要素3)

配列名[0]	#先頭の要素
配列名[-n]	#最後からn番目の要素

配列名.length
配列名.size

配列名 << 追加要素	#追加
配列名.clear		#クリア
配列名 = []			#初期化
配列名.delete_at(インデックス)	#削除

配列名.sort
配列名.min
配列名.max
#範囲
2..8	#2,3,4,5,6,7,8と同じ意味となる
カテゴリー
VBA 仕事

キャプチャ画像の自動保存

クリップボード内を監視し、キャプチャ画像をエクセルに貼り付ける。

Option Explicit

Private Declare Function OpenClipboard Lib "user32" (Optional ByVal hwnd As Long = 0) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long

Public Sub AutoCapture()
'クリップボードを監視し、画像が取得されたらエクセルファイルに貼り付けてクリップボードをクリアする
'A1セルに任意の文字列を入力されたらループ処理を終了する
'B1セルに入力された数値+2行の次行から画像を貼り付ける

    Dim CB      As Variant  'クリップボード
    Dim SKey    As String   'セル入力値取得用
    Dim iLoop   As Integer  'ループ用カウンタ
    Dim OffsetY As Integer  '画像貼り付け位置
    Dim iHeight As Integer  '画像の高さ(行数)
    
    iHeight = 50    '取得画像の高さを50行に設定
    
    '開始メッセージの表示
    MsgBox "キャプチャの取り込みを開始します。" & vbCrLf & "終了するにはA1セルに文字入力して下さい。", vbInformation
    
    '無限ループの開始
    Do While True
        '終了リクエストを確認
        If Trim(ActiveSheet.Cells(1, 1).Value) <> "" Then GoTo QUIT_CAPTURE

        'クリップボードの取得
        CB = Application.ClipboardFormats
        '値が格納されていれば取り込み処理を行う
        If CB(1) <> -1 Then
            For iLoop = 1 To UBound(CB)
                '貼り付け対象はスクリーンショットのみ
                If CB(iLoop) = xlClipboardFormatBitmap Then
                    'アクティブシートから貼り付け位置の取得
                    SKey = ActiveSheet.Cells(1, 2).Value
                    If IsNumeric(SKey) Then
                        OffsetY = Int(SKey)
                    Else
                        OffsetY = 0     '初期値
                    End If
                    'スクリーンショットをアクティブシートに貼り付け
                    ActiveSheet.Paste Destination:=Range("A3").Offset(OffsetY, 0)
                    '次の画像の貼り付け位置を計算
                    OffsetY = OffsetY + iHeight
                    '貼り付け位置をアクティブシートに書き戻す
                    ActiveSheet.Cells(1, 2).Value = OffsetY
                    
                    'クリップボードをクリア
                    OpenClipboard
                    EmptyClipboard
                    CloseClipboard
                End If
            Next iLoop
        End If
        DoEvents
    Loop

QUIT_CAPTURE:
    'ループを抜ける処理
    MsgBox "キャプチャの取り込みを停止しました。", vbInformation
    ActiveSheet.Cells(1, 1).ClearContents

End Sub
カテゴリー
VBA 仕事

スクリーンセーバーの抑止

スクリーンセーバーを起動しないよう、エクセルVBAから定期的にキーを送信する。

Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)

Public Sub TimerSendKeys()
 '定期的にSCROLLLOCKキーを2回送信し、画面のスリープを抑止
 'A1セルに任意の文字列を入力されたらループ処理を終了する

Dim iTime As Integer    '秒数用カウンタ

Do
    'キーの送信は5分おき(300秒おき)
    For iTime = 1 To 300
        '1秒スリープ
        Sleep 1000
        '画面更新
        DoEvents
        '終了リクエストを確認
        If Trim(ActiveSheet.Cells(1, 1).Value) <> "" Then Exit Do
    Next
    'SCROLLLOCKキーを2回送信(無害そうなキー、設定と解除で2回)
    Application.SendKeys ("{SCROLLLOCK 2}")
Loop

'終了リクエストをクリアして終了
ActiveSheet.Cells(1, 1).Value = ""

End Sub