Excel VBA質問箱 IV

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

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


31566 / 76738 ←次へ | 前へ→

【50419】Re:図形をセル内の指定位置へ移動したい
発言    - 07/7/24(火) 19:28 -

引用なし
パスワード
   ▼Ned さん:
返事が遅くなって申し訳ありませんでした。
あれこれトライしている内に時間がたってしまいました。
まだ、解決に至っていませんが途中経過を報告します。

>まずは、For Each...Next ステートメントなどの基本構文は理解されてますか?

これまで一般的な表計算、検索、別シートに結果を記入や、入門書によく記載されている空白行の削除、重複削除などをアンチョコを見ながらマクロを作って来ました。
但し、最初に書いたように図形に関しては今回が初めてです。
ループは For〜Nextを多用してきましたが、本にFor Each〜の方が処理速度が速いと書いていたので、少しづつ使うようにしています。
またWithステートメントを掲示板でよく見るので少しづつ勉強中です。

【検討したこと】
[1]Nedさんの提示してくれたSample2〜4の理解する
・Sample2と3は同じことを意味している
・取得される値はA1セルの上左端を基点とした指定セルの座標
・Sample4は図形の位置をA1セルの上左端を基点とした座標を取得
 (違ってたらご教授願います)

[2]最初に教えて頂いたコードを指定範囲でループさせる

Sub 練習1()

 Dim r As Range
 Dim i As Integer
  
  For i = 1 To 5
  With ActiveSheet.Shapes(i)
    .Left = Cells(19 + i).Left + 10
    .Top = Cells(19 + i).Top + (Cells(19 + i).Height - .Height) / 2
  End With
  Next
  
End Sub

上記コードでやったら図形が消えてしまいました。
色々やっていたら、図形位置が変わらなかったり、部分的に消えたりで・・・・


>インデックス(順番)で指定するのか、名前+数値の変数で指定するのか。
>
>>
>または、既に大まかに配置したShepeの微調整なら、セル範囲を指定せずに、
>ShepeのTopLeftCell プロパティでShape自身の左上セルを取得して
>そのセルの位置情報を元にShapeの位置を微調整する方法もあります。

このアドバイスから
図形が消えたり加えたりでインデックスが変更されているのでは思い、教えて頂いたTopLeftCellと共に調べて見ました。
その結果、下記コードでインデックスが適正でないことが分かり(こんなことも知りませんでした)、図形のセル位置の取得も出来ました。

Sub 練習2()

MsgBox Selection.Name
MsgBox Selection.TopLeftCell.Address

End Sub

【検討したこと2】
・処理を2回に分けて、図形1個づつを指定場所へ移動・・・・取りあえずうまくいきました
(1) MsgBox Selection.Name で図形のインデックスを取得
(2) 以下のコードに取得したインデックス番号を入力

Sub 練習3()
Dim r As Range
Dim myZuban As Integer

myZuban = Application.InputBox("図形の番号を入力")
  
  Set r = ActiveCell
  With ActiveSheet.Shapes(myZuban)
    .Left = r.Left + 10
    .Top = r.Top + (r.Height - .Height) / 2
  End With
  Set r = Nothing
  
End Sub

【検討したこと3】
・前記の(1)と(2)を一括で処理する
これまでの試行錯誤で、MsgBox Selection.Name の結果は「Oval 3」と表示されていたのに
練習3では「3」だけを入力して正常稼動したので、数字だけをShapes()の中に入れなければと思っていますが、現在やり方が分からない状況です。
やったことは下記の通しです。

Sub 練習4()
 
Dim r As Range
Dim myZuban As Integer

MsgBox Selection.Name    ’表示は Oval 3
myZuban = Right(Name, 1)
MsgBox myZuban         ’表示は 0
MsgBox Selection.TopLeftCell.Address     ’図形のあるセル番地を表示

Set r = Selection.TopLeftCell
  With ActiveSheet.Shapes(myZuban) ’ここでエラー(原因は0のため?)
    .Left = r.Left + 10
    .Top = r.Top + (r.Height - .Height) / 2
  End With
  Set r = Nothing

 End Sub

結局は
  With ActiveSheet.Shapes(変数)
の書き方に戻ってしまいました。
1 hits

【50404】図形をセル内の指定位置へ移動したい 07/7/23(月) 23:42 質問
【50406】Re:図形をセル内の指定位置へ移動したい Ned 07/7/24(火) 1:57 発言
【50410】Re:図形をセル内の指定位置へ移動したい 07/7/24(火) 6:13 お礼
【50411】Re:図形をセル内の指定位置へ移動したい 07/7/24(火) 7:14 質問
【50412】Re:図形をセル内の指定位置へ移動したい Ned 07/7/24(火) 11:23 発言
【50419】Re:図形をセル内の指定位置へ移動したい 07/7/24(火) 19:28 発言
【50420】Re:図形をセル内の指定位置へ移動したい 07/7/24(火) 19:45 お礼
【50425】Re:図形をセル内の指定位置へ移動したい Ned 07/7/24(火) 20:46 発言
【50430】Re:図形をセル内の指定位置へ移動したい 07/7/24(火) 21:55 お礼
【50413】Re:図形をセル内の指定位置へ移動したい 駿 07/7/24(火) 12:23 回答
【50414】Re:図形をセル内の指定位置へ移動したい 駿 07/7/24(火) 12:25 回答
【50422】Re:図形をセル内の指定位置へ移動したい 07/7/24(火) 20:10 お礼

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