Excel VBA質問箱 IV

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

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


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

【54553】マクロを短くしたい わんわん 08/3/18(火) 23:40 質問[未読]
【54554】Re:マクロを短くしたい かみちゃん 08/3/19(水) 0:08 発言[未読]
【54556】Re:マクロを短くしたい わんわん 08/3/19(水) 0:58 お礼[未読]
【54555】Re:マクロを短くしたい おちゃら 08/3/19(水) 0:26 発言[未読]
【54557】Re:マクロを短くしたい わんわん 08/3/19(水) 1:14 質問[未読]
【54558】Re:マクロを短くしたい かみちゃん 08/3/19(水) 1:44 発言[未読]
【54573】Re:マクロを短くしたい わんわん 08/3/20(木) 0:20 お礼[未読]
【54576】Re:マクロを短くしたい VBWASURETA 08/3/21(金) 12:36 発言[未読]
【54584】Re:マクロを短くしたい わんわん 08/3/22(土) 0:55 お礼[未読]
【54592】Re:マクロを短くしたい VBWASURETA 08/3/22(土) 18:15 発言[未読]
【54596】Re:マクロを短くしたい わんわん 08/3/22(土) 20:57 質問[未読]
【54598】Re:マクロを短くしたい neptune 08/3/22(土) 21:20 発言[未読]
【54599】Re:マクロを短くしたい わんわん 08/3/23(日) 1:42 お礼[未読]
【54602】Re:マクロを短くしたい neptune 08/3/23(日) 15:21 回答[未読]
【54605】Re:マクロを短くしたい わんわん 08/3/23(日) 23:36 お礼[未読]
【54609】Re:マクロを短くしたい VBWASURETA 08/3/24(月) 9:55 発言[未読]
【54678】Re:マクロを短くしたい わんわん 08/3/25(火) 23:45 お礼[未読]

【54553】マクロを短くしたい
質問  わんわん  - 08/3/18(火) 23:40 -

引用なし
パスワード
   マクロ初心者です。

行のデータを表に表示をしています。
以下のマクロを短くしたいのですが方法が分かりません

'コピー元(印刷)から(一覧)へ値を写す

 With Sheets("一覧")

  '照会データ
 
 .Cells(1, 4) = Sheets("印刷").Cells(6, 4)
.Cells(43, 5) = Sheets("印刷").Cells(6, 5)
.Cells(43, 8) = Sheets("印刷").Cells(6, 6)
.Cells(1, 15) = Sheets("印刷").Cells(6, 8)
.Cells(44, 6) = Sheets("印刷").Cells(6, 9)
.Cells(1, 10) = Sheets("印刷").Cells(6, 10)
.Cells(2, 18) = Sheets("印刷").Cells(6, 28)
.Cells(2, 16) = Sheets("印刷").Cells(6, 28)
.Cells(1, 8) = Sheets("印刷").Cells(6, 41)

