hayatedonda
@hayatedonda

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ExcelVBAで別シートからの情報を読み込み情報が無くなるまでループさせたい

VBAで別シートからの情報を読み込みたい。

別シートに情報があり、ほかのシートにその情報を読み込み、
ループで情報が無くなるまでループさせる。

(シート1の情報が下に伸びてる感じです)

シート1(あくまで例です。)

〜〜〜〜〜  ———————  !!!!!!  ...(1)
〜〜〜〜〜  ———————  !!!!!!  ...(2)
〜〜〜〜〜  ———————  !!!!!!  ...(3)

シート2(あくまで例です。)

(コード) 〜〜〜〜〜(コード) ———————
〜〜〜〜〜———————(コード) !!!!!!

このような感じで、シート1の(1)の情報をシート2に持っていき、
コードの間に入れる。
シートの1の情報→ 〜〜〜〜〜 ——————— !!!!!!
横のこれ1セットで、シート2に対応する情報下までを読み込んだら、シート1の(2)の情報をシート2対応する情報を下まで読み込む……20回やる…

シート2で1度シート(1)の情報を読み込んだら、2行空けてその下にシート1(2)の情報をシート2に入れていく

完成例(シート2)

(1)の情報
(コード) 〜〜〜〜〜(コード) ———————
〜〜〜〜〜———————(コード) !!!!!!
(コード) 〜〜〜〜〜(コード) ———————
〜〜〜〜〜———————(コード) !!!!!!

(2)の情報
(コード) 〜〜〜〜〜(コード) ———————
〜〜〜〜〜———————(コード) !!!!!!
(コード) 〜〜〜〜〜(コード) ———————
〜〜〜〜〜———————(コード) !!!!!!

(3)の情報
(コード) 〜〜〜〜〜(コード) ———————
〜〜〜〜〜———————(コード) !!!!!!
(コード) 〜〜〜〜〜(コード) ———————
〜〜〜〜〜———————(コード) !!!!!!

……(20回までやる。)

0

7Answer

今詰まっているポイントはどちらでしょうか?
現状できているところまでで結構ですので、実際のソースコードがあれば回答しやすいかと思います。

1Like

Comments

  1. @hayatedonda

    Questioner

    今詰まっているのは、A11からA33の行をA36から(2行空けて)コピーして貼り付けたいです。それを下に20回やりたいです。

やりたいことの確認ですが、以下のイメージであっていますか?
セルが分かれているのか、1セルに埋め込まれたの情報なのかちょっと読み解けなかったです。

image.png

それか、コードの情報は残して、下に追加するこういう形でしょうか?

image.png

1Like

Comments

  1. @hayatedonda

    Questioner

    写真付きで投稿致しました。

こちらがシート1の情報です⤵︎⤵︎⤵︎⤵︎⤵︎⤵︎⤵︎
4BABBDF1-4E7B-4B41-81BE-DC70A21FCC7C.png

こちらがシート2の情報です⤵︎⤵︎⤵︎⤵︎⤵︎⤵︎⤵︎
06FB463F-B484-4F7C-8809-BBE31C35C0A5.jpeg

行いたいことは、シート1の(A1:C1)の情報を
シート2のそれぞれ色で対応された場所に当てはめる。
33行目まで行ったら、2行開けて(36行目から次の開始)今度はシート1の(A2:C2)の情報を
シート2のそれぞれ色で対応された場所に当てはめる。(シート2の黒い部分は固定分)
33行分まで行ったらext…

これを20回やりたいです。(シート1で3つまでしかないが実際は20項目ある)

0Like

なんとなくイメージは伝わりました。
色がついている部分のみ、シート1の値を埋め込んで出力していきたいというような感じですね。

やり方はいろいろ考えられるかもしれませんが、ぱっと思いついた方法をお伝えします。
以下のような流れで実装すれば、実現できそうです。

事前準備
以下のような基準となるシートを用意。
変えたい箇所を特定の文字列で置いておく。
説明のため、[A]・[B]・[C]としています。
image.png

シート2の現在行を保持しておく

シート1を1行ずつループ
 シート2に基準シートの情報を丸々コピー
 コピーした範囲分以下のように置換する
  [A]を列Aの値で置換
  [B]を列Aの値で置換
  [C]を列Aの値で置換
 現在行を基準シートの行数+2だけ足す

0Like

