夏が終わったと感じる瞬間って、どんな時?

Excel VBA で、2行1単位のデーター行があり、尚且つ特定条件の
データーを切り取り番号順に切り取った行を挿入する
ことについて、ご教授願います。
初心者で、どのようにしたらよいのか難しすぎてわからりません

詳細
・A列1行目は、表題が入る
・A列2行目は、品番という名称が入る
・A列3行目からデーターが入ります。
 データーは2行で1つのデーターとしてします(2行1単位)。
 データーは1000くらいあり増減します。
 そして、空欄行もあります。 
AY列まで使用しています。

切り取り挿入条件は、2行1単位の上番号に小文字のsがついてなくて、
下行目に(指示部品)と入力してあるデーターです。

上番号に小文字のsがついてなくて、
下行目に(指示部品)と入力してあるデーターの上番号で
判断します。下の行は無視です。
切り取りとったデーター(2行1単位)を番号順に挿入する

下記で説明すると
3行と4行、5と6、7と8、9と10、11と12・・・・
と2行で1つのデーター(2行1単位)となります。
切り取り対象は、19行と20行、21行と22行
となり、それぞれの上行番号(19行、21行)で判断します。

19行と20行を切り取り、12行下へ挿入となります。
21行と22行を切り取り、6行下へ挿入となります。


   A列      B C D E F  AY
1 
2  品番

3 S1231119999A
4 S113561110

5 3123389101
6 S113561120

7 S123151930A
8 S123151930

9 S123111980A
10 S123111940

11 332571219A
12

13 S123111980As
14 (指示部品)

15 S1231119999As
16 (指示部品)

17
18

19 332571251A
20 (指示部品)

21 3123389102
22 (指示部品)

23
24
   ⇓
 
 
VBA後
   A列      B C D E F  AY
1 
2  品番

3 S1231119999A
4 S113561110

5 3123389101
6 S113561120

7 3123389102
8 (指示部品)

9  S123151930A
10 S123151930

11 S123111980A
12 S123111940

13 332571219A
14

19 332571251A
20 (指示部品)

15 S123111980As
16 (指示部品)

17 S1231119999As
18 (指示部品)

19
20

21
22

23
24
   ⇓

教えて下さい。

質問者からの補足コメント

  • ありがとうございます。
    説明不足、言葉足らずですみません


    >判定条件のsが小文字と言いながら サンプルは大文字
    データー番号の語尾に小文字のSが付きます

    >Sの前にスペースがあるのか無いのか?
    ありません


    >(指示部品)のカッコが半角/全角が統一されているのかどうか
    括弧は半角です

    >ここで問題になるのが、見た目は空白セルであっても
    データー等はありまでん、空欄です


    やはり無理なのでしょうか

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/11/09 16:06
  • 回答いただき誠にありがとうございます。

    データーは、取引相手より送られてくるもので、データー数が1000くらいあり
    今回、教えていただきたい内容を手作業でしております。
    凄く時間を要してしまいます。そこで、VBAでできないか思いましたが、むずし過ぎて
    私では、対応できず投稿いたしました。

    VBAでの対応が希望です。

    親切に回答頂きありがとうございます。

    No.4の回答に寄せられた補足コメントです。 補足日時:2020/11/09 16:30

A 回答 (8件)

No4です



>教えていただきたい内容を手作業でしております。
>凄く時間を要してしまいます。そこで、VBAでできないか思いましたが、むずし過ぎて
であれば、その手作業の処理をそのままVBAにすれば良いのでは?
とりあえず、マクロの記録をネタにして、処理範囲を可変にしてゆくことでも可能と思います。

コツとしては、手順を分割して、判断を単純化することでしょうか。
例えばNo4の作業列のBA、BB、(BC)列のように、対象になるのか否か等を一旦表示しておくとか。
一気にやろうとすると、(多分)わけがわからなくなるのではないでしょうか。
処理を分解して経過を表示することで、デバッグもやり易くなるものと想像します。(まぁ、処理速度は落ちますけれど…)