'1行
 .Cells(3, 6) = Sheets("印刷").Cells(6, 2)
 .Cells(3, 7) = Sheets("印刷").Cells(6, 3)
 .Cells(3, 2) = Sheets("印刷").Cells(6, 14)
 .Cells(3, 11) = Sheets("印刷").Cells(6, 26)
 .Cells(3, 16) = Sheets("印刷").Cells(6, 29)
 .Cells(3, 17) = Sheets("印刷").Cells(6, 30)
 .Cells(3, 19) = Sheets("印刷").Cells(6, 31)
 .Cells(3, 12) = Sheets("印刷").Cells(6, 32)
 .Cells(3, 13) = Sheets("印刷").Cells(6, 33)
 .Cells(3, 15) = Sheets("印刷").Cells(6, 34)
 .Cells(3, 8) = Sheets("印刷").Cells(6, 36)
 .Cells(4, 8) = Sheets("印刷").Cells(6, 38)
 .Cells(3, 9) = Sheets("印刷").Cells(6, 39)
 .Cells(4, 9) = Sheets("印刷").Cells(6, 41)
 .Cells(3, 10) = Sheets("印刷").Cells(6, 42)
 
 '2行
 .Cells(5, 6) = Sheets("印刷").Cells(7, 2)
 .Cells(5, 7) = Sheets("印刷").Cells(7, 3)
 .Cells(5, 2) = Sheets("印刷").Cells(7, 14)
 .Cells(5, 11) = Sheets("印刷").Cells(7, 26)
 .Cells(5, 16) = Sheets("印刷").Cells(7, 29)
 .Cells(5, 17) = Sheets("印刷").Cells(7, 30)
 .Cells(5, 19) = Sheets("印刷").Cells(7, 31)
 .Cells(5, 12) = Sheets("印刷").Cells(7, 32)
 .Cells(5, 13) = Sheets("印刷").Cells(7, 33)
 .Cells(5, 15) = Sheets("印刷").Cells(7, 34)
 .Cells(5, 8) = Sheets("印刷").Cells(7, 36)
 .Cells(6, 8) = Sheets("印刷").Cells(7, 38)
 .Cells(5, 9) = Sheets("印刷").Cells(7, 39)
 .Cells(6, 9) = Sheets("印刷").Cells(7, 41)
 .Cells(5, 10) = Sheets("印刷").Cells(7, 42)
 
 '3行
 .Cells(7, 6) = Sheets("印刷").Cells(8, 2)
 .Cells(7, 7) = Sheets("印刷").Cells(8, 3)
 .Cells(7, 2) = Sheets("印刷").Cells(8, 14)
 .Cells(7, 11) = Sheets("印刷").Cells(8, 26)
 .Cells(7, 16) = Sheets("印刷").Cells(8, 29)
 .Cells(7, 17) = Sheets("印刷").Cells(8, 30)
 .Cells(7, 19) = Sheets("印刷").Cells(8, 31)
 .Cells(7, 12) = Sheets("印刷").Cells(8, 32)
 .Cells(7, 13) = Sheets("印刷").Cells(8, 33)
 .Cells(7, 15) = Sheets("印刷").Cells(8, 34)
 .Cells(7, 8) = Sheets("印刷").Cells(8, 36)
 .Cells(8, 8) = Sheets("印刷").Cells(8, 38)
 .Cells(7, 9) = Sheets("印刷").Cells(8, 39)
 .Cells(8, 9) = Sheets("印刷").Cells(8, 41)
 .Cells(7, 10) = Sheets("印刷").Cells(8, 42)

 '4行
 .Cells(9, 6) = Sheets("印刷").Cells(9, 2)
 .Cells(9, 7) = Sheets("印刷").Cells(9, 3)
 .Cells(9, 2) = Sheets("印刷").Cells(9, 14)
 .Cells(9, 11) = Sheets("印刷").Cells(9, 26)
 .Cells(9, 16) = Sheets("印刷").Cells(9, 29)
 .Cells(9, 17) = Sheets("印刷").Cells(9, 30)
 .Cells(9, 19) = Sheets("印刷").Cells(9, 31)
 .Cells(9, 12) = Sheets("印刷").Cells(9, 32)
 .Cells(9, 13) = Sheets("印刷").Cells(9, 33)
 .Cells(9, 15) = Sheets("印刷").Cells(9, 34)
 .Cells(9, 8) = Sheets("印刷").Cells(9, 36)
 .Cells(10, 8) = Sheets("印刷").Cells(9, 38)
 .Cells(9, 9) = Sheets("印刷").Cells(9, 39)
 .Cells(10, 9) = Sheets("印刷").Cells(9, 41)
 .Cells(9, 10) = Sheets("印刷").Cells(9, 42)

 '5行
 .Cells(11, 6) = Sheets("印刷").Cells(10, 2)
 .Cells(11, 7) = Sheets("印刷").Cells(10, 3)
 .Cells(11, 2) = Sheets("印刷").Cells(10, 14)
 .Cells(11, 11) = Sheets("印刷").Cells(10, 26)
 .Cells(11, 16) = Sheets("印刷").Cells(10, 29)
 .Cells(11, 17) = Sheets("印刷").Cells(10, 30)
 .Cells(11, 19) = Sheets("印刷").Cells(10, 31)
 .Cells(11, 12) = Sheets("印刷").Cells(10, 32)
 .Cells(11, 13) = Sheets("印刷").Cells(10, 33)
 .Cells(11, 15) = Sheets("印刷").Cells(10, 34)
 .Cells(11, 8) = Sheets("印刷").Cells(10, 36)
 .Cells(12, 8) = Sheets("印刷").Cells(10, 38)
 .Cells(11, 9) = Sheets("印刷").Cells(10, 39)
 .Cells(12, 9) = Sheets("印刷").Cells(10, 41)
 .Cells(11, 10) = Sheets("印刷").Cells(10, 42)

 '6行
 .Cells(13, 6) = Sheets("印刷").Cells(11, 2)
 .Cells(13, 7) = Sheets("印刷").Cells(11, 3)
 .Cells(13, 2) = Sheets("印刷").Cells(11, 14)
 .Cells(13, 11) = Sheets("印刷").Cells(11, 26)
 .Cells(13, 16) = Sheets("印刷").Cells(11, 29)
 .Cells(13, 17) = Sheets("印刷").Cells(11, 30)
 .Cells(13, 19) = Sheets("印刷").Cells(11, 31)
 .Cells(13, 12) = Sheets("印刷").Cells(11, 32)
 .Cells(13, 13) = Sheets("印刷").Cells(11, 33)
 .Cells(13, 15) = Sheets("印刷").Cells(11, 34)
 .Cells(13, 8) = Sheets("印刷").Cells(11, 36)
 .Cells(14, 8) = Sheets("印刷").Cells(11, 38)
 .Cells(13, 9) = Sheets("印刷").Cells(11, 39)
 .Cells(14, 9) = Sheets("印刷").Cells(11, 41)
 .Cells(13, 10) = Sheets("印刷").Cells(11, 42)

 '7行
 .Cells(15, 6) = Sheets("印刷").Cells(12, 2)
 .Cells(15, 7) = Sheets("印刷").Cells(12, 3)
 .Cells(15, 2) = Sheets("印刷").Cells(12, 14)
 .Cells(15, 11) = Sheets("印刷").Cells(12, 26)
 .Cells(15, 16) = Sheets("印刷").Cells(12, 29)
 .Cells(15, 17) = Sheets("印刷").Cells(12, 30)
 .Cells(15, 19) = Sheets("印刷").Cells(12, 31)
 .Cells(15, 12) = Sheets("印刷").Cells(12, 32)
 .Cells(15, 13) = Sheets("印刷").Cells(12, 33)
 .Cells(15, 15) = Sheets("印刷").Cells(12, 34)
 .Cells(15, 8) = Sheets("印刷").Cells(12, 36)
 .Cells(16, 8) = Sheets("印刷").Cells(12, 38)
 .Cells(15, 9) = Sheets("印刷").Cells(12, 39)
 .Cells(16, 9) = Sheets("印刷").Cells(12, 41)
 .Cells(15, 10) = Sheets("印刷").Cells(12, 42)
 
 '8行
 .Cells(17, 6) = Sheets("印刷").Cells(13, 2)
 .Cells(17, 7) = Sheets("印刷").Cells(13, 3)
 .Cells(17, 2) = Sheets("印刷").Cells(13, 14)
 .Cells(17, 11) = Sheets("印刷").Cells(13, 26)
 .Cells(17, 16) = Sheets("印刷").Cells(13, 29)
 .Cells(17, 17) = Sheets("印刷").Cells(13, 30)
 .Cells(17, 19) = Sheets("印刷").Cells(13, 31)
 .Cells(17, 12) = Sheets("印刷").Cells(13, 32)
 .Cells(17, 13) = Sheets("印刷").Cells(13, 33)
 .Cells(17, 15) = Sheets("印刷").Cells(13, 34)
 .Cells(17, 8) = Sheets("印刷").Cells(13, 36)
 .Cells(18, 8) = Sheets("印刷").Cells(13, 38)
 .Cells(17, 9) = Sheets("印刷").Cells(13, 39)
 .Cells(18, 9) = Sheets("印刷").Cells(13, 41)
 .Cells(17, 10) = Sheets("印刷").Cells(13, 42)

 '9行
 .Cells(19, 6) = Sheets("印刷").Cells(14, 2)
 .Cells(19, 7) = Sheets("印刷").Cells(14, 3)
 .Cells(19, 2) = Sheets("印刷").Cells(14, 14)
 .Cells(19, 11) = Sheets("印刷").Cells(14, 26)
 .Cells(19, 16) = Sheets("印刷").Cells(14, 29)
 .Cells(19, 17) = Sheets("印刷").Cells(14, 30)
 .Cells(19, 19) = Sheets("印刷").Cells(14, 31)
 .Cells(19, 12) = Sheets("印刷").Cells(14, 32)
 .Cells(19, 13) = Sheets("印刷").Cells(14, 33)
 .Cells(19, 15) = Sheets("印刷").Cells(14, 34)
 .Cells(19, 8) = Sheets("印刷").Cells(14, 36)
 .Cells(20, 8) = Sheets("印刷").Cells(14, 38)
 .Cells(19, 9) = Sheets("印刷").Cells(14, 39)
 .Cells(20, 9) = Sheets("印刷").Cells(14, 41)
 .Cells(19, 10) = Sheets("印刷").Cells(14, 42)

 '10行
 .Cells(21, 6) = Sheets("印刷").Cells(15, 2)
 .Cells(21, 7) = Sheets("印刷").Cells(15, 3)
 .Cells(21, 2) = Sheets("印刷").Cells(15, 14)
 .Cells(21, 11) = Sheets("印刷").Cells(15, 26)
 .Cells(21, 16) = Sheets("印刷").Cells(15, 29)
 .Cells(21, 17) = Sheets("印刷").Cells(15, 30)
 .Cells(21, 19) = Sheets("印刷").Cells(15, 31)
 .Cells(21, 12) = Sheets("印刷").Cells(15, 32)
 .Cells(21, 13) = Sheets("印刷").Cells(15, 33)
 .Cells(21, 15) = Sheets("印刷").Cells(15, 34)
 .Cells(21, 8) = Sheets("印刷").Cells(15, 36)
 .Cells(22, 8) = Sheets("印刷").Cells(15, 38)
 .Cells(21, 9) = Sheets("印刷").Cells(15, 39)
 .Cells(22, 9) = Sheets("印刷").Cells(15, 41)
 .Cells(21, 10) = Sheets("印刷").Cells(15, 42)

