[[20100307204901]] 『カード作成』(km) ページの最後に飛ぶ

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

 

『カード作成』(km)
    a         b        c        d         e        f        g
 1 取引先  品名  素材  カラー  定価   個数   卸値 

 この様な配列で1500行並んでいます。

 これを、sheet2に転記したいと考えています

 2列毎コピーして  取引先 品名
          素材  カラー
          定価  個数
          卸    値

 この様にはできないでしょうか?最後の卸値はセル連結にしたいです

 例えば、上記作業がワンセットとして,格納出来ればマクロの繰り返し

 処理で1500回出来るのでは?もし出来るのであればその格納法を

 教えていただけないでしょうか、自分でやってみて出来なければ

 コードを載せて、また、教えていただきたいと思っています。

 説明不足かも知れませんがお願いします。値札を作りたいのです
  

 最終形態はどのセルにどの様に表示させるのでしょう?
 元データのサンプルには行列番号が書いてありますが
 Sheet2の方は、書いてないので良く分かりません。

 例えば、元データがSheet1に有る場合
 Sheet2のA1セルに
=IF(INDEX(Sheet1!A:A,ROW(A4)/4)="","",INDEX(Sheet1!A:A,ROW(A4)/4))
 B1セルには、上の式で、B列を参照する物
=IF(INDEX(Sheet1!B:B,ROW(A4)/4)="","",INDEX(Sheet1!B:B,ROW(A4)/4))
 A2セルには、上の式で、C列を参照する物
=IF(INDEX(Sheet1!C:C,ROW(A4)/4)="","",INDEX(Sheet1!C:C,ROW(A4)/4))
 ・・・・と、A4セルまで参照先を変更した式を入力し
 A4:B4セルはセルの結合をします。

 A1:B4セルを選択して、下にフィルドラッグすると
 1行分が4行になって、繰り返して参照出来ると思います。

 (HANA)

 HANAさん、ありがとうございます、できました!

 5列あれば=row(a5)/5に変更すればいいですね

 はい、全て変更して回るのは面倒ですが
 その様にして頂ければ宜しいかと思います。

 (HANA)

 すみません!もう一度教えてください。
 HANAさんに教わった形で挑戦しましたが1500行を修正しながらはとても時間が

 笑われると思いますが やりたいことのコードを初心者ながら載せてみます

    Sub rei()

  Dim A As Variant      
                                   
  A = Sheets("元帳").Range("b:c").Value  ここで2列3行にしたいです 
   Sheets("元帳").Range("d:e").Value   
      Sheets("元帳").Range("F").Value   

      Sheets("値札").Range("a:b").Value = A ここでa列b列に各行毎転記

    sheets("値札").Activate
    Rows("3").RowHeight = 50  ここも3行毎繰り返したく
    Columns("a").ColumnWidth = 20
    Columns("b").ColumnWidth = 30
    MsgBox Range("g2").RowHeight

 1500行だと=x3で4500行になるため元帳が500行になったら値札c:dへ移行

 1000行になったらe:fへ移動となる様にしたいのですが

 調べたのですがさっぱりわかりません。

 HANAさん、2日位でで仕上げたいので、せっかくのご教授申し訳ありません

 この様な説明で理解していただけた良いのですが

 元帳は、b2:f1500

 値札はa1:b1からです   よろしくお願いします


 >1500行を修正しながら
 のイメージがよく分かりません。

 >元帳が500行になったら値札c:dへ移行
 >1000行になったらe:fへ移動
 これは分かりました。

 結局、1行が何行に成るのですか?
 そして、最初の2組(元の1行と、新しいシートの1組 を2セット)
 を例に挙げて、どのセルがどこへ配置されれば良いのか教えて下さい。

 数式の場合は、最初の一組を作れば
 (最初のご説明の場合、A:B列用の式を 7個
  C:D列用の式を7個 E:F列用の式を 7個の合計21個)
 後はフィルドラッグで済むと思っているのですが。。。?

 私のイメージは実際と何が違うのでしょう?

 (HANA)

 HANAさん、理解できず申し訳有りません。

        a        b       c       d        e      F       g

  1  取引先  品名   素材  カラー   定価  個数  卸値

   2  aaa     あああ  ?????     s        10     100      5

   元帳  a2===>  値札  a1

   元帳   a3===>  値札   a5

 このよううになります  取引先 品名        a1  b2   
             素材  カラー      c3  d4
             定価  個数        e5  F6
             卸    値         g7
   
                                             a3  b3

 コピーすると行数がずれてきます。どうしたらいいですか

 >このよううになります
 本当ですか?

 値札の一行目は a1,b1・・・ではなく、a1,b2・・・ と成っているのに
    五行目は、a3,b3・・・となりますか?

 数式によっては、a1,b1が参照されている状態で
 A1:B4を選択して下にフィルドラッグしたら
 a3,b3が参照されることは有るかもしれませんが。。。

 それとも、書いて居られるのはセル番地では無いのかな?
 それとか、元帳のセル番地の事じゃないとか。。。?

 上手く行かない値札シートの
 A1,B1,A5,B5セルに入っている式を教えて下さい。

 (HANA)

 因みに。。。
