[[20150630165535]] 『見出し行』(プリン) ページの最後に飛ぶ

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

 

『見出し行』(プリン)

お世話になります。
見よう見まねでコードを書いてみたのですが上手く動きません。
何方か教えて頂けないでしょうか?

表を作る時、ソートを掛けると見出し行が3行あるのでエクセルの
設定では1行までしか設定出来なかったので、見出し行3行を、必ず
7行目に貼り付けるコードです。

エラーコード 91
オブジェクト変数またはwithブロック変数が設定されていません。

Sub test()

Dim myrow As Range
Dim c As Range

  myrow = Range("A" & Rows.Count) ’A列の数値をmyrowに入れる

For Each c In myrow  ’myrowをc変数に代入

 Select Case c

    Case Is = 18  ’A列の数値によって選択した3行を7行目挿入
               Rows("25:27").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown
    Case Is = 17
               Rows("24:26").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown
    Case Is = 16
               Rows("23:25").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown
    Case Is = 15
               Rows("22:24").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown
    Case Is = 14
               Rows("21:23").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown
    Case Is = 13
               Rows("20:22").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown
    Case Is = 12
              Rows("19:21").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown
    Case Is = 11
               Rows("18:20").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown
    Case Is = 10
               Rows("17:19").Select
               Selection.Cut
               Rows("7:7").Select
               Selection.Insert Shift:=xlDown

    End Select

    Next c

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 いったんコードをアップしたんですが、↓のコメントの通り、要件がよくわからないままの
 ばあたり的なコードだったので、消去します。

 ↓でもコメントしていますが

 ・どんなレイアウトの表があって
 ・このように並び替えたい
 ・でも、こういうふうにすると
 ・こうなってしまう

 このように、具体的な説明をしてもらえれば、皆さんから適切な処理案の回答があると思います。
  
(β) 2015/06/30(火) 18:32

 ↑ とコメントしましたが、質問文をよく読むと、要件を取り違えているようですね
。
 各行のA列の値により処理分岐しているわけですが、どの行であっても、処理すべき行を【固定】で指定していますが
 それでいいのですか?

 実際には、どのセルの値を判定して、どこを、どうしたいのでしょうか?

(β) 2015/06/30(火) 18:37


 なんとなくわかってきました。

 A列のデータが何行目まであるか(あるいは何行目から始まっているか?)を調べ、
 その状況によって、しかるべきところに3行の何かを挿入。

 そういうことですか。
 それなら、ループの必要は全くありませんが、そのあたりを、もう少し具体的に説明してください。

(β) 2015/06/30(火) 18:40


ちょっと違いますが
見出し行3行をALT+ENTERで改行して1セルに3行記入するか、3行結合して記入することで見出しを3行分にすることはできます。

(デイト) 2015/06/30(火) 18:50


β様、デイト様
コメント遅くなりました。
社内LANからデータを取って作表するのですが
データの形がいびつなので苦肉の策でコードを書いたのです。
AからH列までは10行目からIからY列は7行目からとなっています。
A列にはコード番号が入っていて1から18までの数値です。
只、コード番号は順不同で、時間により10から18の間で変化します。
作表しコード番号順にソートを掛けると7から9行目のデータが下に行ってしまうので
A列の最大値を見つけその時下に行ったデータを元の7から9行目に戻すことを
行いたいのです。
説明が得意ではないので分って頂けたでしょうか?
宜しくお願い致します。
(プリン) 2015/06/30(火) 21:52

 まだよくわかりませんが、10行目から下の領域を、タイトル行なしで並び替えということではだめなのですか?
 並び替えはマクロで?手動で?

 マクロならそのコードをアップしてください。
 手動なら、どこを、どのように指定して並び替えているか手順を教えてください。

(β) 2015/06/30(火) 23:01


β様 ありがとうございます。
今まで、手動でやっていたのですが
出来るならマクロでお願い致します。
(プリン) 2015/06/30(火) 23:16

 >>今まで、手動でやっていたのですが 
 >>出来るならマクロでお願い致します。

 その操作をマクロ記録して、生成されるコードで固定領域になっている部分を変数にすればいいのですが
 参考までに以下。
 (キーが1列なので、2003以前のSortメソッドを使っています。マクロ記録をすると、新しいSortオブジェクトを基本としたコードが生成されますが)

 Sub Sample()
    Dim r As Range

    '10行目以降の領域
    With ActiveSheet.Range("A1", ActiveSheet.UsedRange)
        Set r = .Offset(9).Resize(.Rows.Count - 1)
    End With

    r.Sort Key1:=Columns("A"), Order1:=xlAscending, Header:=xlNo

 End Sub

 ちなみに、今までやっておられた方法での結果を、マクロにすると以下になります。
 アップされたオリジナルのコードとの違いも見ていただければよろしいかと。

 Sub ちなみに()
    Dim r As Range

    '7行目以降の領域
    With ActiveSheet.Range("A1", ActiveSheet.UsedRange)
        Set r = .Offset(6).Resize(.Rows.Count - 1)
    End With

    r.Sort Key1:=Columns("A"), Order1:=xlAscending, Header:=xlNo

    '下に配置されたヘッド部分の移動
    Range("A" & Rows.Count).End(xlUp).Offset(1).EntireRow.Resize(3).Cut
    Rows("7:7").Insert Shift:=xlDown

 End Sub

(β) 2015/07/01(水) 06:53


β様 遅くなりました。
対比出来るように2つマクロを提示して頂きありがとうございます。
作成されたコードをみると私のコードは場当たり的なものですね。
なかなか時間が作れない中で閃きで書いたものでお恥ずかしい限りです。
良い機会なのでvbaの勉強を再開したいと思います。
本当にありがとうございました。
(プリン) 2015/07/01(水) 10:55

コメント返信:

[ 一覧(最新更新順) ]


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