End With

【54554】Re:マクロを短くしたい
発言  かみちゃん  - 08/3/19(水) 0:08 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>行のデータを表に表示をしています。

For 〜 Next による繰り返し処理を使います。
具体的には、以下のような感じに工夫します。

もしかしたら、もっと短くなるかもしれませんが、「マクロ初心者」ということですので、
あまり難しいことは書かないでおきます。

Sub Sample()
 Dim ws1 As Worksheet
 Dim ws2 As Worksheet
 Dim lngRow As Long
 
 Set ws1 = Sheets("一覧")
 Set ws2 = Sheets("印刷")
 
 With ws1
  '照会データ
  .Cells(1, 4).Value = ws2.Cells(6, 4).Value
  .Cells(43, 5).Value = ws2.Cells(6, 5).Value
  .Cells(43, 8).Value = ws2.Cells(6, 6).Value
  .Cells(1, 15).Value = ws2.Cells(6, 8).Value
  .Cells(44, 6).Value = ws2.Cells(6, 9).Value
  .Cells(1, 10).Value = ws2.Cells(6, 10).Value
  .Cells(2, 18).Value = ws2.Cells(6, 28).Value
  .Cells(2, 16).Value = ws2.Cells(6, 28).Value
  .Cells(1, 8).Value = ws2.Cells(6, 41).Value

  For lngRow = 6 To 15
   .Cells(lngRow * 2 - 9, 6).Value = ws2.Cells(lngRow, 2).Value
   .Cells(lngRow * 2 - 9, 7).Value = ws2.Cells(lngRow, 3).Value
   .Cells(lngRow * 2 - 9, 2).Value = ws2.Cells(lngRow, 14).Value
   .Cells(lngRow * 2 - 9, 11).Value = ws2.Cells(lngRow, 26).Value
   .Cells(lngRow * 2 - 9, 16).Value = ws2.Cells(lngRow, 29).Value
   .Cells(lngRow * 2 - 9, 17).Value = ws2.Cells(lngRow, 30).Value
   .Cells(lngRow * 2 - 9, 19).Value = ws2.Cells(lngRow, 31).Value
   .Cells(lngRow * 2 - 9, 12).Value = ws2.Cells(lngRow, 32).Value
   .Cells(lngRow * 2 - 9, 13).Value = ws2.Cells(lngRow, 33).Value
   .Cells(lngRow * 2 - 9, 15).Value = ws2.Cells(lngRow, 34).Value
   .Cells(lngRow * 2 - 9, 8).Value = ws2.Cells(lngRow, 36).Value
   .Cells(lngRow * 2 - 8, 8).Value = ws2.Cells(lngRow, 38).Value
   .Cells(lngRow * 2 - 9, 9).Value = ws2.Cells(lngRow, 39).Value
   .Cells(lngRow * 2 - 8, 9).Value = ws2.Cells(lngRow, 41).Value
   .Cells(lngRow * 2 - 9, 10).Value = ws2.Cells(lngRow, 42).Value
  Next
 End With