Comments

  1. @hayatedonda

    Questioner

    コード教えて頂けませんか?
  2. 調べながらでコードに起こせるくらいに噛み砕いて処理をお伝えしたつもりです。
    まずはご自身で書いてみたコードを教えていただけますか?
    コードに起こすうえでわからないところなどあれば、回答いたしますのでコメントください。

7E22E5C5-79B8-43FD-8159-284E044A7FA8.jpeg

7F021E57-CE55-4A4C-BFA6-A1BCFB9F5809.jpeg

文字をExcel上に出すことは出来ました。

あとはループとシート1で次の項目に当てはめて行くだけなのですが、どうすればよろしいでしょうか?
ご教授お願いします。

0Like

ソースありがとうございます。
ソースを載せる時は回答者も流用してから修正できるように、画像ではなくコードスニペットを利用して直接貼り付けていただけるとありがたいです。

シート1の値の取得と、シート2へのセルへの出力が現状固定数値になっていると思います。
そのあたりを変数に置き換えてループ処理に組み込めば行けると思います。

0Like

Comments

  1. @hayatedonda

    Questioner

    そこを調べ方が悪いのか、全然参考になるものがないのですが、おすすめのサイトありますでしょうか?
  2. @hayatedonda

    Questioner

    Cells(I,1)=”元々I が11だった”
    Cells(I,1)=” 元々I が12だった”
    Cells(I,1)=” 元々I が13だった”
    こんな感じにやったんですけど、
    変数に置き換えても先程のように表示されなかったです。
  3. >変数に置き換えても先程のように表示されなかった

    現状はどのように表示されてしまっているのでしょうか?
    その書き方だと、同じところに何度も出力しているように見えますが、Iの値はずらしながら処理をしていますか?
  4. @hayatedonda

    Questioner

    ズラしながら処理してませんでした。
    どうすればよろしいのでしょうか?
  5. 別のコメントでループを使った処理を記載してますので参考にしてください。

    「スクリプトの記述」の部分は、すでに作られたソースを参考に以下のような処理で実装できると思います。

    I = 11

    ループ開始
    Cells(I,1)=~
    Cells(I+1,1)=~
    Cells(I+2,1)=~
    ...

    I = I+25 (2行分あけた次の行)
    次のループへ
  6. @hayatedonda

    Questioner

    出来ました!
    ありがとうございました!
    勉強になりました🙇‍♂️
  7. 解決したようでよかったです!

簡単ですが、シート1の情報を1行ずつ取得する部分を作成しました。

ご参考にしてください。

Sub test()
    Dim rowNO
    rowNO = 1
    
    Dim SRC_DIR, DST_DIR, MODULE_NAME
    
    SRC_DIR = Worksheets(1).Cells(rowNO, 1)
    DST_DIR = Worksheets(1).Cells(rowNO, 2)
    MODULE_NAME = Worksheets(1).Cells(rowNO, 3)
    
    Do While SRC_DIR <> ""
        Cells(rowNO * 3 - 2, 1) = SRC_DIR
        Cells(rowNO * 3 - 2, 2) = DST_DIR
        Cells(rowNO * 3 - 2, 3) = MODULE_NAME
    
        rowNO = rowNO + 1
        
        SRC_DIR = Worksheets(1).Cells(rowNO, 1)
        DST_DIR = Worksheets(1).Cells(rowNO, 2)
        MODULE_NAME = Worksheets(1).Cells(rowNO, 3)
    Loop

End Sub

image.png

0Like

Comments

  1. @hayatedonda

    Questioner

    お疲れ様です🙇‍♂️

    VBAで日付が、
    20220101
    20220101
    20220101
    20220102
    20220102
    20220102
    20220102
    等、日付が縦に重複しているのですが、
    別シートで重複しているものは1つだけを出力したいのですがやり方が分かりません。

    やりたいこと⤵︎ ︎
    20220101
    20220102
    のよう形にしたいです。
    ご教授お願いします。
  2. ひとつの前の値を保持して、現在の行の値が前の値と同じであれば処理をスキップというような感じで実現できるかなと思います。
  3. @hayatedonda

    Questioner

    ForNextを使うんですかね?
    コードのヒント頂けると助かります🙇‍♂️🤗
  4. for nextでもwhileでもいいと思います。
    処理のスキップはGoTo Continueを利用すればできると思います。

Your answer might help someone💌