Excel VBA質問箱 IV

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

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


1781 / 13645 ツリー ←次へ | 前へ→

【71969】ランダムで出したい(抽出)のですが、どのようにしたら良いでしょうか Yoshi 12/5/4(金) 11:44 質問[未読]
【71973】Re:ランダムで出したい(抽出)のですが、... Yuki 12/5/4(金) 15:35 発言[未読]
【71974】Re:ランダムで出したい(抽出)のですが、... Yoshi 12/5/4(金) 16:18 お礼[未読]

【71969】ランダムで出したい(抽出)のですが、ど...
質問  Yoshi  - 12/5/4(金) 11:44 -

引用なし
パスワード
   お休みのところ申し訳ございません、もしご覧になっておられればご回答お願いします。

現在写真96点を写真にp (1)〜p (96)のナンバーを振って、エクセルシート上にセルを一つ飛びに挿入・貼り付けています。                 写真の連番には順調に貼り付けられるのですが、rand関数を入れて、毎回写真の出るセル位置を変えたいのですが…その方法を教えていただけませんでしょうか。

現在のコードは以下の通りです。
Sub Photo_Paste()
  Dim m As Long, n As Long, p As Long
  Dim CC As Long, RR As Long
  Dim R As Range, SP As Shape, WS As Worksheet, FileName As String
  
 Application.ScreenUpdating = False

  On Error Resume Next
  With Sheets("Sheet1")
   .Activate
  For n = 1 To 97
    .Rectangles("myPicture" & n).Delete
  Next n
  'On Error GoTo 0
  
  Set WS = Application.ActiveSheet
  p = 1
  m = 1
   For RR = 2 To 12 Step 2
    For CC = 2 To 32 Step 2
      Set R = .Cells(RR, CC)
      With R
        Set SP = Sheets("Sheet1").Shapes.AddShape(msoShapeRectangle, _
           .Left, .Top, 39, 38)  '''''
        FileName = _
         ThisWorkbook.Path & "\photo\" & "P" & " " & "(" & p & ")" & ".jpg"
         SP.Fill.UserPicture FileName
  On Error GoTo 0
      End With
        p = p + 1
        If p >= 98 Then
         Exit Sub
        End If
        m = m + 1
        SP.Name = "myPicture" & m - 1
        SP.Line.ForeColor.RGB = RGB(0, 0, 0)
        SP.Line.Weight = 1.5
    Next CC
   Next RR
  Set SP = Nothing: Set R = Nothing: Set WS = Nothing
End With
Application.ScreenUpdating = True
End Sub

【71973】Re:ランダムで出したい(抽出)のですが...
発言  Yuki  - 12/5/4(金) 15:35 -

引用なし
パスワード
   ▼Yoshi さん:
>現在写真96点を写真にp (1)〜p (96)のナンバーを振って、エクセルシート上に
>セルを一つ飛びに挿入・貼り付けています。
>写真の連番には順調に貼り付けられるのですが、
>rand関数を入れて、毎回写真の出るセル位置を変えたいのですが
1 〜 96 を配列に入れて randamにします。
その配列の中身を指定すれば宜しいかと。
尚、検証していないのでバグがあるかもしれません。

Sub Photo_Paste()
  Dim m As Long, n As Long, p As Long
  Dim CC As Long, RR As Long
  Dim R As Range, SP As Shape, WS As Worksheet, FileName As String
' ***** 下記を追加
  Const num      As Long = 96
  Dim sN(1 To num)  As Variant
  Dim i        As Long
  SetArray sN, num
' ***** 此処まで

  Application.ScreenUpdating = False
  
  On Error Resume Next
  With Sheets("Sheet1")
    .Activate
    For n = 1 To 97
      .Rectangles("myPicture" & n).Delete
    Next n
    'On Error GoTo 0
    
    Set WS = Application.ActiveSheet
    p = 1
    m = 1
    For RR = 2 To 12 Step 2
      For CC = 2 To 32 Step 2
        Set R = .Cells(RR, CC)
        With R
          Set SP = Sheets("Sheet1").Shapes.AddShape(msoShapeRectangle, _
          .Left, .Top, 39, 38)  '''''
          FileName = _
ThisWorkbook.Path & "\photo\" & "P" & " " & "(" & sN(p) & ")" & ".jpg"
                          -----此処を変更
          SP.Fill.UserPicture FileName
          On Error GoTo 0
        End With
        p = p + 1
        If p >= 98 Then
          Exit Sub
        End If
        m = m + 1
        SP.Name = "myPicture" & m - 1
        SP.Line.ForeColor.RGB = RGB(0, 0, 0)
        SP.Line.Weight = 1.5
      Next CC
    Next RR
    Set SP = Nothing: Set R = Nothing: Set WS = Nothing
  End With
  Application.ScreenUpdating = True
End Sub

Sub SetArray(sN() As Variant, n As Long)
  Dim i    As Long
  Dim tmp   As String
  Dim lRnd  As Long
  For i = 1 To n
    sN(i) = i
  Next
  Randomize
  For i = n To 2 Step -1
    lRnd = Int(i * Rnd) + 1
    tmp = sN(i)
    sN(i) = sN(lRnd)
    sN(lRnd) = tmp
  Next
End Sub

【71974】Re:ランダムで出したい(抽出)のですが...
お礼  Yoshi  - 12/5/4(金) 16:18 -

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

お休みの日にも関わりませず、お世話になりました。
ありがとうございました、正しく動作しています、助かりました。
コードに関しては、ゆっくり理解を進めたいと思います。

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