End Sub

【54555】Re:マクロを短くしたい
発言  おちゃら  - 08/3/19(水) 0:26 -

引用なし
パスワード
   ▼わんわん さん:
こんばんは。
かみちゃんさんの意見に加え、データの関連付け(添え字を)をテーブル化(配列など)してループ処理するのが良いような気がします。

【54556】Re:マクロを短くしたい
お礼  わんわん  - 08/3/19(水) 0:58 -

引用なし
パスワード
   ▼かみちゃん さん:
早速の回答ありがとうございました。
明日、教えて頂いたコードに書き換えて使って見ようと思います。
内容を理解して自分で使えるよう努力します。

【54557】Re:マクロを短くしたい
質問  わんわん  - 08/3/19(水) 1:14 -

引用なし
パスワード
   ▼おちゃら さん:
こんばんは。
参考意見ありがとうございます

>かみちゃんさんの意見に加え、データの関連付け(添え字を)をテーブル化(配列など)してループ処理するのが良いような気がします。

”データの関連付け(添え字を)をテーブル化”について全く分からないので具体的に教えて頂きたいのですが
よろしくお願いします。

【54558】Re:マクロを短くしたい
発言  かみちゃん  - 08/3/19(水) 1:44 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

>”データの関連付け(添え字を)をテーブル化”について全く分からないので具体的に教えて頂きたい

