Excel VBA質問箱 IV

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

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


33086 / 76738 ←次へ | 前へ→

【48878】Re:別のシートのデータを利用
発言  ichinose  - 07/5/14(月) 8:59 -

引用なし
パスワード
   ▼シスアド さん:
おはようございます。

>すいません、もう1つ教えてもらいたいのですが
>
> A   B ・・ BJ ・・     BK
> 1        作成位置指示2    作成位置指示
> 2        3           1
> 3        2           2
> 4        1           0
> 5        2           3
> 6        2           1 
> 7        3           2
>
>上記のように作成位置指示2を追加して、BKで作成したsheet名とそれぞれ同じsheetにBJの円作成ができないでしょうか?
>これは、BKでつくったsheet上に追加するんではなく、同時BJ・BK同時に円を作成したいのですが。。。
>BJの円作成位置は適当に決めてもらってかまいません。
いいえ、これもシスアド さん本来は、記述してください。


>>
>>・新規ブックにシートを1枚のみにしてください。
>> (既定で、3枚作成されていても削除して1枚にしてください)
>>
>>・この1枚シートのシート名はSheet1としてください。
>> このシートのセルBK2以降に円の作成指示番号が入っているとします。

↑この前提は、今回も同じです

上記のような新規ブックの標準モジュールに

'===============================================================
Option Explicit
Sub sample()
  Dim BKdx As Variant
  Dim BJdx As Variant
  Dim c As Range
  Dim BKarray As Variant
  Dim BJarray As Variant
  BKarray = Evaluate( _
         "transpose({0,1,2,3;" & _
         "159.75,249.75,343.75,432.75;" & _
         "29.25,157.25,29.25,29.25})")
  BJarray = Evaluate( _
         "transpose({0,1,2,3;" & _
         "100,150,200,250;" & _
         "30,100,80,25})")
  '↑これが、BK列、BJ列の数値に対応する円の作成位置を表すマスターデータです。
  '本来なら、シート上に配置するのが良いと思います。そうすれば、データの変更や追加があっても
  'コードの変更が要りません
  With Worksheets("sheet1")
    For Each c In .Range("bk2", .Cells(.Rows.Count, "bk").End(xlUp))
     With Application
       BKdx = .Match(Val(c.Value), .Index(BKarray, 0, 1), 0)
       End With
     With Application
       BJdx = .Match(Val(c.Offset(0, -1).Value), .Index(BJarray, 0, 1), 0)
       End With
     If (Not IsError(BKdx)) Or (Not IsError(BJdx)) Then
       With Worksheets.Add(after:=Worksheets(Worksheets.Count))
         .Name = "sheet" & c.Row
         DoEvents
         If Not IsError(BKdx) Then
           With .Shapes.AddShape(msoShapeOval, _
              BKarray(BKdx, 2), BKarray(BKdx, 3), 15.75, 15.75)
            .Fill.Visible = msoFalse
            End With
           End If
         If Not IsError(BJdx) Then
           With .Shapes.AddShape(msoShapeOval, _
              BJarray(BJdx, 2), BJarray(BJdx, 3), 15.75, 15.75)
            .Fill.Visible = msoTrue
            .Fill.ForeColor.SchemeColor = 15
            .Fill.Transparency = 0.51
            End With
           End If
         End With
       End If
     Next
    End With
End Sub


>>
BK列、BJ列に円の作成位置データを配置し(それぞれ2行目から)、
>>上記のSampleを実行してみてください。

尚、作成位置データの入力範囲は、BK列を基準に取得しています。


大きく、コードを変更しました。
当初は、シスアド さんのコードを少しでも残す方向でコードを書きましたが、
本来なら、今回のような事象では、私は、Case文を使いません。
(コードの変更をなるべく少なくしたい という理由からです)

試してみてください。そして、コードは、前回より、難しいですが、
HELP等を使ってじっくり解読してください。
特に配列とワークシート関数の知識が必要です。

その上で不明な点があれば今度は、ピンポイントで質問してください。
0 hits

【48805】別のシートのデータを利用 シスアド 07/5/9(水) 22:05 質問
【48807】Re:別のシートのデータを利用 ichinose 07/5/10(木) 7:38 発言
【48827】Re:別のシートのデータを利用 シスアド 07/5/10(木) 19:09 発言
【48843】Re:別のシートのデータを利用 ichinose 07/5/11(金) 7:31 発言
【48857】Re:別のシートのデータを利用 シスアド 07/5/11(金) 23:16 発言
【48864】Re:別のシートのデータを利用 ichinose 07/5/12(土) 17:55 発言
【48871】Re:別のシートのデータを利用 シスアド 07/5/13(日) 20:00 お礼
【48874】Re:別のシートのデータを利用 シスアド 07/5/13(日) 21:02 質問
【48878】Re:別のシートのデータを利用 ichinose 07/5/14(月) 8:59 発言
【48941】Re:別のシートのデータを利用 シスアド 07/5/16(水) 19:27 お礼

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