[[20051031114136]] 『条件になったら、行の挿入』(きぃ) ページの最後に飛ぶ

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

 

『条件になったら、行の挿入』(きぃ)

はじめまして。

すみませんが、どなたか教えて下さい。

注文の商品名と注文数の入った一覧表があります。その、数量が上から累計して20になったら
、1行の空行を挿入したいのですが、何か方法があれば教えて下さい。
宜しくお願い致します。

エクセルバージョン Excel2000
OSのバージョン Windows2000
です。


この質問では、どこに行を挿入したいのか、わかりません。
もう少し、具体的に例示してください。(ダイ)

ダイさん、すみませんでした。具体例を例示致します。

   A(品名)   B(数量) 

1 りんご       15

2 みかん       4

3 バナナ       1

4 メロン        3

5 ぶどう       17

6 いちご        5 





と、あります。
条件としては、上から数えて合計が20になる毎に、空行の列を挿入したいのです。
例の場合では、3・4列の間と、4・5列の間に、入れたいのです。
 
説明が下手で、申し訳ございません・・・・
宜しくお願い致します。


 >例の場合では、3・4列の間と、4・5列の間に、入れたいのです。
 3・4列の間
  15+4+1 = 20
 4・5列の間
  3 = 3
  ???

 もう一つ
 >上から数えて合計が20になる毎に
 そんなに都合よく、「20」になるように並んでいるのでしょうか?
 「20」を跨いだ場合は、どうするのでしょう?

 (キリキ)(〃⌒o⌒)b

何度も、すみません・・・
例の場合、間違えていました・・・
3・4の間と、5・6の間の間違いです・・・。

あと、正確には20以下になると一列の空行が欲しいので、累計で19・23
のようになった時は、累計19の後に一行入れたいのです。

説明足らずですみませんでした。
度々、申し訳ございませんが、宜しくお願い致します・・・。


 こんな感じで如何でしょう?

 1)Alt + F11 で、「Microsoft Visual Basic」を出す。
 2)挿入 → 標準モジュール
 3)出てきた画面に下記コードをコピペ
 4)エクセル画面に戻り、Alt + F8 で「test」を実行

 標準モジュールへコピペ
'----------------
Sub test()
Dim i As Long
Dim data As Integer
i = 1 '数量が2行目からなら、ここを2に変更
Do Until Cells(i, 2) = ""
    data = data + Cells(i, 2)
    If data > 20 Then
        data = 0
        Rows(i).Insert Shift:=xlDown
    End If
    i = i + 1
Loop
End Sub

 ※1行目から、数量が入っているものとしてます。
  2行目からの場合は、変数 i を変更してください。
 ※元に戻せませんので、新しく名前を付けるなどして別ファイルでお試しください。

 (キリキ)(〃⌒o⌒)b

キリキさん、
早々の御回答ありがとうございます!!
とても分かりやすいご説明で、初心者の私でもマクロの登録出来ました!(涙)
そして、空行の追加も出来ました!
すごく助かります。本当にありがとうございました〜!(^o^)丿
早速、明日からの業務で使用させて頂きます!!


 解決済みのところ申し訳ありません。業務上は無いとは思いますが、
 もしB列に21以上の数字があるとデータの最下行が65536に達するまで
 ループしてしまうようなので注意が必要と思います。
 キリキさん、改訂版をお願いします。
(純丸)(o^-')b


純丸さんありがとうございます。
業務で数量30のものもあり、純丸さんの現象が起こりました。
すみませんが、キリキさん、宜しくお願い致します。
(きぃ)

 ひぇ〜!! 
 大変失礼しました。。。
 純丸さん、いつもありがとうございます。
 感謝!感謝!

 きぃさん、本当に失礼しましたm(_ _)m
 こちらと、差し替えてみてください。

 '---------------
Sub test()
Dim i As Integer
Dim data As Long
i = 2
Do
    data = data + Cells(i, 2)
    If Cells(i, 2) >= 20 Or data = 20 Then
        i = i + 1
        Rows(i).Insert shift:=xlDown
        data = 0
    ElseIf data > 20 Then
        Rows(i).Insert shift:=xlDown
        data = 0
    End If
    i = i + 1
Loop Until Cells(i, 2) = ""
End Sub

 今度は大丈夫かな・・・?
 (キリキ)(;⌒o⌒)b


 21以上の数字ががあった場合、その上下に空白行が付くと思うのですが、
 キリキさんのコードでは上側が空白行にならず、上方からの
 数字と連続してしまいますね。検証ばかりでは何なので、
 自分で考え、キリキさんのコードを一部変更してみましたが、
 これできぃさんの要望通りになりますか?
(純丸)(o^-')b

 Sub test()
 Dim i As Integer
 Dim data As Long
 i = 2
 Do
     data = data + Cells(i, 2)
     If Cells(i, 2) >= 20 Then
         Rows(i).Insert shift:=xlDown
         i = i + 2
         Rows(i).Insert shift:=xlDown
         data = 0
     ElseIf data > 20 Then
         Rows(i).Insert shift:=xlDown
         data = 0
     End If
     i = i + 1
 Loop Until Cells(i, 2) = ""
 End Sub

 何だか楽しくなってきました!
 純丸さんに、リベンジ〜♪
 20以上の数字が連続した場合、上下の空白(2個分)が出来てしまいますね〜♪
 更に、一番上に20以上があったら空白は必要無いような気がしたので、
 少し編集してみました。
 如何でしょう?

 '---------------
Sub test()
Dim i As Long
Dim data As Integer
i = 2
If Cells(i, 2) >= 20 Then
    data = Cells(i, 2)
    i = i + 1
End If
Do
    data = data + Cells(i, 2)
    If Cells(i, 2) >= 20 Then
        Rows(i).Insert shift:=xlDown
        i = i + 1
        data = Cells(i, 2)
    ElseIf data = 20 Then
        i = i + 1
        Rows(i).Insert shift:=xlDown
        i = i + 1
        data = Cells(i, 2)
    ElseIf data > 20 Then
        Rows(i).Insert shift:=xlDown
        data = Cells(i, 2)
    End If
    i = i + 1
Loop Until Cells(i, 2) = ""
End Sub

 (キリキ)(〃⌒o⌒)b


 自分のコードの検証は甘くなるなぁ〜。 □\(__;)...ハンセイ
 キリキさん、お疲れ様でした。完璧と思います。検証合戦?終了〜
(純丸)(o^-')b

お返事遅れて、申し訳ございません・・・

キリキさん、純丸さん、本当にありがとうございました!!
早速、試してみました所、結果の出る早さに、驚きでいっぱいです!!
本日の業務から早速、活用させていただきます!!

以前から、「エクセルの学校」は『新・単語検索』で活用させて頂いておりましたが、今回初めて質問させて
頂きました。キリキさん、純丸さん、色々検証頂きましたこと、本当に感謝いたします。
今後も、分からない事を質問させて頂くこともあると思いますが、どうか宜しくお願い致します。
(きぃ)


コメント返信:

[ 一覧(最新更新順) ]


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