Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Microsoft 365)
2行に渡っているデータを1シートにまとめたい
投稿日時: 24/02/03 03:00:37
投稿者: パウパト

2行に渡っているデータを1シートにまとめたい
 
VBAが非常に分からず、大変困っており、ご質問させていただきました。処理時間が非常に長く処理に時間がかかっている為、
ご協力いただけますと幸いです。お忙しい中大変申し訳ございませんが、非常に困っており、お力をお貸しください。
 
【貼付】シート
T.<1行のデータ>
 A列     B列       C列 D列    E列        
 項目@    担当者名A B法人様 副担当者名 空欄
 
U.<2行のデータ>
     F列            G列    H列        I列     J列 K列
    管理No.        金額   契約者名 紹介元  紹介元B.D 
XXXXX 1111111111 / 継続中        ジョセイ ハナコ ジョセイ ハナコ     S58.1.1 女性
H29.12.31            10000  女性 花子 女性 花子     S58.1.1 女性
XXXXX 1111111112 / 申込中        ダンセイ タロウ  ダンセイ タロウ     S59.1.1 男性
H30.1.1     10001  男性 太郎  男性 太郎     S59.1.1 男性
XXXXX 1111111113 / 解約     パウ パト     パウ スカイ     S50.1.1 女性
H30.1.2                10002 パウ パト パウ スカイS40.1.9 女性
XXXXX 1111111111 / 辞退            ジョセイ ハナコ  ジョセイ ハナコ     S58.1.1 女性
H29.12.31     10000 女性 花子 女性 花子     S58.1.1 女性
 
@『F列』1行目:7桁目から10目を抽出→(例)1111111113 2行目:申込日を抽出
A『G列』2行目:金額を抽出→(例)10002
B『H列』2行目:漢字名を抽出→(例)パウ パト
C『J列・K列』:1行目は『H列』2行目の誕生日と性別→(例)S50.1.1 女性
D『I列』2行目:漢字名を抽出→(例)パウ スカイ
E『J列・K列』:2行目は『I列』2行目の誕生日と性別→(例)S40.1.9 女性
 
V.<1行のデータ>
 L列     M列     N列     O列
          管理No.        商品名
空欄    1111111113    0001    X商品
空欄    1111111112    0001    Y商品
空欄    1111111111    0001    Z商品
空欄    1111111110    0001    O商品
空欄    1111111109    0001    P商品
空欄    1111111111    0002    Q商品
空欄    1111111113    0001    R商品
空欄    1111111112    0001    Y商品
 
F列で抽出した10桁と同一の10桁の数字をM列から探し、ヒットしたらO列の商品を抽出。
→(例)1111111113はX商品。7行目も同じ10桁があるが、最初にヒットしたX商品のみを抽出。
T、U、Vで貼付する元のデータベースが違う為、貼付ミスがないようE列とL列は空欄にしております。
 
これらのデータを別シートに下記のようにまとめたいと考えております。
 
【まとめ】シート
  A列   B列 C列 D列   E列   F列    G列  H列    I列
  管理No. 申込日 経過年数 商品名 金額 契約者性別 契約者名 契約者B.D 契約者年齢
 
  J列   K列    L列    M列   N列   O列 P列    Q列
紹介元名 紹介元B.D 紹介元年齢 契約状況 項目@ 担当者名A B法人様 副担当者名
 
(例)
  A列    B列 C列 D列  E列 F列   G列  H列  I列
1111111113 H29.12.31 6年1ヶ月 X商品 10002 女性 パウ パト S50.1.1 49歳
 
  J列    K列   L列  M列  N列   O列 P列    Q列
パウ スカイ S40.1.9 59歳 解約 項目@ 担当者名A B法人様 副担当者名
 
 
@【貼付】シートF列にデータがあるまで実行する。
AN・O・P・Q列については、A列〜M列までデータがあれば、最後まで同じ内容となります。
 
よろしくお願いいたします。
 

回答
投稿日時: 24/02/03 08:56:39
投稿者: WinArrow

https://www.moug.net/faq/viewtopic.php?t=82618
でも、指摘があったと思いますが、「コード作成依頼」的な質問は禁止されております。
  
部分的に、マクロの記録でコードを作成し、それを組立てていくような努力をしてください。
その過程での不明点を質問するような形にできませんか?
  
今のままだと、外注してみたら如何ですか?
  
となってしまいます。
  
掲示されてデータの項目名とデータの対応が殆ど理解できません。

回答
投稿日時: 24/02/03 12:33:59
投稿者: simple

再度の投稿ご苦労さまでした。理解が進みました。
 
既に書きましたように、コピーペイストで対応できないものであれば、
スレッドを改めては、と申し上げました。
しかし、私の理解するところでは、
やはりコピーペイストで基本的に対応できるものではないか、と思っています。
そうであれば、現状の改善に留めたほうが安全な気がします。
 
VBAを仮にここで入手できたとしても、
修正要件が出てきたり、トラブルが発生した場合に
ご自分で対応できないのではないかと懸念します。
私は、以下のような考え方で、現状どおり一般機能だけで対応してはいかがかと思います。
既に式を作成されているのですから、それを活かすことにもなります。
あくまで私案ですが。

【手順案】
1. まとめシートの2行目に式を入れる。
2. 2行目と3行目(空白行)をコピーして、個数分だけ(×2の偶数行からなるセル範囲)下にコピーします。
3. さらに、オートフィルタを使って非空白行だけ表示する方法もあります。
なお、オートフィルタを使ってデータありの行だけ表示したものを、
さらに別のシートに値貼り付けする処理を実行すれば、幾分かは軽くなるはずです。(indirectの不使用)

回答
投稿日時: 24/02/03 21:22:13
投稿者: WinArrow

2行データを1行データに編集する数式を紹介します。
サンプルなので、実際データに合わせて適用してください。
 
2行データ:A列,B列,C列とする
編集列をF列,G列,H列とする。(数式を入力するセル)
 
1〜2行が項目名として、数式は3行目から入力する。
F3:=LEFT(INDEX(A:A,ROW(),1),2)  同じ行のA列セルの値の2桁を取り出す。
G3:=INDEX(B:B,ROW(),1)      同じ行のB列セルの値を取り出す。
H3:=INDEX(A:A,ROW()+1,1)     1行下のA列セルの値を取り出す。
F4:=""  強制的に空白文字列をsっとする。(必須ではない)
F3〜H4(2行)を選択して、下へフィルドラッグする
 
これで、2行を1行に編集することができます。
他のシートをマージするための数式で参照するならば、データの並びは関係ないと思います。
 

投稿日時: 24/02/08 00:42:14
投稿者: パウパト

simple様、winarrow様
いつも的確なアドバイスをいただき、本当にありがとうございます。
家族の体調不良でコメントが遅くなりました。すみません。
お二人にいただいたアドバイスを元にやったところ、やりたい処理をすることがでしました。
格段に処理も早くなりました。本当にありがとうございます。
心身共に気持ちが楽になりました。
 
今回、ご質問の仕方や投稿内容でご迷惑をおかけして本当に申し訳ありませんでした。
 
今後ともよろしくお願いいたします。