アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えてください。
画面コピーを取得するシステムを作成しています。
prtscrキーを押すと、画面コピーを取り続ける仕組みなのですが、現在私が作成しているものだと貼り付け位置が右下にズレ続けてしまいます。

これを、ズレ続けることなく、右下→左下→右下→左下と規則的にセルが移動できるようにしたいです。また可能であれば、画面コピーの倍率も70%→20%→70%→20%と変動させたいのですが、どのようにすれば良いのでしょうか。以前にMOD関数を活用すべきというご助言も頂いたのですが、利用方法がよく分からずに困っています。よろしくお願いします。

<現在作成中のVBA>

' キャプチャ収集状態なら True
Private isLogging As Boolean

' キャプチャを貼り付けるブック名を保持する
Private fileName As String

' キャプチャを取得する
Private Sub Capture()
On Error GoTo errorHandler

' クリップボードに画像が格納されていたら貼り付ける
If Application.ClipboardFormats(1) = xlClipboardFormatBitmap Then
Dim rows As Integer: rows = 39 ' 行数
Dim cols As Integer: cols = 72 ' 列数

' キャプチャを貼り付けるブックを選択する
Workbooks(fileName).Activate

' 選択しているセルを基準セルとして取得する
Dim baseCell As Variant
Set baseCell = Selection

' クリップボードのデータを貼り付け、行数に合わせて縮小する
baseCell.Offset(3, 1).Select
ActiveSheet.Paste
With Selection.ShapeRange
.LockAspectRatio = msoTrue
.Height = .Height * 0.7
End With

' 次の画像を貼るために基準セルを移動し、クリップボードに現在のセルの値をコピーする (先頭を Bitmap でなくすため)
With baseCell.Offset(rows - 25, 8)
.Select
.Copy
End With

' 切り取り・コピーモードを解除する
Application.CutCopyMode = False

End If

' 1秒間隔で再実行するようタイマーをセットする
Application.OnTime Now + TimeValue("00:00:01"), "Capture", , isLogging

Exit Sub

errorHandler:
isLogging = False

End Sub

' キャプチャを開始する
Sub StartCapture()
MsgBox "キャプチャの取得を開始します。終了時は Esc キーを押下してください。"

' Esc キーで停止できるようにしておく
Application.OnKey "{ESC}", "StopCapture"

' キャプチャを貼り付けるブック名を取得する
fileName = ActiveWorkbook.Name

' キャプチャ取得状態を設定する
isLogging = True

' キャプチャの取得を開始する
Capture
End Sub

「Excel VBA セルの移動方法」の質問画像

A 回答 (1件)

こんにちは



もしかして、これの続きなのかなぁ?
https://oshiete.goo.ne.jp/qa/10125906.html

とは言え、いろいろ変わっているみたいで、今回は位置がどこなのかさっぱりわからなくなってしまったので、前回の補足的に方法のみの説明です。
>右下→左下→右下→左下と規則的にセルが移動できるようにしたいです。
>画面コピーの倍率も70%→20%→70%→20%と変動させたいのです
の2種類が決まるようにできれば良いものとして、前回同様に回数のカウンタを用意しておきます。

このカウンタに対して、位置は4種類を順に回るので
 counter Mod 4
サイズは2種類なので
 counter Mod 2
をとれば、それぞれは0~3、0~1の値を順に繰り返すことになり、これに応じた処理を行うように記述しておけばよいということになります。
位置を例にすれば、計算結果が、0:右下、1:左下、2:右下、3:左下のように対応させて考えるといった要領です。サイズに関しても同様です。

回数が多すぎてオーバフローする恐れがある場合なども考慮するなら、counterのインクリメント時に
 counter = (counter + 1) Mod 4
のようにしておけば、counter自体が4を超えることが無くなります。
(この場合は、内容的にはカウンターとは言えませけれど…)

参考までに、計算値がどう変化するかを以下にエクセルの表で添付しておきます。


※ なお、同じ内容の質問をするときは、前回の質問は閉じておくのがエチケットかと。
「Excel VBA セルの移動方法」の回答画像1
    • good
    • 1
この回答へのお礼

ご丁寧にありがとうございました。
ご指導頂いた方法でトライしてみます。

お礼日時:2017/12/21 20:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!