[[20090802170154]] 『2列に渡る規則的なコピー&ペースト作業』(niumo) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『2列に渡る規則的なコピー&ペースト作業』(niumo)

下記の作業を行うエクセルマクロの記述を教えていただけませんでしょうか。

<繰り返し回数の最大値をどこかのセルに手入力>
列A = ”2”(回)、列B = ”3”(回) とする。

  A  B
1 1  1
2 2  1
3 1  2
4 2  2
5 1  3
6 2  3

Aの値+1を下のセルに続けていく。手入力した列Aの最大値”2”で終了する。
Aの値が最大値まで到達したら、今度はBの値+1で同じことを行う。手入力した列Bの最大値”3”で終了する。


いつもはマクロの記録でマクロを作ってそれを作りかえて使っています。その方法では上記作業について作り方がわかりません。すみませんがご教示頂けたら大変ありがたいです。よろしくお願いします。


 イメージが良くわかりませんので
 何を得るためにそのような事がしたいのかも
 書いて見られるのが良いかもしれません。

 A1,B1は常に「1」から始まるのでしょうか?

 >列A = ”2”(回)
 これは
  A列の最大値が「2」で、上のセルの値+1がこれを超えるなら
  「1」に戻る
 と言う事でしょうか?

 でしたら、A3が「1」となるのは分かりますが
 どうして、A6まで繰り返されるのでしょう?
 「1,2」の組み合わせで
 >列B = ”3”(回) 
 3回出現すると、確かにA6になりますが。。。

 例えば、
 列B = ”6”(回)だったらA12行まで続くのでしょうか?

 >今度はBの値+1で同じことを行う。
 同じことを行うと
 1 2 3 1 2 3
 と並びそうに思いますが
 >列A = ”2”(回)
 だから、同じ数字が二回ずつなのでしょうか?

 こちらも同様に、なぜ6行目までなのかもわかりません。

 (HANA)

HANAさんありがとうございます。
説明を加えさせてください。

+++++++

 A1,B1は常に「1」から始まるのでしょうか? 
>1から始めます。

 例えば、 
 列B = ”6”(回)だったらA12行まで続くのでしょうか? 
>そうです。その場合B列は上から112233445566と続くことになります。結果12行になります。
 +++++++

具体的に行いたい作業ですが、

3D図形の1枚の平面上において1mおきにならんだグリッドを、座標化したいです。
A列がx軸座標、B列がy軸座標を表します。
上の例で言えば、A3行は、座標(1, 2)点を示します。

説明が足りない場合には、お手数をおかけしますがまた教えていただければと思います。
またこの目的で上記よりもよい方法があればぜひ教えていただければ幸いです。
よろしくお願いします。


 全く地道なコードですが。。。

 '------
Sub niumo1()
    Dim tbl, ipd
    Dim mx As Long, my As Long
    Dim xi As Long, yi As Long, ti As Long
ipd = InputBox("x,y の順にカンマで区切って入力してください。")
    If InStr(ipd, ",") <> 0 Then
        mx = Val(Split(ipd, ",")(0))
        my = Val(Split(ipd, ",")(1))
        If mx * my <> 0 Then
            ReDim tbl(1 To mx * my, 1 To 2)
            For yi = 1 To my
                For xi = 1 To mx
                    ti = ti + 1
                    tbl(ti, 1) = xi
                    tbl(ti, 2) = yi
                Next
            Next
            Range("A:B").ClearContents
            Range("A1").Resize(ti, 2) = tbl
        End If
    End If
End Sub
 '------

 (HANA) コード変更しました。2009/8/3 0:16

 >今度はBの値+1で同じことを行う。
 の意味が、わかったかもしれません。

 >列A = ”2”(回)
 この値が、変数 mx に
 >列B = ”3”(回)
 この値が、変数 my に入ります。

 また、A列に対応するデータは
 tbl(ti, 1) に一度作成された後
 Range("A1").Resize(ti, 2) = tbl
 で、実際にセルに出力されます。

 mx=2 , my=3 とすると

            For yi = 1 To 3
                For xi = 1 To 2
                    ti = ti + 1
                    tbl(ti, 1) = xi
                Next
            Next
 yiのループ処理中にxiがループしますので
 yi = 1 のとき
    xi = 1 のとき
       ti = 0 + 1 = 1
         tbl(1, 1) = 1  次のxi
    xi = 2 のとき
       ti = 1 + 1 = 2
         tbl(2, 1) = 2
   xiのループが終わって、次のyiのループ
 yi = 2 のとき
    xi = 1 のとき
       ti = 2 + 1 = 3
         tbl(3, 1) = 1  次のxi
    xi = 2 のとき
       ti = 3 + 1 = 4
         tbl(4, 1) = 2  
   xiのループが終わって、次のyiのループ
 yi = 3 のとき
    xi = 1 のとき
       ti = 4 + 1 = 5
         tbl(5, 1) = 1  次のxi
    xi = 2 のとき
       ti = 5 + 1 = 6
         tbl(6, 1) = 2
   yiのループも完了

 >Aの値が最大値まで到達したら
 xiの値(ループ)が、最大値 mx まで済んだら
 >列Bの最大値”3”で終了する。
 同じ事(xiに関するループ処理)を my 回繰り返します。

 (HANA)

 HANAさんありがとうございます。
 試してみて自分の目的に合っていることが分かりました。
 分かりにくい説明だったかもしれませんが内容をくみ取っていただいて嬉しく思います。
 本当にありがとうございました。

 (niumo)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.