いずれにしても、私には、ご質問文からでは何をどうしたいのかよくわからないので、コード化はできませんが悪しからず。
    • good
    • 0

Excelでデータを扱う場合は1行1データが基本です。


2行1データというのは格段に難しくなり融通がつかなくなりますよ。
そこからまず見直してください。

どうしても2行1データにしたいのならば
1行1データで処理をしたのち、出力フォームで2行1データにしてください。

皆さんがおっしゃられるようにできないことはありません。
でも、少しの変更をする場合でも大変ですよ。
    • good
    • 0

No4氏でした 



勝手に敬称略してしまいました
    • good
    • 0

No4の指摘どおり


データは 1行単位が基本です
今後のメンテを考えると 今 データ構造を見直すべきだと思います

中途半端に取り繕うと さらに地獄が待っています
    • good
    • 0

こんにちは



No1様の疑問点に追加で・・・

>切り取りとったデーターを番号順に挿入する
結果の例を見ても、普通の昇順でソートされているようには見えないので、独特のロジックで並びを制御しているとしか思えません。

ご質問の内容は、全体をロジカルに説明できるならば、関数でも可能と思います。
(データの処理としては2行一組よりも1行に記述する方式の方が、VBAでも(特に関数の場合は)容易になるはずです。)
複雑にしておいてわからなくなっているものを、誰かに作ってもらっても、修正も変更もできないものになるだけかと推測します。
そのような観点からは、関数での処理の方がまだ、メンテはしやすいのではないでしょうか。
(質問者様の理解度によりますので、VBAの方が得意なら、そちらの方が良いのかも知れません)


以下に、関数で行う場合の一例を示しておきます。(あくまでも一例です)
(BA、BB列を作業列として利用)
 1)BA列に挿入条件に合致するか否かを表示
 2)BB列に並べ替えのキー(A列の奇数行がキーか?)を対象だけ転記
 3)別シートにBB列をキーにして、順序(独特なので序列が不明)に合せて転記
  (序列計算が複雑な場合は、BC列に序列だけ先に算出しておくなどもありかと)
以上で、並べ替えられるはずなので、必要に応じて、セル全体をコピー、値をペーストでFIXすれば宜しいでしょう。
この回答への補足あり
    • good
    • 2

やはり 何をしたいのかよくわかりません


データの並べ替えをしたいのはわかりますが。。

データの貼り付け先の法則性が不明です
12行下ってどこですか?

もう少し相手にわかるようにしっかりと書きましょう
    • good
    • 0

左ではなく一番右側のsの事でしたか・・

    • good
    • 0

回答をする前に、


とても無駄なことをやっているように思えてなりません
データの規則性、法則性は無いのですか?
今後データの構造を見直す予定はないのですか?

質問の内容に対し 回答できなくはありませんが、
力業での処理になります
挿入する行の空きが一定かどうか不明
判定条件のsが小文字と言いながら サンプルは大文字
Sの前にスペースがあるのか無いのか?
(サンプルがまばら)
(指示部品)のカッコが半角/全角が統一されているのかどうか
(手入力だとバラバラになっている可能性

処理のロジックとしては
上から最終行までループ処理し、
判定条件のSを左から1文字目にあるかどうかを関数で調べる
And条件で一つ下のセルの値が (指示部品) であるか
2つの条件が一致すれば 
配列にデータを格納し、
該当行を削除
ネストしたループ処理で今度は空白セルを調べ、
該当したらそこへ配列に格納したデータを吐き出す
一つ下のセルが空白でなければ1行挿入し
データを吐き出す

ここで問題になるのが、見た目は空白セルであっても
スペースが挿入されていると データありになる為
セルが空白であるとは認識されない
そのシートで空白が存在しないことになっているのであれば
最初に置換処理でスペースを削除しておく必要があります

いずれにしても 力業の場合
処理後に確認する必要がある為 
自動化の本末転倒になってしまいます
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!