どこまで理解できるかわかりませんが、たとえば、以下のような感じです。
一部分だけ、テーブル化しています。
もちろん、他の部分もできますが、そこは、自分で工夫してください。

ただし、失礼ながら「マクロ初心者」の方には、敷居が高いような気がします。
もちろん、配列は、勉強する価値がありますので、ぜひモノにしていただきたい
のですが、徐々にステップアップされたほうがいいと思います。

Sub Sample()
 Dim ws1 As Worksheet
 Dim ws2 As Worksheet
 Dim lngRow As Long
 
 Dim arry As Variant
 Dim i As Integer
 arry = Array(Array(6, 7, 2, 11, 16, 17, 19, 12, 13, 15, 8, 9, 10), _
       Array(2, 3, 14, 26, 29, 39, 31, 32, 33, 34, 36, 39, 42))

 Set ws1 = Sheets("一覧")
 Set ws2 = Sheets("印刷")

 With ws1
  '照会データ
  .Cells(1, 4).Value = ws2.Cells(6, 4).Value
  .Cells(43, 5).Value = ws2.Cells(6, 5).Value
  .Cells(43, 8).Value = ws2.Cells(6, 6).Value
  .Cells(1, 15).Value = ws2.Cells(6, 8).Value
  .Cells(44, 6).Value = ws2.Cells(6, 9).Value
  .Cells(1, 10).Value = ws2.Cells(6, 10).Value
  .Cells(2, 18).Value = ws2.Cells(6, 28).Value
  .Cells(2, 16).Value = ws2.Cells(6, 28).Value
  .Cells(1, 8).Value = ws2.Cells(6, 41).Value

  For lngRow = 6 To 15
   For i = 0 To UBound(arry(0))
    .Cells(lngRow * 2 - 9, arry(0)(i)).Value = ws2.Cells(lngRow, arry(1)(i)).Value
   Next
   .Cells(lngRow * 2 - 8, 8).Value = ws2.Cells(lngRow, 38).Value
   .Cells(lngRow * 2 - 8, 9).Value = ws2.Cells(lngRow, 41).Value
  Next
 End With
