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
⇓
教えて下さい。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
No4です
>教えていただきたい内容を手作業でしております。
>凄く時間を要してしまいます。そこで、VBAでできないか思いましたが、むずし過ぎて
であれば、その手作業の処理をそのままVBAにすれば良いのでは?
とりあえず、マクロの記録をネタにして、処理範囲を可変にしてゆくことでも可能と思います。
コツとしては、手順を分割して、判断を単純化することでしょうか。
例えばNo4の作業列のBA、BB、(BC)列のように、対象になるのか否か等を一旦表示しておくとか。
一気にやろうとすると、(多分)わけがわからなくなるのではないでしょうか。
処理を分解して経過を表示することで、デバッグもやり易くなるものと想像します。(まぁ、処理速度は落ちますけれど…)
いずれにしても、私には、ご質問文からでは何をどうしたいのかよくわからないので、コード化はできませんが悪しからず。
No.7
- 回答日時:
Excelでデータを扱う場合は1行1データが基本です。
2行1データというのは格段に難しくなり融通がつかなくなりますよ。
そこからまず見直してください。
どうしても2行1データにしたいのならば
1行1データで処理をしたのち、出力フォームで2行1データにしてください。
皆さんがおっしゃられるようにできないことはありません。
でも、少しの変更をする場合でも大変ですよ。
No.5
- 回答日時:
No4の指摘どおり
データは 1行単位が基本です
今後のメンテを考えると 今 データ構造を見直すべきだと思います
中途半端に取り繕うと さらに地獄が待っています
No.4
- 回答日時:
こんにちは
No1様の疑問点に追加で・・・
>切り取りとったデーターを番号順に挿入する
結果の例を見ても、普通の昇順でソートされているようには見えないので、独特のロジックで並びを制御しているとしか思えません。
ご質問の内容は、全体をロジカルに説明できるならば、関数でも可能と思います。
(データの処理としては2行一組よりも1行に記述する方式の方が、VBAでも(特に関数の場合は)容易になるはずです。)
複雑にしておいてわからなくなっているものを、誰かに作ってもらっても、修正も変更もできないものになるだけかと推測します。
そのような観点からは、関数での処理の方がまだ、メンテはしやすいのではないでしょうか。
(質問者様の理解度によりますので、VBAの方が得意なら、そちらの方が良いのかも知れません)
以下に、関数で行う場合の一例を示しておきます。(あくまでも一例です)
(BA、BB列を作業列として利用)
1)BA列に挿入条件に合致するか否かを表示
2)BB列に並べ替えのキー(A列の奇数行がキーか?)を対象だけ転記
3)別シートにBB列をキーにして、順序(独特なので序列が不明)に合せて転記
(序列計算が複雑な場合は、BC列に序列だけ先に算出しておくなどもありかと)
以上で、並べ替えられるはずなので、必要に応じて、セル全体をコピー、値をペーストでFIXすれば宜しいでしょう。
No.3
- 回答日時:
やはり 何をしたいのかよくわかりません
データの並べ替えをしたいのはわかりますが。。
データの貼り付け先の法則性が不明です
12行下ってどこですか?
もう少し相手にわかるようにしっかりと書きましょう
No.1
- 回答日時:
回答をする前に、
とても無駄なことをやっているように思えてなりません
データの規則性、法則性は無いのですか?
今後データの構造を見直す予定はないのですか?
質問の内容に対し 回答できなくはありませんが、
力業での処理になります
挿入する行の空きが一定かどうか不明
判定条件のsが小文字と言いながら サンプルは大文字
Sの前にスペースがあるのか無いのか?
(サンプルがまばら)
(指示部品)のカッコが半角/全角が統一されているのかどうか
(手入力だとバラバラになっている可能性
処理のロジックとしては
上から最終行までループ処理し、
判定条件のSを左から1文字目にあるかどうかを関数で調べる
And条件で一つ下のセルの値が (指示部品) であるか
2つの条件が一致すれば
配列にデータを格納し、
該当行を削除
ネストしたループ処理で今度は空白セルを調べ、
該当したらそこへ配列に格納したデータを吐き出す
一つ下のセルが空白でなければ1行挿入し
データを吐き出す
ここで問題になるのが、見た目は空白セルであっても
スペースが挿入されていると データありになる為
セルが空白であるとは認識されない
そのシートで空白が存在しないことになっているのであれば
最初に置換処理でスペースを削除しておく必要があります
いずれにしても 力業の場合
処理後に確認する必要がある為
自動化の本末転倒になってしまいます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数で、範囲内の最後のセ...
-
更新前と更新後の差分をVBAを使...
-
【エクセル】区切り位置で分割...
-
Excel関数:「0」を除いた標準...
-
SUMPRODUCT関数 行が増えても...
-
SUMIFとCOUNTIFの違いについて
-
値の入っているセルのうち、一...
-
[エクセルVBA]複数の勤務表ファ...
-
エクセル関数countifの初歩的な...
-
エクセルVBAで分岐処理と繰...
-
correl関数の範囲指定
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
エクセルでオートフィルタのボ...
-
PowerPointで表の1つの列だけ...
-
お店に入るために行列に並んで...
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルのオートフィルタで最...
-
「B列が日曜の場合」C列に/...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
【エクセル】区切り位置で分割...
-
Excel関数で、範囲内の最後のセ...
-
値の入っているセルのうち、一...
-
SUMIFで数値が入力されているセ...
-
更新前と更新後の差分をVBAを使...
-
エクセル 8ケタの数字から日数...
-
ピボットテーブル 0個の行を...
-
エクセルで何種類のデータがあ...
-
エクセルに入力された日付「S40...
-
SUMPRODUCT関数 行が増えても...
-
Excelのマクロで行を間引きたい
-
【Excel】歯抜けデータの集約
-
エクセル、正数のみの集計[(負...
-
A and B or Cの合計の出し方
-
Excelで複数列かつ複数行分の一...
-
ピボットで複数の区切りでグル...
-
エクセルで見出し(項目名)の...
-
エクセル 別のファイルにデータ...
おすすめ情報
ありがとうございます。
説明不足、言葉足らずですみません
>判定条件のsが小文字と言いながら サンプルは大文字
データー番号の語尾に小文字のSが付きます
>Sの前にスペースがあるのか無いのか?
ありません
>(指示部品)のカッコが半角/全角が統一されているのかどうか
括弧は半角です
>ここで問題になるのが、見た目は空白セルであっても
データー等はありまでん、空欄です
やはり無理なのでしょうか
回答いただき誠にありがとうございます。
データーは、取引相手より送られてくるもので、データー数が1000くらいあり
今回、教えていただきたい内容を手作業でしております。
凄く時間を要してしまいます。そこで、VBAでできないか思いましたが、むずし過ぎて
私では、対応できず投稿いたしました。
VBAでの対応が希望です。
親切に回答頂きありがとうございます。