=IF(INDEX(Sheet1!A:A,ROW(A4)/4)="","",INDEX(Sheet1!A:A,ROW(A4)/4))
 この式では、Sheet1のA1セル(1行目)が表示されてしまうので
 INDEX関数の二番目の引数に +1 をして、2にするか、
 ROW関数で8を返えさせて /4したときに  2に成るようにするか。。。
 する必要が有りますが、その点は大丈夫ですか?

 どこかの列で1,2,3,4行目に「=ROW(A4)/4」を入れて
 それらのセルを選択して下にフィルドラッグしてみて下さい。
 1,1,1,1,2,2,2,2,3,3,3,3,・・・・と4つずつ縦に数字が並ぶと思います。
 この数字がINDEX関数の 行番号 に指定されるので
 Sheet1の、1行目、2行目 のセルの値が返されることに成ります。

 A:B列は、2行目から参照したいので 最初のブロックの数式は +1
=IF(INDEX(Sheet1!A:A,ROW(A4)/4+1)="","",INDEX(Sheet1!A:A,ROW(A4)/4+1)) 

 C:D列は、126目から参照したいなら、最初のブロックの数式は +125
=IF(INDEX(Sheet1!A:A,ROW(A4)/4+125)="","",INDEX(Sheet1!A:A,ROW(A4)/4+125))
 に成ると思います。

 済みませんが、もう一度確認してみて頂ければと思います。

 (HANA) 


 一応、500で折り返して隣の列に移動するマクロです。
 '------
Sub km()
Dim tbl As Variant, x As Variant
Dim i As Long, xr As Long, xc As Long
    With Sheets("元帳")
        tbl = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row, 7).Value
    End With
    ReDim x(1 To 500, 1 To Columns.Count)
    For i = 2 To UBound(tbl, 1)
        If xr = 500 Then
            xr = 0
            xc = xc + 2
        End If
        If tbl(i, 1) = "" Then
            Exit For
        End If
        x(xr + 1, xc + 1) = tbl(i, 1):  x(xr + 1, xc + 2) = tbl(i, 2)
        x(xr + 2, xc + 1) = tbl(i, 3):  x(xr + 2, xc + 2) = tbl(i, 4)
        x(xr + 3, xc + 1) = tbl(i, 5):  x(xr + 3, xc + 2) = tbl(i, 6)
        x(xr + 4, xc + 1) = tbl(i, 7)
        xr = xr + 4
    Next
    With Sheets("値札")
        .Cells.ClearContents
        .Range("A1").Resize(500, xc + 2).Value = x
    End With