End Sub

なお、テーブル化の部分は、他に書き方がいろいろあると思います。

【54573】Re:マクロを短くしたい
お礼  わんわん  - 08/3/20(木) 0:20 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん さんの短いコードを使って同じ結果が出せました感激です。
コードの意味も理解でき、For〜NextのlngRowの使い方、よく分かりました。
本当にありがとうございました。

ところで

>”データの関連付け(添え字を)をテーブル化”について全く分からないので具体的に教えて頂きたい

で提示いただいた”配列”のコードについては
Excel VBA Arrayで検索して見ましたが、

>ただし、失礼ながら「マクロ初心者」の方には、敷居が高いような気がします。

そのとおり、ちょっと見では理解不能です、機会を見てゆっくりと解析してみたいと思います。
丁寧な説明に感謝しております。

【54576】Re:マクロを短くしたい
発言  VBWASURETA  - 08/3/21(金) 12:36 -

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

>>”データの関連付け(添え字を)をテーブル化”について全く分からないので具体的に教えて頂きたい

こんにちは。
Array配列についてですが、簡単に言うと1個の変数で複数入れられる箱です。

例えば1次元配列で2個の値を入れるとかは

Dim Test As Variant

Test = Array("a", "b")

'*** 結果 ***
Test(0) = "a"
Test(1) = "b"

という結果になります。


次に2次元配列で2個ずつ入れる場合の例です。

Dim Test As Variant

Test = Array(Array("a", "b"), Array("c", "d"))

'*** 結果 ***
Test(0)(0) = "a"
Test(0)(1) = "b"

Test(1)(0) = "c"
Test(1)(1) = "d"


のように変数へ複数の文字列を入れることが出来ます。
例は文字列ですが数値でも可能です。

Arry配列は中にある分だけ用意されます。
で、添え字というのは()()の中の数値になります。

この辺りは慣れてから使うのが良いかもですね。

【54584】Re:マクロを短くしたい
お礼  わんわん  - 08/3/22(土) 0:55 -

引用なし
パスワード
   ▼VBWASURETA さん:
今日、かみちゃんさんのArray配列コードも使って見ました。
>Array(2, 3, 14, 26, 29, 39, 31, 32, 33, 34, 36, 39, 42))
             ↑
             30
