Excel VBA質問箱 IV

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

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


2756 / 13646 ツリー ←次へ | 前へ→

【66155】オートシェイプとループ処理について AA 10/8/5(木) 19:23 質問[未読]
【66156】Re:オートシェイプとループ処理について りん 10/8/5(木) 20:01 発言[未読]
【66157】Re:オートシェイプとループ処理について kanabun 10/8/5(木) 20:02 回答[未読]
【66177】Re:オートシェイプとループ処理について AA 10/8/6(金) 17:20 お礼[未読]

【66155】オートシェイプとループ処理について
質問  AA  - 10/8/5(木) 19:23 -

引用なし
パスワード
   初めて質問&VBAを作ってみたのですが、解らない所があるので質問させていただきます。

状況
・エクセルのシートにデータベースのように項目別に数値が並んでいる状態。
・F〜Iの列に入力されている数値をオートシェイプの幅と位置の数値に指定したい。
・1行につき、1つのオートシェイプを作製して入力されていない所まで繰り返し処理を行いたい。

これらを行いたく、以下のようなVBAを作ってみたのですが、うまく動いてくれません。オートシェイプの幅と位置情報が全て同じになってしまいます。
どこが悪いのかわからない状況です。どなたかご教授お願いいたします。


Sub AA()
   Dim YOKOHABA As Long
   Dim TATEHABA As Long
   Dim YOKO As Long
   Dim TATE As Long
  
   Range("A2").Select
   YOKOHABA = ActiveCell.Offset(0, 5).Value
   TATEHABA = ActiveCell.Offset(0, 6).Value
   YOKO = ActiveCell.Offset(0, 7).Value
   TATE = ActiveCell.Offset(0, 8).Value
  
  
   Do Until ActiveCell.Value = ""
   ActiveSheet.Shapes.AddShape(msoShapeRectangle, YOKOHABA, TATEHABA, YOKO, TATE).Select
   Selection.Characters.Text = _
    ActiveCell.Offset(0, 0) & Chr(10) & ActiveCell.Offset(0, 1) & Chr(10) & ActiveCell.Offset(0, 2) & Chr(10) & ActiveCell.Offset(0, 3) & Chr(10) & ""
    With Selection.Characters(START:=1, Length:=58).Font
      .Name = "MS Pゴシック"
      .FontStyle = "標準"
      .Size = 11
      .Strikethrough = False
      .Superscript = False
      .Subscript = False
      .OutlineFont = False
      .Shadow = False
      .Underline = xlUnderlineStyleNone
      .ColorIndex = xlAutomatic
    End With
    ActiveCell.Offset(1, 0).Select
  Loop
End Sub

【66156】Re:オートシェイプとループ処理について
発言  りん E-MAIL  - 10/8/5(木) 20:01 -

引用なし
パスワード
   AA さん、こんばんわ。

>オートシェイプの幅と位置情報が全て同じになってしまいます。
行ごとに大きさと位置が変わるということでしょうか。

>Sub AA()
>   Dim YOKOHABA As Long
>   Dim TATEHABA As Long
>   Dim YOKO As Long
>   Dim TATE As Long
>  
>   Range("A2").Select
>  
>  
>   Do Until ActiveCell.Value = ""

   YOKOHABA = ActiveCell.Offset(0, 5).Value
   TATEHABA = ActiveCell.Offset(0, 6).Value
   YOKO = ActiveCell.Offset(0, 7).Value
   TATE = ActiveCell.Offset(0, 8).Value


>   ActiveSheet.Shapes.AddShape(msoShapeRectangle, YOKOHABA, TATEHABA, YOKO, TATE).Select
>   Selection.Characters.Text = _
>    ActiveCell.Offset(0, 0) & Chr(10) & ActiveCell.Offset(0, 1) & Chr(10) & ActiveCell.Offset(0, 2) & Chr(10) & ActiveCell.Offset(0, 3) & Chr(10) & ""
>    With Selection.Characters(START:=1, Length:=58).Font
>      .Name = "MS Pゴシック"
>      .FontStyle = "標準"
>      .Size = 11
>      .Strikethrough = False
>      .Superscript = False
>      .Subscript = False
>      .OutlineFont = False
>      .Shadow = False
>      .Underline = xlUnderlineStyleNone
>      .ColorIndex = xlAutomatic
>    End With
>    ActiveCell.Offset(1, 0).Select
>  Loop
>End Sub

【66157】Re:オートシェイプとループ処理について
回答  kanabun  - 10/8/5(木) 20:02 -

引用なし
パスワード
   ▼AA さん:

>オートシェイプの幅と位置情報が全て同じになってしまいます。
>どこが悪いのかわからない状況です。

こんにちは。

>   YOKOHABA = ActiveCell.Offset(0, 5).Value
>   TATEHABA = ActiveCell.Offset(0, 6).Value
>   YOKO = ActiveCell.Offset(0, 7).Value
>   TATE = ActiveCell.Offset(0, 8).Value

図形位置とサイズの情報が
Do〜Loop
の外にあるからです。Loopのなかに もってきましょう。

あと、
Shapes.AddShape(Type, Left, Top, Width, Height)
が正規のパラメータ順です。
> YOKOHABA, TATEHABA, YOKO, TATE
ではないですよ。大丈夫ですか

Sub AAA()
  Dim YOKOHABA As Long
  Dim TATEHABA As Long
  Dim YOKO As Long
  Dim TATE As Long
  Dim c As Range
  Dim v
  Dim s As String
  
  For Each c In Range("A2", Cells(Rows.Count, 1).End(xlUp))
    YOKOHABA = c.Item(1, 8).Value
    TATEHABA = c.Item(1, 9).Value
    YOKO = c.Item(1, 6).Value
    TATE = c.Item(1, 7).Value
    v = Application.Index(c.Resize(, 4).Value, 0#)
    s = Join(v, vbLf) & vbLf
    
    With ActiveSheet.Shapes.AddShape( _
      msoShapeRectangle, YOKOHABA, TATEHABA, YOKO, TATE)
      With .TextFrame.Characters
        .Text = s
        With .Font
          .Name = "MS Pゴシック"
          .FontStyle = "標準"
          .Size = 11
        End With
      End With
    End With
  Next c

End Sub

【66177】Re:オートシェイプとループ処理について
お礼  AA  - 10/8/6(金) 17:20 -

引用なし
パスワード
   りん さん
kanabun さん

返答ありがとうございます。

kanabunさんの記述されたコードで一発で問題解決されました。
私のレベルが低すぎて、いまいち理解できない所が多いですが、
土日を使って少しずつ調べて行きたいと思います。

また、正規のパラメーターで記載しないと解答される方に見難い
ものになってしまいますね。今後気をつけます。

りんさん、kanabunさん本当にありがとうございます。

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