End Sub
 '------

 列幅・行幅・セルの結合 等の書式設定は
 毎回実行の必要は無いと思うのでマクロに入れていませんが。。。
 毎回新しいシートに作成する事に成りますか?

 (HANA)

 HANAさん、ありがとうございます。今度こそ思った通りに出来ました

 セル番地ミスを気が付いて正しく導いてくれたことに感謝いたします。

 今後とも宜しくお願いします。(KM)

 出来ましたか、良かったです。
 ROW(A4)/4 の部分が、最初から数式内に入っていたので
 わかりにくかったかもしれません。。。

 今回は、どうせ参照先(Sheet1!A:A の部分)を
 それぞれ変更する必要が有ったので、全て ROW(A4)/4 にしましたが
 =INT(ROW(A4)/4) こんな感じで、切り捨てる事にすると
 A1セルに入れてこれをフィルドラッグするだけで
 1,1,1,1,2,2,2,2,3,3,3,3,・・・・と4つずつ縦に数字を得ることが出来ます。

 又何かの折に使用を試みて頂ければと思います。

 (HANA)

 3行飛ばしで行幅を変えるにはどうすればいいですか 自動マクロでやってみましたが

 行が多すぎて困っています

 Sub Macro3()

    Range("3:3,6:6,9:9,12:12,15:15,18:18,21:21,24:24,27:27,30:30,33:33,36:36,39:39" _
        ).Select
    Range("A39").Activate
    Selection.RowHeight = 40
    Range("A3").Select
 End Sub

 600行まで変更したいのですが、またインプットボックスで好きに幅を変更できるように

 出来ればお願いします (km)


 何度もすみません。何とか動いていますが キャンセルするとエラーになります

 0を打ち込めば回避できますが キャンセルボタンで終了できませんでしょうか

 Sub haba()
    Dim i As Long

    i = InputBox("幅を入力してください")

    Sheets("Sheet1").Activate
    Range("3:3,6:6").RowHeight = i

     Range("3:6").Select
    Selection.Copy
    Rows("7:300").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("a1").Select

 End Sub

 宜しくお願いします (km)


 このマクロは、Sheet1以外がアクティブな時に実行して
 Sheet1をアクティブにして終了するのですか?

 (HANA)

 HANAさん、すみません。とにかく動け と思い

 こうかな?で動かしました、アクティブとかまったく考えていません

 0を入れてOKなら終了してくれます。どうしたらいいですか?


 >どうしたらいいですか?
 そうですねぇ。。。他の人がどうしているのか
 見てみても良いと思いますが。。。

 それから、デバッグ出来るようになる。

 それにしても、そのコードは私が実行すると
 10行目までしか行の高さは変わりませんが
 kmさんの環境では300行目まで変わりますか?

 >アクティブとかまったく考えていません
 それで、考えてみるとどうなのでしょう?

 Sheet1を選択して終われば良いのなら
 こんな感じで?

 Sub haba2()
    Dim i As String
    i = InputBox("幅を入力してください")
    If i <> "" Then
        Sheets("Sheet1").Activate
        Range("3:3").RowHeight = i

        Range("1:3").Copy
        Rows("4:300").PasteSpecial
        Application.CutCopyMode = False
        Range("A1").Select
    End If
 End Sub

 InputBoxのヘルプをみると「文字列型 (String) の値を返します。」と書いてありますので
 その値を入れる変数も、Stringが良いと思います。

 そして、キャンセルした時には「""」が入るので
 iの値を確認してから、処理を分岐します。

 (HANA)

 hanaさん、コピペしてやってみましたが、300行までデーターが消えました?

 何が悪いのでしょうか

 HANAさんのコードでしたら

 >Rows("4:300").PasteSpecial
 を
 Rows("4:300").PasteSpecial xlPasteFormats
                           ~~~~~~~~~~~~~~~
 と少し付け足してみてください
 (momo)

 (momo)さん、ありがとうございます。できました (km)

 momoさん、フォロー有り難う御座います。

 にしても・・・ご提示の「haba」のコードも
 データは消えてましたよね。。。?

 まぁ、あのコードでは
 3:6行目が7:10行目に貼り付くだけ
 だったのではないかと思いますが。。。??

 (HANA)



コメント返信:

[ 一覧(最新更新順) ]


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