Excel VBA質問箱 IV

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

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


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

【44327】チェックをいれた数だけシートを追加する はんぺん 06/11/13(月) 13:07 質問[未読]
【44332】Re:チェックをいれた数だけシートを追加する maverick 06/11/13(月) 14:07 回答[未読]
【44341】Re:チェックをいれた数だけシートを追加する はんぺん 06/11/13(月) 16:57 質問[未読]
【44346】Re:チェックをいれた数だけシートを追加する Kein 06/11/13(月) 17:30 発言[未読]
【44350】Re:チェックをいれた数だけシートを追加する はんぺん 06/11/13(月) 18:30 お礼[未読]

【44327】チェックをいれた数だけシートを追加する
質問  はんぺん  - 06/11/13(月) 13:07 -

引用なし
パスワード
   チェックの入ったチェックボックスに対し
新規でシートを追加するコードです。

A群:チェックボックス1〜5
B群:チェックボックス6〜10
追加シート数=A群×B群
追加シート名:"A群" & "B群"

(例)
A群選択:チェックボックス1、2
B群選択:チェックボックス6、8
追加シート→"16"、"18"、"26"、"28"

以下のコードをつくりましたが、
結果は追加シート数がA群×B群にならず、
A群選択数×B群は常に1つ になってしまいます。
(例)に当てはめていうと→"16"、 "26"

問題点の指摘をお願いします。


Sub シート作成()
  Dim a As Variant
  Dim b As Variant

  For i = 6 To 10
    If WS.OLEObjects("CheckBox" & i).Object.Value = True Then
      If i = 6 Then
        b = "6"
      ElseIf i = 7 Then
        b = "7"
      ElseIf i = 8 Then
        b = "8"
      ElseIf i = 9 Then
        b = "9"
      Else
        b = "10"
      End If
    End If
  Next i

  For i = 1 To 5
    If WS.OLEObjects("CheckBox" & i).Object.Value = True Then
      If i = 1 Then
        a = "1"
        Worksheets.Add(After:=ActiveSheet).Name = a & b       
      ElseIf i = 2 Then
        a = "2"
        Worksheets.Add(After:=ActiveSheet).Name = a & b       
      ElseIf i = 3 Then
        a = "3"
        Worksheets.Add(After:=ActiveSheet).Name = a & b       
      ElseIf i = 4 Then
        a = "4"
        Worksheets.Add(After:=ActiveSheet).Name = a & b       
      Else
        a = "5"
        Worksheets.Add(After:=ActiveSheet).Name = a & b       
      End If
    End If
  Next i
  
  Worksheets(1).activate
End Sub

【44332】Re:チェックをいれた数だけシートを追加...
回答  maverick  - 06/11/13(月) 14:07 -

引用なし
パスワード
   Sub シート作成()
  Dim i As Integer, j As Integer

  For i = 1 To 5
    If WS.OLEObjects("CheckBox" & i).Object.Value = True Then
      For j = 6 To 10
        If WS.OLEObjects("CheckBox" & j).Object.Value = True Then
          Worksheets.Add(After:=ActiveSheet).Name = StrConv(i & j, vbWide)
        End If
      Next j
    End If
  Next i
 
  Worksheets(1).Activate
End Sub

【44341】Re:チェックをいれた数だけシートを追加...
質問  はんぺん  - 06/11/13(月) 16:57 -

引用なし
パスワード
   ありがとうございました。
こんなに簡単なソースになるなんて感激です。
ただ、問題がひとつ・・・

実はチェックボックスの名前とシート名はイコールではありません。
1〜5は、梅、桜、桃、松、草
6〜10は 種、枝、葉、茎、幹
という風になっています。
こういった場合はどうしたらいいでしょうか?
arryとか使うのですか?

【44346】Re:チェックをいれた数だけシートを追加...
発言  Kein  - 06/11/13(月) 17:30 -

引用なし
パスワード
   それならそのコードを借りて↓のように変更しみて下さい。

Sub シート作成2()
  Dim i As Integer, j As Integer
  Dim Ary1 As Variant, Ary2 As Variant

  Ary1 = Array("梅", "桜", "桃", "松", "草")
  Ary2 = Array("種", "枝", "葉", "茎", "幹")
 For i = 1 To 5
    If WS.OLEObjects("CheckBox" & i).Object.Value = True Then
      For j = 6 To 10
        If WS.OLEObjects("CheckBox" & j).Object.Value = True Then
          Worksheets.Add(After:=ActiveSheet).Name = _
         Ary1(i - 1) & Ary2(j - 6)
        End If
      Next j
    End If
  Next i
  Worksheets(1).Activate
End Sub

【44350】Re:チェックをいれた数だけシートを追加...
お礼  はんぺん  - 06/11/13(月) 18:30 -

引用なし
パスワード
   まさにそのとおりです!
ドンピシャでかなり感激です!!

実はAryは初めてで使い方もわからなかったので、
>         Ary1(i - 1) & Ary2(j - 6)
がかなりツボでした。

本当にありがとうございました。

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