で動作OKでした。(こんなところにかみちゃんさんの親心を感じます)
3つのコードを順に追って、UBound関数で配列の値を代入するイメージ
(表現が適切でないかも)やArray配列の大まかな使い方も漠然と掴めましたが
VBWASURETAさんの具体的な説明でもっと良く分かりました。

親切に説明いただき、VBWASURETAさんありがとうございました。

【54592】Re:マクロを短くしたい
発言  VBWASURETA  - 08/3/22(土) 18:15 -

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

もう一つ説明します。

>3つのコードを順に追って、UBound関数で配列の値を代入するイメージ
>(表現が適切でないかも)やArray配列の大まかな使い方も漠然と掴めましたが
>VBWASURETAさんの具体的な説明でもっと良く分かりました。

UBound関数は代入ではないですよ。
たとえば、以下のような感じの配列があるとします。

 Dim Test As Variant
 Test = Array(1, 2, 3)
 

'*** 結果 ****
Test(0)=1
Test(1)=2
Test(2)=3
  ↑UBound関数はこの値を返します。

'*** UBound関数結果 ***
UBound (Test)=2


となります。つまりUBound関数はTest配列の箱の大きさを
教えてくれる関数です。

【54596】Re:マクロを短くしたい
質問  わんわん  - 08/3/22(土) 20:57 -

引用なし
パスワード
   ▼VBWASURETA さん:
VBWASURETA さん こんばんわ

>となります。つまりUBound関数はTest配列の箱の大きさを
>教えてくれる関数です。


かみちゃんさんのサンプルコード
>arry = Array(Array(6, 7, 2, 11, 16, 17, 19, 12, 13, 15, 8, 9, 10), _
       Array(2, 3, 14, 26, 29, 39, 31, 32, 33, 34, 36, 39, 42))

を例にすれば、下記のようでいいですか?
UBound関数結果
UBound(arry (0))=12
   (arry (1))=12

【54598】Re:マクロを短くしたい
発言  neptune  - 08/3/22(土) 21:20 -

引用なし
パスワード
   ▼わんわん さん:
横から失礼

なぜ、Helpを見ないのでしょう?
UBound(arrayname[, dimension])
第一引数の説明では
arrayname 必ず指定します。配列変数の名前です。変数の標準的な
名前付け規則に従って指定します。 

そしてArray関数はHelpに以下のように書かれています。
配列が格納されたバリアント型 (Variant) の値を返します。

ここまで書いて気が付きましたが、関数以前に少しだけでも良いから
文法の勉強が必要です。

>UBound(arry (0))=12
ですが、UBound関数のHelpの説明には伊かのように書かれています。
配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。
 したがって、代入は出来ません。
即ち、= (代入演算子)の左辺には持ってきてはいけません。

【54599】Re:マクロを短くしたい
お礼  わんわん  - 08/3/23(日) 1:42 -

引用なし
パスワード
   ▼neptuneさん:こんばんわ

いつもneptuneさんの投稿拝見させていただいています。

>arry = Array(Array(6, 7, 2, 11, 16, 17, 19, 12, 13, 15, 8, 9, 10), _
>       Array(2, 3, 14, 26, 29, 39, 31, 32, 33, 34, 36, 39, 42))

        ↓

    arry (0)(0)=6
    arry (0)(1)=7
          ・
          ・
    arry (0)(12)=10

    arry (1)(0)=2
    arry (1)(1)=3
          ・
          ・
    arry (1)(12)=42     
         ↑
UBound関数結果は各12(添字の最大値)こんな感じでしょうか?

>UBound関数結果
>UBound(arry (0))=12
>   (arry (1))=12
上記については、誤解を与える書き方をしてすいません。

>ここまで書いて気が付きましたが、関数以前に少しだけでも良いから
>文法の勉強が必要です。

実際に文法に弱いので勉強したいと思います。

neptuneさん 説明ありがとうございました。

【54602】Re:マクロを短くしたい
回答  neptune  - 08/3/23(日) 15:21 -

引用なし
パスワード
   ▼わんわん さん:
こんにちは
>UBound関数結果は各12(添字の最大値)こんな感じでしょうか?
サンプルを2点書いておきます。

Sub Arrayを使う方法()
Dim arry As Variant
Dim i As Long, j As Long
Dim imax As Long, jmax As Long

  arry = Array(Array(6, 7, 2, 11, 16, 17, 19, 12, 13, 15, 8, 9, 10), _
       Array(2, 3, 14, 26, 29, 39, 31, 32, 33, 34, 36, 39, 42))
  imax = UBound(arry, 1)
  jmax = UBound(arry(0), 1)
  For i = 0 To imax
    For j = 0 To jmax
      Worksheets("Sheet1").Cells(i + 1, j + 1).Value = arry(i)(j)
    Next j
  Next i

End Sub

※個人的にはこちら↓の方が判りやすいです。これを機会に
CollectionのHelpに目を通しておくのが良いかと思います。

Sub コレクションを使う方法()
Dim coll As Collection
Dim i As Long, imax As Long
Dim j As Long, jmax As Long

  Set coll = New Collection
  
  coll.Add Array(6, 7, 2, 11, 16, 17, 19, 12, 13, 15, 8, 9, 10)
  coll.Add Array(2, 3, 14, 26, 29, 39, 31, 32, 33, 34, 36, 39, 42)
  
  imax = coll.Count
  jmax = UBound(coll(1))
  
  For i = 1 To imax
    For j = 0 To jmax
      Worksheets("Sheet1").Cells(i, j + 1).Value = coll(i)(j)
    Next j
  Next i
  Set coll = Nothing
End Sub
>実際に文法に弱いので勉強したいと思います。
頑張って下さい。

追記:
UBound関数は引数が要素を持たない場合はエラーが発生します。
要素を持たない場合があるときは必ずエラー処理が必要です。

【54605】Re:マクロを短くしたい
お礼  わんわん  - 08/3/23(日) 23:36 -

引用なし
パスワード
   ▼neptune さん:こんばんわ

neptune さん、サンプルコードありがとうございます。
私にはまだまだ高度すぎると思いますが、他の方々に頂いたコードや説明も参考に
して一度使ってみたいと思います。

追記等、親切な解説に感謝しています。

【54609】Re:マクロを短くしたい
発言  VBWASURETA  - 08/3/24(月) 9:55 -

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

すみません結果の部分がわかりづらかったみたいですね。


'*** UBound関数結果 ***
UBound (Test)=2

の「=」はUBound関数の戻り値として書いてました。


>かみちゃんさんのサンプルコード
>>arry = Array(Array(6, 7, 2, 11, 16, 17, 19, 12, 13, 15, 8, 9, 10), _
       Array(2, 3, 14, 26, 29, 39, 31, 32, 33, 34, 36, 39, 42))

>を例にすれば、下記のようでいいですか?
>UBound関数結果
>UBound(arry (0))=12
>   (arry (1))=12

因みに上記の>UBound関数結果ですが、その結果になります。
但しArray(x)(y)とした場合、どちらもyの結果になります。

xのサイズを知るには

'ソースコードは省きます。
'*** UBound関数結果 ***
UBound(arry) = 1


と()無しの状態にするとx側のMAX値が取得できます。
このような書き方をすると数学のようになるので覚えづらいかなと思いまして
箱を例に書いてました。

確かにCollectionオブジェクトの方が変にArrayが重なっていないので覚えやすいですね。

【54678】Re:マクロを短くしたい
お礼  わんわん  - 08/3/25(火) 23:45 -

引用なし
パスワード
   VBWASURETAさん
皆さんこんばんわ

私にはまだ本当に応用できるか不安ですが、みなさんに頂いた
サンプルコードを試す中、説明や解説を役立てたいと思います。
この度は暖かい支援ありがとうございました。

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